§
    Étºfp/  ã                  ór  — d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1  e2¦   «         Z3 G d„ de¦  «        Z4 G d„ de¦  «        Z5dS )z
Tests for L{twisted.web.tap}.
é    )ÚannotationsN)Úcast)ÚskipIf)Ú	endpointsÚreactor)ÚIReactorCoreÚIReactorUNIX)ÚFilePath)ÚrequireModule)Ú
ThreadPool)Ú
UsageError)ÚPBServerFactory)ÚTestCase)Údemo)ÚResourcePublisherÚUserDirectory)ÚPythonScript)ÚSite)ÚDataÚFile)ÚOptionsÚ_AddHeadersResourceÚmakePersonalServerFactoryÚmakeService)ÚDummyRequest)Ú	CGIScript)ÚWSGIResourcec                  óì  — e Zd ZdZdd„Zdd„Z e ej        e	¦  «         d¦  «        dd„¦   «         Z
dd	„Zdd
„Zdd„Zdd„Z e ej        e	¦  «         d¦  «        dd„¦   «         Z e ej        e	¦  «         d¦  «        dd„¦   «         Zdd„Zdd„Zdd„Zdd„Z e ed¦  «        dud¦  «        dd„¦   «         Z e ed¦  «        du d¦  «        dd„¦   «         Zdd„Zdd„Zdd„Zdd„Zdd„ZdS ) ÚServiceTestszD
    Tests for the service creation APIs in L{twisted.web.tap}.
    Úreturnútuple[FilePath[str], File]c                óØ   — t          |                      ¦   «         ¦  «        }|                     ¦   «          t          ¦   «         }|                     d|j        g¦  «         |d         }||fS )aƒ  
        Helper for the I{--path} tests which creates a directory and creates
        an L{Options} object which uses that directory as its static
        filesystem root.

        @return: A two-tuple of a L{FilePath} referring to the directory and
            the value associated with the C{'root'} key in the L{Options}
            instance after parsing a I{--path} option.
        ú--pathÚroot)r
   ÚmktempÚmakedirsr   ÚparseOptionsÚpath)Úselfr(   Úoptionsr$   s       úX/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/web/test/test_tap.pyÚ_pathOptionzServiceTests._pathOption-   s]   € õ ˜Ÿš™œÑ&Ô&ˆØ�Š‰ŒˆÝ‘)”)ˆØ×Ò˜h¨¬	Ð2Ñ3Ô3Ð3Ø�vŒˆØ�TˆzÐó    ÚNonec                óª   — |                       ¦   «         \  }}|                      |t          ¦  «         |                      |j        |j        ¦  «         dS )zŠ
        The I{--path} option causes L{Options} to create a root resource
        which serves responses from the specified path.
        N)r,   ÚassertIsInstancer   ÚassertEqualr(   ©r)   r(   r$   s      r+   Ú	test_pathzServiceTests.test_path>   sO   € ð
 ×%Ò%Ñ'Ô'‰
ˆˆdØ×Ò˜d¥DÑ)Ô)Ð)Ø×Ò˜œ D¤IÑ.Ô.Ð.Ð.Ð.r-   z0The reactor does not support UNIX domain socketsc                ó  — t          |                      ¦   «         ¦  «        }|                     ¦   «          |                      ¦   «         }t          ¦   «         }|                     dd|z   d|j        g¦  «         t          |¦  «        }|                     ¦   «          |                      |j	        ¦  «         |  
                    |j        d         j        j        t          ¦  «         |                      |j        d         j        j        j        |j        ¦  «         |                      t"          j                             |¦  «        ¦  «         |                      t'          j        t#          j        |¦  «        j        ¦  «        ¦  «         dS )z¥
        The I{--path} option to L{makeService} causes it to return a service
        which will listen on the server address given by the I{--port} option.
        ú--portúunix:r#   r   N)r
   r%   r&   r   r'   r(   r   ÚstartServiceÚ
