§
    „ßjŒ8  ã                  ó^  — d Z ddlmZ ddl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 ej        rddlmZ ddlmZ ddlmZ  G d„ de¦  «        Z G d„ de¦  «        Zefd%d„Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d ¦  «        Z G d!„ d"¦  «        Z G d#„ d$¦  «        ZdS )&a‹  
WSGI Protocol Linter
====================

This module provides a middleware that performs sanity checks on the
behavior of the WSGI server and application. It checks that the
:pep:`3333` WSGI spec is properly implemented. It also warns on some
common HTTP errors such as non-empty responses for 304 status codes.

.. autoclass:: LintMiddleware

:copyright: 2007 Pallets
:license: BSD-3-Clause
é    )ÚannotationsN)ÚTracebackType)Úurlparse)Úwarné   )ÚHeaders)Úis_entity_header)ÚFileWrapper)ÚStartResponse)ÚWSGIApplication)ÚWSGIEnvironmentc                  ó   — e Zd ZdZdS )ÚWSGIWarningz Warning class for WSGI warnings.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úK/var/www/html/venv/lib/python3.11/site-packages/werkzeug/middleware/lint.pyr   r   !   ó   € € € € € Ø*Ð*Ð*Ð*r   r   c                  ó   — e Zd ZdZdS )ÚHTTPWarningz Warning class for HTTP warnings.Nr   r   r   r   r   r   %   r   r   r   ÚcontextÚstrÚobjÚobjectÚneedÚtypeÚreturnÚNonec           	     óš   — t          |¦  «        |ur9t          | ›d|j        ›dt          |¦  «        j        ›d�t          d¬¦  «         d S d S )Nz
 requires z, got ú.é   ©Ú
stacklevel)r    r   r   r   )r   r   r   s      r   Ú
check_typer(   )   si   € ÝˆC�y„y˜ÐÐÝØÐRÐR D¤MÐRÐR½4À¹9¼9Ô;MÐRÐRÐRÝØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð Ðr   c                  ó6   — e Zd Zdd„Zdd	„Zdd
„Zdd„Zdd„ZdS )ÚInputStreamÚstreamút.IO[bytes]r!   r"   c                ó   — || _         d S ©N©Ú_stream©Úselfr+   s     r   Ú__init__zInputStream.__init__3   ó   € ØˆŒˆˆr   Úargsút.AnyÚbytesc                óÊ   — t          |¦  «        dk    rt          dt          d¬¦  «         n*t          |¦  «        dk    rt          dt          d¬¦  «          | j        j        |Ž S )Nr   zŸWSGI does not guarantee an EOF marker on the input stream, thus making calls to 'wsgi.input.read()' unsafe. Conforming servers may never return from this call.r   r&   é   z2Too many parameters passed to 'wsgi.input.read()'.)Úlenr   r   r0   Úread©r2   r5   s     r   r;   zInputStream.read6   s   € Ýˆt‰9Œ9˜Š>ˆ>Ýð*õ Øðñ ô ð ð õ �‰YŒY˜!Š^ˆ^ÝØDÝØðñ ô ð ð
 !ˆtŒ|Ô  $Ð'Ð'r   c                óê   — t          |¦  «        dk    rt          dt          d¬¦  «         n:t          |¦  «        dk    rt          dt          d¬¦  «         nt          d¦  «        ‚ | j        j        |Ž S )Nr   z_Calls to 'wsgi.input.readline()' without arguments are unsafe. Use 'wsgi.input.read()' instead.r   r&   r9   z~'wsgi.input.readline()' was called with a size hint. WSGI does not support this, although it's available on all major servers.z5Too many arguments passed to 'wsgi.input.readline()'.)r:   r   r   Ú	TypeErrorr0   Úreadliner<   s     r   r?   zInputStream.readlineG   s”   € Ýˆt‰9Œ9˜Š>ˆ>Ýð0åØð	ñ ô ð ð õ �‰YŒY˜!Š^ˆ^ÝðOåØð	ñ ô ð ð õ ÐSÑTÔTÐTØ$ˆtŒ|Ô$ dÐ+Ð+r   út.Iterator[bytes]c                ó˜   — 	 t          | j        ¦  «        S # t          $ r) t          dt          d¬¦  «         t          d¦  «        cY S w xY w)Nz'wsgi.input' is not iterable.r   r&   r   )Úiterr0   r>   r   r   ©r2   s    r   Ú__iter__zInputStream.__iter__Z   sW   € ð	Ý˜œÑ%Ô%Ð%øÝð 	ð 	ð 	ÝÐ0µ+È!ÐLÑLÔLÐLÝ˜‘8”8ˆOˆOˆOð	øøøs   ‚ –0A	ÁA	c                óf   — t          dt          d¬¦  «         | j                             ¦   «          d S )Nz(The application closed the input stream!r   r&   ©r   r   r0   ÚcloserC   s    r   rG   zInputStream.closea   ó3   € ÝÐ7½ÐQRÐSÑSÔSÐSØŒ×ÒÑÔÐÐÐr   N)r+   r,   r!   r"   )r5   r6   r!   r7   )r!   r@   ©r!   r"   )r   r   r   r3   r;   r?   rD   rG   r   r   r   r*   r*   2   sx   € € € € € ðð ð ð ð(ð (ð (ð (ð",ð ,ð ,ð ,ð&ð ð ð ðð ð ð ð ð r   r*   c                  ó6   — e Zd Zdd„Zdd„Zdd	„Zdd„Zdd„ZdS )ÚErrorStreamr+   ú	t.IO[str]r!   r"   c                ó   — || _         d S r.   r/   r1   s     r   r3   zErrorStream.__init__g   r4   r   Úsr   c                óf   — t          d|t          ¦  «         | j                             |¦  «         d S )Nzwsgi.error.write())r(   r   r0   Úwrite©r2   rN   s     r   rP   zErrorStream.writej   s1   € ÝÐ'¨­CÑ0Ô0Ð0ØŒ×Ò˜1ÑÔÐÐÐr   c                ó8   — | j                              ¦   «          d S r.   )r0   ÚflushrC   s    r   rS   zErrorStream.flushn   s   € ØŒ×ÒÑÔÐÐÐr   Úseqút.Iterable[str]c                ó:   — |D ]}|                       |¦  «         Œd S r.   )rP   )r2   rT   Úlines      r   Ú