addCleanupÚstopServicer0   ÚservicesÚfactoryÚresourcer   r1   Ú
assertTrueÚosÚexistsÚstatÚS_ISSOCKÚst_mode)r)   r(   Úportr*   Úservices        r+   Útest_pathServerzServiceTests.test_pathServerG   s-  € õ ˜Ÿš™œÑ&Ô&ˆØ�Š‰ŒˆØ�{Š{‰}Œ}ˆÝ‘)”)ˆØ×Ò˜h¨°$©¸À$Ä)ÐLÑMÔMÐMÝ˜gÑ&Ô&ˆØ×ÒÑÔÐØ�Š˜Ô+Ñ,Ô,Ð,Ø×Ò˜gÔ.¨qÔ1Ô9ÔBÅDÑIÔIÐIØ×Ò˜Ô)¨!Ô,Ô4Ô=ÔBÀDÄIÑNÔNÐNØ�Š�œŸš tÑ,Ô,Ñ-Ô-Ð-Ø�Š�œ¥b¤g¨d¡m¤mÔ&;Ñ<Ô<Ñ=Ô=Ð=Ð=Ð=r-   c                óâ   — |                       ¦   «         \  }}|                     d¦  «                             d¦  «         |                      |                     dd¦  «        t
          ¦  «         dS )z—
        The I{--path} option creates a root resource which serves a
        L{CGIScript} instance for any child with the C{".cgi"} extension.
        zfoo.cgir-   N)r,   ÚchildÚ
setContentr0   ÚgetChildr   r2   s      r+   Útest_cgiProcessorzServiceTests.test_cgiProcessor]   sc   € ð
 ×%Ò%Ñ'Ô'‰
ˆˆdØ�
Š
�9ÑÔ×(Ò(¨Ñ-Ô-Ð-Ø×Ò˜dŸmšm¨I°tÑ<Ô<½iÑHÔHÐHÐHÐHr-   c                óâ   — |                       ¦   «         \  }}|                     d¦  «                             d¦  «         |                      |                     dd¦  «        t
          ¦  «         dS )zš
        The I{--path} option creates a root resource which serves a
        L{PythonScript} instance for any child with the C{".epy"} extension.
        zfoo.epyr-   N)r,   rG   rH   r0   rI   r   r2   s      r+   Útest_epyProcessorzServiceTests.test_epyProcessorf   sc   € ð
 ×%Ò%Ñ'Ô'‰
ˆˆdØ�
Š
�9ÑÔ×(Ò(¨Ñ-Ô-Ð-Ø×Ò˜dŸmšm¨I°tÑ<Ô<½lÑKÔKÐKÐKÐKr-   c                óR  — |                       ¦   «         \  }}|                     d¦  «                             d¦  «         |                     dd¦  «        }|                      |t
          ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         dS )zº
        The I{--path} option creates a root resource which serves the
        C{resource} global defined by the Python source in any child with
        the C{".rpy"} extension.
        zfoo.rpysN   from twisted.web.static import Data
resource = Data('content', 'major/minor')
NÚcontentzmajor/minor)	r,   rG   rH   rI   r0   r   r1   ÚdataÚtype)r)   r(   r$   rG   s       r+   Útest_rpyProcessorzServiceTests.test_rpyProcessoro   s£   € ð ×%Ò%Ñ'Ô'‰
ˆˆdØ�
Š
�9ÑÔ×(Ò(ð;ñ	
ô 	
ð 	
ð —’˜i¨Ñ.Ô.ˆØ×Ò˜e¥TÑ*Ô*Ð*Ø×Ò˜œ YÑ/Ô/Ð/Ø×Ò˜œ ]Ñ3Ô3Ð3Ð3Ð3r-   c                ó  — t          t          dd¦  «        ¦  «        }t          |¦  «        }|                      |t          ¦  «         |                      |j        t          ¦  «         |                      |j        j        |¦  «         dS )z‡
        L{makePersonalServerFactory} returns a PB server factory which has
        as its root object a L{ResourcePublisher}.
        s   foo barz
text/plainN)	r   r   r   r0   r   r$   r   ÚassertIdenticalÚsite)r)   rT   ÚserverFactorys      r+   Útest_makePersonalServerFactoryz+ServiceTests.test_makePersonalServerFactory   sz   € õ •D˜ \Ñ2Ô2Ñ3Ô3ˆÝ1°$Ñ7Ô7ˆØ×Ò˜m­_Ñ=Ô=Ð=Ø×Ò˜mÔ0Õ2CÑDÔDÐDØ×Ò˜]Ô/Ô4°dÑ;Ô;Ð;Ð;Ð;r-   c                óÚ  — |                       ¦   «         }t          ¦   «         }|                     dd|z   dg¦  «         t          |¦  «        }|                     ¦   «          |                      |j        ¦  «         |                      t          j	         
                    |¦  «        ¦  «         |                      t          j        t          j        |¦  «        j        ¦  «        ¦  «         dS )z±
        The I{--personal} option to L{makeService} causes it to return a
        service which will listen on the server address given by the I{--port}
        option.
        r5   r6   ú
--personalN)r%   r   r'   r   r7   r8   r9   r=   r>   r(   r?   r@   rA   rB   )r)   rC   r*   rD   s       r+   Útest_personalServerz ServiceTests.test_personalServerŒ   sº   € ð �{Š{‰}Œ}ˆÝ‘)”)ˆØ×Ò˜h¨°$©¸ÐEÑFÔFÐFÝ˜gÑ&Ô&ˆØ×ÒÑÔÐØ�Š˜Ô+Ñ,Ô,Ð,Ø�Š�œŸš tÑ,Ô,Ñ-Ô-Ð-Ø�Š�œ¥b¤g¨d¡m¤mÔ&;Ñ<Ô<Ñ=Ô=Ð=Ð=Ð=r-   c                ó&  — t          ¦   «         }|                     dg¦  «         t          j                             t          j                             dt          j        ¦  «        ¦  «        }|                      |d         d         d|› �¦  «         dS )zÆ
        If the I{--port} option not specified but the I{--personal} option is,
        L{Options} defaults the port to C{UserDirectory.userSocketName} in the
        user's home directory.
        rX   ú~Úportsr   r6   N)	r   r'   r>   r(   Ú
expanduserÚjoinr   ÚuserSocketNamer1   )r)   r*   r(   s      r+   Útest_defaultPersonalPathz%ServiceTests.test_defaultPersonalPathŸ   sw   € õ ‘)”)ˆØ×Ò˜l˜^Ñ,Ô,Ð,ÝŒw×!Ò!¥"¤'§,¢,¨sµMÔ4PÑ"QÔ"QÑRÔRˆØ×Ò˜ Ô)¨!Ô,¨n°d¨n¨nÑ=Ô=Ð=Ð=Ð=r-   c                óÆ   — t          ¦   «         }|                     g ¦  «         |                      t          j        |d         d         d¦  «        dd…         d¦  «         dS )zl
        If the I{--port} option is not specified, L{Options} defaults the port
        to C{8080}.
        r\   r   Né   )ÚTCP)i�  N)r   r'   r1   r   Ú_parseServer©r)   r*   s     r+   Útest_defaultPortzServiceTests.test_defaultPort®   si   € õ
 ‘)”)ˆØ×Ò˜RÑ Ô Ð Ø×ÒÝÔ" 7¨7Ô#3°AÔ#6¸Ñ=Ô=¸b¸q¸bÔAÐCXñ	
ô 	
ð 	
ð 	
ð 	
r-   c                óØ   — t          ¦   «         }|                     g d¢¦  «         |                      d|d         d         ¦  «         |                      d|d         d         ¦  «         dS )zQ
        If the I{--http} option is given twice, there are two listeners
        )ú--listenztcp:8001rh   ztcp:8002Ú8001r\   r   Ú8002é   N©r   r'   ÚassertInre   s     r+   Útest_twoPortszServiceTests.test_twoPorts¹   sj   € õ ‘)”)ˆØ×ÒÐMÐMÐMÑNÔNÐNØ�Š�f˜g gÔ.¨qÔ1Ñ2Ô2Ð2Ø�Š�f˜g gÔ.¨qÔ1Ñ2Ô2Ð2Ð2Ð2r-   c                ó,  — t          ¦   «         }|                     dt          dz   g¦  «         |d         }|                      |t          ¦  «         |                      |j        t          ¦  «         |                      t          |j	        t          ¦  «        ¦  «         |                      |j        t          ¦  «         |                      |j	        j        ¦  «         t          t           t          ¦  «                             d¦  «         |                      |j	        j        ¦  «         |                      |j	        j        ¦  «         t          t           t          ¦  «                             d¦  «         |                      |j	        j        ¦  «         dS )zÁ
        The I{--wsgi} option takes the fully-qualifed Python name of a WSGI
        application object and creates a L{WSGIResource} at the root which
        serves that application.
        ú--wsgiz.applicationr$   ÚstartupÚshutdownN)r   r'   Ú__name__r=   r   rS   Ú_reactorr   Ú