writelineszErrorStream.writelinesq   s0   € Øð 	ð 	ˆDØ�JŠJ�tÑÔÐÐð	ð 	r   c                óf   — t          dt          d¬¦  «         | j                             ¦   «          d S )Nz(The application closed the error stream!r   r&   rF   rC   s    r   rG   zErrorStream.closeu   rH   r   N)r+   rL   r!   r"   )rN   r   r!   r"   rI   )rT   rU   r!   r"   )r   r   r   r3   rP   rS   rX   rG   r   r   r   rK   rK   f   sx   € € € € € ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð r   rK   c                  ó   — e Zd Zdd„Zdd
„ZdS )ÚGuardedWriterP   út.Callable[[bytes], object]Úchunksú	list[int]r!   r"   c                ó"   — || _         || _        d S r.   )Ú_writeÚ_chunks)r2   rP   r]   s      r   r3   zGuardedWrite.__init__{   s   € ØˆŒØˆŒˆˆr   rN   r7   c                óª   — t          d|t          ¦  «         |                      |¦  «         | j                             t          |¦  «        ¦  «         d S )Nzwrite())r(   r7   r`   ra   Úappendr:   rQ   s     r   Ú__call__zGuardedWrite.__call__   sE   € Ý�9˜a¥Ñ'Ô'Ð'Ø�Š�A‰ŒˆØŒ×Ò�C ™FœFÑ#Ô#Ð#Ð#Ð#r   N)rP   r\   r]   r^   r!   r"   )rN   r7   r!   r"   )r   r   r   r3   rd   r   r   r   r[   r[   z   s<   € € € € € ðð ð ð ð$ð $ð $ð $ð $ð $r   r[   c                  ó6   — e Zd Zdd	„Zdd
„Zdd„Zdd„Zdd„ZdS )ÚGuardedIteratorÚiteratorút.Iterable[bytes]Úheaders_setútuple[int, Headers]r]   r^   r!   r"   c                óp   — || _         t          |¦  «        j        | _        d| _        || _        || _        d S )NF)Ú	_iteratorrB   Ú__next__Ú_nextÚclosedri   r]   )r2   rg   ri   r]   s       r   r3   zGuardedIterator.__init__†   s5   € ð "ˆŒÝ˜(‘^”^Ô,ˆŒ
ØˆŒØ&ˆÔØˆŒˆˆr   c                ó   — | S r.   r   rC   s    r   rD   zGuardedIterator.__iter__’   s   € Øˆr   r7   c                ó   — | j         rt          dt          d¬¦  «         |                      ¦   «         }| j        st          dt          d¬¦  «         t          d|t          ¦  «         | j                             t          |¦  «        ¦  «         |S )Nz Iterated over closed 'app_iter'.r   r&   z8The application returned before it started the response.zapplication iterator items)
ro   r   r   rn   ri   r(   r7   r]   rc   r:   )r2   Úrvs     r   rm   zGuardedIterator.__next__•   s‘   € ØŒ;ð 	PÝÐ3µ[ÈQÐOÑOÔOÐOà�ZŠZ‰\Œ\ˆàÔð 	ÝØJÝØðñ ô ð õ 	Ð/°µUÑ;Ô;Ð;ØŒ×Ò�3˜r™7œ7Ñ#Ô#Ð#Øˆ	r   c                óÂ  — d| _         t          | j        d¦  «        r| j                             ¦   «          | j        �r| j        \  }}t          | j        ¦  «        }|                     dt          ¬¦  «        }|dk    rg|D ]G\  }}| 	                    ¦   «         }|dvr*t          |¦  «        rt          d|›d�t          d	¬
¦  «         ŒH|rt          dt          d	¬
¦  «         d S d S d|cxk    rdk     sn |dk    r@|dk    rt          |› d�t          d	¬
¦  «         |rt          |› d�t          d	¬
¦  «         d S d S |�!||k    rt          dt          d	¬
¦  «         d S d S d S d S )NTrG   zcontent-length)r    i0  )Úexpireszcontent-locationzEntity header z found in 304 response.r   r&   z#304 responses must not have a body.éd   éÈ   éÌ   r   z- responses must have an empty content length.z  responses must not have a body.zGContent-Length and the number of bytes sent to the client do not match.)ro   Úhasattrrl   rG   ri   Úsumr]   ÚgetÚintÚlowerr	   r   r   r   )r2   Ústatus_codeÚheadersÚ
bytes_sentÚcontent_lengthÚkeyÚ_values          r   rG   zGuardedIterator.close¦   s$  € ØˆŒå�4”> 7Ñ+Ô+ð 	#ØŒN× Ò Ñ"Ô"Ð"àÔñ )	Ø#'Ô#3Ñ ˆK˜Ý˜Tœ[Ñ)Ô)ˆJØ$Ÿ[š[Ð)9Å˜[ÑDÔDˆNà˜cÒ!Ð!Ø#*ð 	ð 	‘K�C˜ØŸ)š)™+œ+�CØÐ"AÐAÐAÕFVØñGô GÐAõ ØK¨SÐKÐKÐKÝ'Ø'(ðñ ô ð øð
 ð ÝØ=Ý#Ø#$ðñ ô ð ð ð ðð ð ˜Ð)Ð)Ò)Ð) cÒ)Ð)Ð)Ð)¨[¸CÒ-?Ð-?Ø! QÒ&Ð&ÝØ&ÐUÐUÐUÝ#Ø#$ðñ ô ð ð
 ð ÝØ&ÐHÐHÐHÝ#Ø#$ðñ ô ð ð ð ðð ð  Ð+°À*Ò0LÐ0LÝð,åØ ð	ñ ô ð ð ð ðI)	ð )	ðF ,Ð+Ð0LÐ0Lr   c                ój   — | j         s+	 t          dt          d¬¦  «         d S # t          $ r Y d S w xY wd S )Nz4Iterator was garbage collected before it was closed.r   r&   )ro   r   r   Ú	ExceptionrC   s    r   Ú__del__zGuardedIterator.__del__×   si   € ØŒ{ð 	ðÝØJÝØ ðñ ô ð ð ð øõ
 ð ð ð Ø��ðøøøð	ð 	s   ‰" ¢
0¯0N)rg   rh   ri   rj   r]   r^   r!   r"   )r!   rf   )r!   r7   rI   )r   r   r   r3   rD   rm   rG   r…   r   r   r   rf   rf   …   sy   € € € € € ð
ð 
ð 
ð 
ðð ð ð ðð ð ð ð"/ð /ð /ð /ðb	ð 	ð 	ð 	ð 	ð 	r   rf   c                  óB   — e Zd ZdZdd„Zdd	„Zdd„Zdd„Zd d„Zd!d„Z	dS )"ÚLintMiddlewareaœ  Warns about common errors in the WSGI and HTTP behavior of the
    server and wrapped application. Some of the issues it checks are:

    -   invalid status codes
    -   non-bytes sent to the WSGI server
    -   strings returned from the WSGI application
    -   non-empty conditional responses
    -   unquoted etags
    -   relative URLs in the Location header
    -   unsafe calls to wsgi.input
    -   unclosed iterators

    Error information is emitted using the :mod:`warnings` module.

    :param app: The WSGI application to wrap.

    .. code-block:: python

        from werkzeug.middleware.lint import LintMiddleware
        app = LintMiddleware(app)
    Úappr   r!   r"   c                ó   — || _         d S r.   )rˆ   )r2   rˆ   s     r   r3   zLintMiddleware.__init__ú   s   € ØˆŒˆˆr   Úenvironr   c                óî  — t          |¦  «        t          urt          dt          d¬¦  «         dD ]!}||vrt          d|›d�t          d¬¦  «         Œ"|d         d	k    rt          d
t          d¬¦  «         |                     dd¦  «        }|                     dd¦  «        }|r&|d         dk    rt          d|›�t          d¬¦  «         |r(|d         dk    rt          d|›�t          d¬¦  «         d S d S d S )Nz/WSGI environment is not a standard Python dict.é   r&   )	ÚREQUEST_METHODÚSERVER_NAMEÚSERVER_PORTúwsgi.versionú
wsgi.inputúwsgi.errorszwsgi.multithreadzwsgi.multiprocesszwsgi.run_oncezRequired environment key z
 not foundr%   r�   )r9   r   z"Environ is not a WSGI 1.0 environ.ÚSCRIPT_NAMEÚ Ú	PATH_INFOr   ú/z+'SCRIPT_NAME' does not start with a slash: z)'PATH_INFO' does not start with a slash: )r    Údictr   r   rz   )r2   rŠ   r�   Úscript_nameÚ	path_infos        r   Úcheck_environzLintMiddleware.check_environý   sc  € Ý�‰=Œ=¥Ð$Ð$ÝØAÝØðñ ô ð ð


ð 	ð 	ˆCð ˜'Ð!Ð!ÝØA°ÐAÐAÐAÝØ ðñ ô ð øð
 �>Ô" fÒ,Ð,ÝÐ5µ{ÈqÐQÑQÔQÐQà—k’k -°Ñ4Ô4ˆØ—K’K ¨RÑ0Ô0ˆ	àð 	˜; qœ>¨SÒ0Ð0ÝØM¸kÐMÐMÝØðñ ô ð ð ð 	˜ 1œ¨Ò,Ð,ÝØI¸IÐIÐIÝØðñ ô ð ð ð ð	ð 	Ð,Ð,r   Ústatusr   r~   úlist[tuple[str, str]]Úexc_infoú?None | tuple[type[BaseException], BaseException, TracebackType]rj   c                ó,  — t          d|t          ¦  «         |                     d d¦  «        d         }t          |¦  «        dk    s|                     ¦   «         st          dt          d¬¦  «         t          |¦  «        dk     s|d         dk    rt          d	|›d
�t          d¬¦  «         t          |¦  «        }|dk     rt          dt          d¬¦  «         t          |¦  «        t          urt          dt          d¬¦  «         |D ]¹}t          |¦  «        t          ust          |¦  «        dk    rt          dt          d¬¦  «         |\  }}t          |¦  «        t          ust          |¦  «        t          urt          dt          d¬¦  «         |                     ¦   «         dk    rt          dt          d¬¦  «         Œº|�,t          |t          ¦  «        st          dt          d¬¦  «         t          |¦  «        }	|                      |	¦  «         ||	fS )Nr›   r9   r   r%   z!Status code must be three digits.r&   rŒ   ú zInvalid value for status zJ. Valid status strings are three digits, a space and a status explanation.ru   zStatus code < 100 detected.zHeader list is not a list.r   z#Header items must be 2-item tuples.z'Header keys and values must be strings.zFThe status header is not supported due to conflicts with the CGI spec.zInvalid value for exc_info.)r(   r   Úsplitr:   Ú	isdecimalr   r   r{   r    ÚlistÚtupler|   Ú
isinstancer   Úcheck_headers)
r2   r›   r~   r�   Ústatus_code_strr}   ÚitemÚnameÚvalueÚheaders_objs
             r   Úcheck_start_responsez#LintMiddleware.check_start_response)  s.  € õ 	�8˜V¥SÑ)Ô)Ð)Ø Ÿ,š, t¨QÑ/Ô/°Ô2ˆåˆÑÔ 1Ò$Ð$¨O×,EÒ,EÑ,GÔ,GÐ$ÝÐ4µkÈaÐPÑPÔPÐPåˆv‰;Œ;˜Š?ˆ?˜f Qœi¨3Ò.Ð.Ýð=¨Fð =ð =ð =åØð	ñ ô ð õ ˜/Ñ*Ô*ˆà˜ÒÐÝÐ.µÈÐJÑJÔJÐJå�‰=Œ=¥Ð$Ð$ÝÐ-­{ÀqÐIÑIÔIÐIàð 	ð 	ˆDÝ�D‰zŒz¥Ð&Ð&­#¨d©)¬)°qª.¨.ÝÐ:½KÐTUÐVÑVÔVÐVØ‰KˆD�%Ý�D‰zŒz¥Ð$Ð$­¨U©¬½3Ð(>Ð(>ÝØ=½{ÐWXðñ ô ð ð �zŠz‰|Œ|˜xÒ'Ð'Ýð4åØ ð	ñ ô ð øð Ð­
°8½UÑ(CÔ(CÐÝÐ.µÈÐJÑJÔJÐJå˜gÑ&Ô&ˆØ×Ò˜;Ñ'Ô'Ð'à˜KÐ'Ð'r   r   c                óÂ  — |                      d¦  «        }|��|                     d¦  «        r6|                     d¦  «        rt          dt          d¬¦  «         |dd …         }|d d…         |d	d …         cxk    rd
k    sn t          dt          d¬¦  «         |                      d¦  «        }|�-t	          |¦  «        j        st          dt          d¬¦  «         d S d S d S )NÚetag)zW/úw/r¯   z)Weak etag indicator should be upper case.rŒ   r&   r   r9   éÿÿÿÿú"zUnquoted etag emitted.Úlocationz+Absolute URLs required for location header.)rz   Ú
startswithr   r   r   Únetloc)r2   r~   r®   r²   s       r   r¦   zLintMiddleware.check_headers]  s  € Ø�{Š{˜6Ñ"Ô"ˆàÐØ�Š˜|Ñ,Ô,ð  Ø—?’? 4Ñ(Ô(ð ÝØCÝ#Ø#$ðñ ô ð ð ˜A˜B˜B”x�à˜˜!˜”H  R S S¤	Ð0Ð0Ò0Ð0¨SÒ0Ð0Ð0Ð0ÝÐ-­{ÀqÐIÑIÔIÐIà—;’;˜zÑ*Ô*ˆàÐÝ˜HÑ%Ô%Ô,ð ÝØAÝØ ðñ ô ð ð ð ð  Ððð r   Úapp_iterrh   c                ób   — t          |t          ¦  «        rt          dt          d¬¦  «         d S d S )Nz The application returned a string. The response will send one character at a time to the client, which will kill performance. Return a list or iterable instead.r%   r&   )r¥   r   r   r   )r2   rµ   s     r   Úcheck_iteratorzLintMiddleware.check_iteratorx  sL   € Ý�h¥Ñ$Ô$ð 	Ýð6õ Øðñ ô ð ð ð ð	ð 	r   r5   r6   Úkwargsc                óZ  ‡ ‡‡‡— t          |¦  «        dk    rt          dt          d¬¦  «         |rt          dt          d¬¦  «         |d         }|d         Š‰                      |¦  «         t	          |d         ¦  «        |d<   t          |d         ¦  «        |d<   t          |d	<   g Šg Šdˆˆˆ ˆfd„}‰                      |t          j	        d|¦  «        ¦  «        }‰  
                    |¦  «         t          |t          j	        t          t          t          f         ‰¦  «        ‰¦  «        S )Nr   zA WSGI app takes two arguments.r&   z+A WSGI app does not take keyword arguments.r   r9   r‘   r’   zwsgi.file_wrapperr5   r6   r¸   r!   út.Callable[[bytes], None]c                 óp  •— t          | ¦  «        dvr(t          dt          | ¦  «        › d�t          d¬¦  «         |rt          dt          d¬¦  «         | d         }| d         }t          | ¦  «        d	k    r| d         nd }‰                     |||¦  «        ‰d d …<   t	           ‰|||¦  «        ‰¦  «        S )
N>   r   r%   zInvalid number of arguments: z, expected 2 or 3.r   r&   z1'start_response' does not take keyword arguments.r   r9   r%   )r:   r   r   r¬   r[   )	r5   r¸   r›   r~   r�   r]   ri   r2   Ústart_responses	        €€€€r   Úchecking_start_responsez8LintMiddleware.__call__.<locals>.checking_start_response™  sä   ø€ õ �4‰yŒy Ð&Ð&ÝØQµC¸±I´IÐQÐQÐQÝØ ðñ ô ð ð ð ÝØGÝØ ðñ ô ð ð ˜qœ'ˆFØ-1°!¬WˆGõ ˜t™9œ9¨š>˜>��Q”�¨tð ð "×6Ò6°v¸wÈÑQÔQˆK˜˜˜‰NÝ  ¨v°wÀÑ IÔ IÈ6ÑRÔRÐRr   r   )r5   r6   r¸   r6   r!   rº   )r:   r   r   rš   r*   rK   r
   rˆ   ÚtÚcastr·   rf   r¤   r{   r   )	r2   r5   r¸   rŠ   r½   rµ   r]   ri   r¼   s	   `     @@@r   rd   zLintMiddleware.__call__‚  sY  øøøø€ Ýˆt‰9Œ9˜Š>ˆ>ÝÐ2µKÈAÐNÑNÔNÐNàð 	ÝØ=½{ÐWXðñ ô ð ð $(¨¤7ˆØ(,¨Q¬ˆà×Ò˜7Ñ#Ô#Ð#Ý +¨G°LÔ,AÑ BÔ Bˆ�ÑÝ!,¨W°]Ô-CÑ!DÔ!Dˆ�Ñõ (3ˆÐ#Ñ$à#%ˆØˆð	Sð 	Sð 	Sð 	Sð 	Sð 	Sð 	Sð 	Sð 	Sð4 —8’8˜G¥Q¤V¨OÐ=TÑ%UÔ%UÑVÔVˆØ×Ò˜HÑ%Ô%Ð%ÝØ•a”f�U¥3­ <Ô0°+Ñ>Ô>Àñ
ô 
ð 	
r   N)rˆ   r   r!   r"   )rŠ   r   r!   r"   )r›   r   r~   rœ   r�   rž   r!   rj   )r~   r   r!   r"   )rµ   rh   r!   r"   )r5   r6   r¸   r6   r!   rh   )
r   r   r   r   r3   rš   r¬   r¦   r·   rd   r   r   r   r‡   r‡   ã   s˜   € € € € € ðð ð,ð ð ð ð*ð *ð *ð *ðX2(ð 2(ð 2(ð 2(ðhð ð ð ð6ð ð ð ð5
ð 5
ð 5
ð 5
ð 5
ð 5
r   r‡   )r   r   r   r   r   r    r!   r"   ) r   Ú
__future__r   Útypingr¾   Útypesr   Úurllib.parser   Úwarningsr   Údatastructuresr   Úhttpr	   Úwsgir
   ÚTYPE_CHECKINGÚ_typeshed.wsgir   r   r   ÚWarningr   r   r   r(   r*   rK   r[   rf   r‡   r   r   r   ú<module>rË      s3  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à $Ð $Ð $Ð $Ð $Ð $Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð à„?ð /Ø,Ð,Ð,Ð,Ð,Ð,Ø.Ð.Ð.Ð.Ð.Ð.Ø.Ð.Ð.Ð.Ð.Ð.ð+ð +ð +ð +ð +�'ñ +ô +ð +ð+ð +ð +ð +ð +�'ñ +ô +ð +ð 8;ð 
ð 
ð 
ð 
ð 
ð1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ðhð ð ð ð ñ ô ð ð($ð $ð $ð $ð $ñ $ô $ð $ð[ð [ð [ð [ð [ñ [ô [ð [ð|T
ð T
ð T
ð T
ð T
ñ T
ô T
ð T
ð T
ð T
r   