isinstanceÚ_threadpoolr   Ú_applicationÚapplicationÚassertFalseÚstartedr   r   ÚfireSystemEventÚjoined)r)   r*   r$   s      r+   Ú	test_wsgizServiceTests.test_wsgiÂ   s@  € õ ‘)”)ˆØ×Ò˜h­°>Ñ(AÐBÑCÔCÐCØ�vŒˆØ�Š˜�lÑ+Ô+Ð+Ø×Ò˜Tœ]­GÑ4Ô4Ð4Ø�Š�
 4Ô#3µZÑ@Ô@ÑAÔAÐAØ×Ò˜TÔ.µÑ<Ô<Ð<ð 	×Ò˜Ô)Ô1Ñ2Ô2Ð2Ý�\�7Ñ#Ô#×3Ò3°IÑ>Ô>Ð>Ø�Š˜Ô(Ô0Ñ1Ô1Ð1Ø×Ò˜Ô)Ô0Ñ1Ô1Ð1Ý�\�7Ñ#Ô#×3Ò3°JÑ?Ô?Ð?Ø�Š˜Ô(Ô/Ñ0Ô0Ð0Ð0Ð0r-   c                óÒ   — t          ¦   «         }t          dz   dfD ]K}|                      t          |j        d|g¦  «        }|                      t          |¦  «        d|›�¦  «         ŒLdS )zn
        If I{--wsgi} is given an invalid name, L{Options.parseOptions}
        raises L{UsageError}.
        z.nosuchthingzfoo.rp   zNo such WSGI application: N)r   rs   ÚassertRaisesr   r'   r1   Ústr)r)   r*   ÚnameÚexcs       r+   Útest_invalidApplicationz$ServiceTests.test_invalidApplicationØ   s|   € õ
 ‘)”)ˆÝ Ñ.°Ð7ð 	Nð 	NˆDØ×#Ò#¥J°Ô0DÀxÐQUÐFVÑWÔWˆCØ×Ò�S ™XœXÐ'LÀDÐ'LÐ'LÑMÔMÐMÐMð	Nð 	Nr-   zOpenSSL.SSLNzSSL module is available.c                ó¨   — t          ¦   «         }|                      t          |j        dg¦  «        }|                      d|j        d         ¦  «         dS )zp
        An L{UsageError} is raised when C{https} is requested but there is no
        support for SSL.
        ú--https=443zSSL support not installedr   N)r   r   r   r'   r1   Úargs)r)   r*   Ú	exceptions      r+   Útest_HTTPSFailureOnMissingSSLz*ServiceTests.test_HTTPSFailureOnMissingSSLâ   sM   € õ ‘)”)ˆà×%Ò%¥j°'Ô2FÈÈÑXÔXˆ	à×ÒÐ4°i´nÀQÔ6GÑHÔHÐHÐHÐHr-   zSSL module is not available.c                óÖ   — t          ¦   «         }|                     dg¦  «         |                      d|d         d         ¦  «         |                      d|d         d         ¦  «         dS )zM
        When SSL support is present, it accepts the --https option.
        r…   Ússlr\   r   Ú443Nrl   re   s     r+   Ú test_HTTPSAcceptedOnAvailableSSLz-ServiceTests.test_HTTPSAcceptedOnAvailableSSLî   se   € õ
 ‘)”)ˆà×Ò˜m˜_Ñ-Ô-Ð-à�Š�e˜W WÔ-¨aÔ0Ñ1Ô1Ð1Ø�Š�e˜W WÔ-¨aÔ0Ñ1Ô1Ð1Ð1Ð1r-   c                óŒ   — t          ¦   «         }|                     g d¢¦  «         |                      |d         ddg¦  «         dS )zE
        When --add-header is specific, the value is parsed.
        ©ú--add-headerzK1: V1r�   zK2: V2ÚextraHeaders©ÚK1ÚV1©ÚK2ÚV2N)r   r'   r1   re   s     r+   Útest_add_header_parsingz$ServiceTests.test_add_header_parsingú   sN   € õ ‘)”)ˆØ×ÒÐQÐQÐQÑRÔRÐRØ×Ò˜ Ô0°<ÀÐ2NÑOÔOÐOÐOÐOr-   c                óV  — t          ¦   «         }|                     g d¢¦  «         t          |¦  «        }|j        d         j        j        }|                      |t          ¦  «         |                      |j	        ddg¦  «         |                      |j
        t          j        ¦  «         dS )zj
        When --add-header is specified, the resource is a composition that adds
        headers.
        rŽ   r   r‘   r”   N)r   r'   r   r:   r;   r<   r0   r   r1   Ú_headersÚ_originalResourcer   ÚTest)r)   r*   rD   r<   s       r+   Útest_add_header_resourcez%ServiceTests.test_add_header_resource  sž   € õ
 ‘)”)ˆØ×ÒÐQÐQÐQÑRÔRÐRÝ˜gÑ&Ô&ˆØÔ# AÔ&Ô.Ô7ˆØ×Ò˜hÕ(;Ñ<Ô<Ð<Ø×Ò˜Ô*¨\¸<Ð,HÑIÔIÐIØ×Ò˜hÔ8½$¼)ÑDÔDÐDÐDÐDr-   c                óz  — t          ¦   «         }|                     dg¦  «         t          |¦  «         |                      | j        g¦  «        }|                      |d         d         t          ¦  «         |                      |d         d         d¦  «         |                      t          |¦  «        d¦  «         dS )z7
        Passing --notracebacks is deprecated.
        z--notracebacksr   ÚcategoryÚmessagez/--notracebacks was deprecated in Twisted 19.7.0rk   N)r   r'   r   ÚflushWarningsÚtest_noTracebacksDeprecationr1   ÚDeprecationWarningÚlen)r)   r*   Úwarningss      r+   r¡   z)ServiceTests.test_noTracebacksDeprecation  s·   € õ ‘)”)ˆØ×ÒÐ.Ð/Ñ0Ô0Ð0Ý�GÑÔÐà×%Ò% tÔ'HÐ&IÑJÔJˆØ×Ò˜ !œ ZÔ0Õ2DÑEÔEÐEØ×ÒØ�QŒK˜	Ô"Ð$Uñ	
ô 	
ð 	
ð 	×Ò�˜X™œ¨Ñ*Ô*Ð*Ð*Ð*r-   c                óÀ   — t          ¦   «         }|                     dg¦  «         t          |¦  «        }|                      |j        d         j        j        ¦  «         dS )zm
        Passing --display-tracebacks will enable traceback rendering on the
        generated Site.
        z--display-tracebacksr   N)r   r'   r   r=   r:   r;   ÚdisplayTracebacks©r)   r*   rD   s      r+   Útest_displayTracebacksz#ServiceTests.test_displayTracebacks  sX   € õ
 ‘)”)ˆØ×ÒÐ4Ð5Ñ6Ô6Ð6Ý˜gÑ&Ô&ˆØ�Š˜Ô(¨Ô+Ô3ÔEÑFÔFÐFÐFÐFr-   c                ó¾   — t          ¦   «         }|                     g ¦  «         t          |¦  «        }|                      |j        d         j        j        ¦  «         dS )zt
        Not passing --display-tracebacks will leave traceback rendering on the
        generated Site off.
        r   N)r   r'   r   ry   r:   r;   r¦   r§   s      r+   Útest_displayTracebacksNotGivenz+ServiceTests.test_displayTracebacksNotGiven(  sV   € õ
 ‘)”)ˆØ×Ò˜RÑ Ô Ð Ý˜gÑ&Ô&ˆØ×Ò˜Ô)¨!Ô,Ô4ÔFÑGÔGÐGÐGÐGr-   )r    r!   ©r    r.   )rs   Ú
__module__Ú__qualname__Ú__doc__r,   r3   r   r	   Ú
providedByr   rE   rJ   rL   rQ   rV   rY   r`   rf   rn   r}   rƒ   r   rˆ   rŒ   r—   rœ   r¡   r¨   rª   © r-   r+   r   r   (   s·  € € € € € ðð ðð ð ð ð"/ð /ð /ð /ð €VØ#ˆLÔ# GÑ,Ô,Ð,Ø:ñô ð>ð >ð >ñ	ô ð>ð$Ið Ið Ið IðLð Lð Lð Lð4ð 4ð 4ð 4ð <ð <ð <ð <ð €VØ#ˆLÔ# GÑ,Ô,Ð,Ø:ñô ð>ð >ð >ñ	ô ð>ð €VØ#ˆLÔ# GÑ,Ô,Ð,Ø:ñô ð	>ð 	>ð 	>ñ	ô ð	>ð	
ð 	
ð 	
ð 	
ð3ð 3ð 3ð 3ð1ð 1ð 1ð 1ð,Nð Nð Nð Nð €VˆMˆM˜-Ñ(Ô(°Ð4Ð6PÑQÔQð	Ið 	Ið 	Iñ RÔQð	Ið €VˆMˆM˜-Ñ(Ô(¨DÐ0Ð2PÑQÔQð	2ð 	2ð 	2ñ RÔQð	2ðPð Pð Pð PðEð Eð Eð Eð+ð +ð +ð +ðGð Gð Gð GðHð Hð Hð Hð Hð Hr-   r   c                  ó   — e Zd Zdd„ZdS )ÚAddHeadersResourceTestsr    r.   c                óT  — t          t          j        ¦   «         g d¢¦  «        }t          g ¦  «        }|                     d|¦  «         |                      |j                             d¦  «        ddg¦  «         |                      |j                             d¦  «        dg¦  «         dS )	zc
        When getChildWithDefault is invoked, it adds the headers to the
        response.
        )r‘   r”   )r’   ÚV3Ú r’   r“   r´   r•   r–   N)r   r   r›   r   ÚgetChildWithDefaultr1   ÚresponseHeadersÚgetRawHeaders)r)   r<   Úrequests      r+   Útest_getChildWithDefaultz0AddHeadersResourceTests.test_getChildWithDefault4  s¤   € õ
 'ÝŒI‰KŒKÐCÐCÐCñ
ô 
ˆõ ˜rÑ"Ô"ˆØ×$Ò$ R¨Ñ1Ô1Ð1Ø×Ò˜Ô0×>Ò>¸tÑDÔDÀtÈTÀlÑSÔSÐSØ×Ò˜Ô0×>Ò>¸tÑDÔDÀtÀfÑMÔMÐMÐMÐMr-   Nr«   )rs   r¬   r­   rº   r°   r-   r+   r²   r²   3  s.   € € € € € ðNð Nð Nð Nð Nð Nr-   r²   )6r®   Ú
__future__r   r>   r@   Útypingr   Úunittestr   Útwisted.internetr   r   Útwisted.internet.interfacesr   r	   Útwisted.python.filepathr
   Útwisted.python.reflectr   Útwisted.python.threadpoolr   Útwisted.python.usager   Útwisted.spread.pbr   Útwisted.trial.unittestr   Útwisted.webr   Útwisted.web.distribr   r   Útwisted.web.scriptr   Útwisted.web.serverr   Útwisted.web.staticr   r   Útwisted.web.tapr   r   r   r   Útwisted.web.test.requesthelperr   Útwisted.web.twcgir   Útwisted.web.wsgir   Úobjectrx   r   r²   r°   r-   r+   ú<module>rÐ      sS  ððð ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø +Ð +Ð +Ð +Ð +Ð +Ø -Ð -Ð -Ð -Ð -Ð -Ø +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø +Ð +Ð +Ð +Ð +Ð +Ø #Ð #Ð #Ð #Ð #Ð #Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø )Ð )Ð )Ð )Ð )Ð )àˆf‰hŒh€ðHHð HHð HHð HHð HH�8ñ HHô HHð HHðVNð Nð Nð Nð N˜hñ Nô Nð Nð Nð Nr-   