Ë
    �\;jgI  ã                   óæ  — d dl 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
mZmZmZmZmZ g Zej"                  j$                  j&                  dej"                  j$                  j(                  d	ej"                  j$                  j*                  d
ej"                  j$                  j,                  dej"                  j$                  j.                  dej"                  j$                  j0                  dej"                  j$                  j2                  dej"                  j$                  j4                  dej"                  j$                  j6                  dej"                  j$                  j8                  dej"                  j$                  j:                  dej"                  j$                  j<                  diZej"                  j$                  j&                  ej"                  j$                  j(                  ej"                  j$                  j*                  ej"                  j$                  j,                  ej"                  j$                  j.                  ej"                  j$                  j0                  ej"                  j$                  j2                  ej"                  j$                  j4                  ej"                  j$                  j6                  ej"                  j$                  j8                  ej"                  j$                  j:                  ej"                  j$                  j<                  dœZ ejB                  j&                  dejB                  jD                  d	ejB                  jF                  d
ejB                  jH                  dejB                  jJ                  dejB                  j0                  dejB                  j2                  dejB                  j4                  dejB                  j6                  dejB                  j8                  dejB                  j:                  dejB                  j<                  diZ&d#d„Z'd„ Z(d„ Z)	 d$d„Z*d$d„Z+	 d$d„Z,e-e.e
fe/e
fdfd„Z0 G d„ d«      Z1 G d„ d «      Z2 G d!„ d"«      Z3y)%é    Né   )ÚValue)ÚParameterMetaé   )Úcore)ÚVariableÚ_cpu_numÚ	_cuda_idsÚdefault_main_programÚin_dygraph_modeÚin_pir_modeÚboolÚfloat16Úuint16Úfloat32Úfloat64Úint8Úint16Úint32Úint64Úuint8Ú	complex64Ú
complex128©r   r   r   r   r   r   r   r   r   r   r   r   c                 ó„  — | j                   dk(  r| j                  t        j                  «      S |dk(  rt        j                  | g d¢«      }  t        j
                  d„ t        j                  g¬«      | j                  «      }t        j                  || j                  «      }|dk(  rt        j                  |g d¢«      }|S )Nr   ÚNHWC)r   é   r   r   c                 ób   — t        j                  dt        j                  d| «      «      d   dz	  S )Nú<Iú<fr   é   ©ÚstructÚunpackÚpack©Úxs    ú`G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/base/data_feeder.pyÚ<lambda>z)convert_float_to_uint16.<locals>.<lambda>W   s$   € ”&—-‘- ¤f§k¡k°$¸Ó&:Ó;¸AÑ>À"ÒDó    ©Úotypes)r   r   r   r   )	ÚsizeÚviewÚnpr   Ú	transposeÚ	vectorizeÚflatÚreshapeÚshape)ÚdataÚdata_formatÚnew_datas      r(   Úconvert_float_to_uint16r8   O   s—   € Ø‡y�y�A‚~Ø�y‰yœŸ™Ó#Ð#à�fÒÜ�|‰|˜D¢,Ó/ˆðŒr�|‰|ÙDÜ—	‘	ˆ{ôð ‡i�ió€Hô �z‰z˜( D§J¡JÓ/€Hà�fÒÜ—<‘< ª,Ó7ˆØ€Or*   c                 ó°   —  t        j                  d„ t         j                  g¬«      | j                  «      }t        j                  || j
                  «      S )Nc                 ób   — t        j                  dt        j                  d| dz  «      «      d   S )Nr    r   r!   r   r"   r&   s    r(   r)   z)convert_uint16_to_float.<locals>.<lambda>c   s#   € ”&—-‘- ¤f§k¡k°$¸¸R¹Ó&@ÓAÀ!ÒDr*   r+   )r/   r1   r   r2   r3   r4   )r5   r7   s     r(   Úconvert_uint16_to_floatr;   a   sE   € ðŒr�|‰|ÙDÜ—
‘
ˆ|ôð ‡i�ió€Hô �:‰:�h §
¡
Ó+Ð+r*   c                 óš  — t        | t        j                  j                  «      r| t        v r	t        |    S t        | t        j
                  «      r| t        v rçt        |    S t        | t        «      rº| t        t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  fv r | j*                  S | dv rt-        | «      S | dv ryt/        d| z  «      ‚)Nr   )Úbfloat16r   z’dtype must be any of [bool, float16, uint16, float32, float64, int8, int16, int32, int64, uint8, complex64, complex128, bfloat16], but received %s)Ú
isinstancer   ÚVarDescÚVarTypeÚ_PADDLE_DTYPE_2_NUMPY_DTYPEÚDataTypeÚ_PADDLE_PIR_DTYPE_2_NUMPY_DTYPEÚtyper   r/   r   r   r   r   r   r   r   r   r   r   r   Ú__name__ÚstrÚ	TypeError©Údtypes    r(   Úconvert_dtyperJ   i   s  € Ü�%œŸ™×-Ñ-Ô.ØÔ/Ñ/Ü.¨uÑ5Ð5Ü�%œŸ™Ô'ØÔ3Ñ3Ü2°5Ñ9Ð9Ü	�Eœ4Ô	 àÜÜ�J‰JÜ�I‰IÜ�J‰JÜ�J‰JÜ�G‰GÜ�H‰HÜ�H‰HÜ�H‰HÜ�H‰HÜ�L‰LÜ�M‰Mð
ñ 
ð —>‘>Ð!ð ð 
ñ 
ô" �u“:Ðð �LÑ Øä
ð	Qà
ñ	óð r*   c                 ó¤   — t        «       rt        | |t        t        f||«       nt        | |t        ||«       t        | j                  ||||«       y ©N)r   Ú
check_typer   r   r   Úcheck_dtyperI   )ÚinputÚ
input_nameÚexpected_dtypeÚop_nameÚextra_messages        r(   Úcheck_variable_and_dtyperT   ¢   sG   € ô „}ÜØ�:¤¤}Ð5°wÀõ	
ô 	�5˜*¤h°¸ÔGÜ�—‘˜Z¨¸À-ÕPr*   c           
      ój  — t        «       ry ddlm}  |«       r2t        |t        «      s|f}|t
        j                  j                  fz  }n6t        | t
        j                  j                  «      rt        d|› d|› d�«      ‚t        | |«      s't        dj                  |||t        | «      |«      «      ‚y )Nr   )Úin_to_static_modez…Please use `with base.dygraph.guard()` as context or `base.enable_dygraph()` to switch to imperative mode firstly. Because received 'z' in z is a imperative Variable.z6The type of '{}' in {} must be {}, but received {}. {})r   Údygraph.baserV   r>   Útupler   ÚeagerÚTensorrG   ÚformatrD   )rO   rP   Úexpected_typerR   rS   rV   s         r(   rM   rM   ®   s¸   € ô ÔØõ
 0ñ ÔÜ˜-¬Ô/Ø*Ð,ˆMØœ$Ÿ*™*×+Ñ+Ð-Ñ-‰Ü	�Eœ4Ÿ:™:×,Ñ,Ô	-Üð!Ø!+ ¨E°'°Ð:TðVó
ð 	
ô �e˜]Ô+ÜØD×KÑKØ˜G ]´D¸³KÀóó
ð 	
ð ,r*   c           
      ó‚   — t        «       ry t        | «      |vr't        dj                  |||t        | «      |«      «      ‚y )Nz;The data type of '{}' in {} must be {}, but received {}. {})r   rJ   rG   r[   )Úinput_dtyperP   rQ   rR   rS   s        r(   rN   rN   Ð   sN   € ô ÔØä�[Ó!¨Ñ7ÜØI×PÑPØØØÜ˜kÓ*Øóó
ð 	
ð 8r*   )r   r   c                 ór  — t        «       ry t        | d||«       |�pt        | t        «      s`| D ][  }t        |d||«       |€Œt        |t        «      sŒ%t	        |j
                  d||dj                  dj                  |«      «      «       Œ] |�*t        | t        «      rt	        | j
                  d||«       y y y )Nr4   zelement of shapez9If element of shape is Tensor, its data type should be {}z, )r   rM   r>   r   rN   rI   r[   Újoin)r4   rR   Úexpected_shape_typeÚexpected_element_typeÚexpected_tensor_dtypeÚitems         r(   Úcheck_shapere   ã   s´   € ô ÔØÜˆu�gÐ2°GÔ<ØÐ(´¸EÄ8Ô1LÛˆDÜ�tÐ/Ð1FÈÔPØ$Ñ0´ZÀÄhÕ5OÜØ—J‘JØ&Ø)ØØO×VÑVØŸ	™	Ð"7Ó8óõð ð Ð(¬Z¸¼xÔ-HÜ�E—K‘K Ð*?ÀÕIð .IÐ(r*   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚDataToLoDTensorConverterc                 óÄ   — || _         || _        || _        d}| j                  D ]  }|dk  r|dz  }|dkD  sŒd | _         n t        |«      | _        | j                  «        y ©Nr   r   )ÚplaceÚ	lod_levelr4   rJ   rI   Ú_reset)Úselfrj   rk   r4   rI   Únegtive_countÚss          r(   Ú__init__z!DataToLoDTensorConverter.__init__   sd   € ØˆŒ
Ø"ˆŒØˆŒ
ØˆØ—”ˆAØ�1ŠuØ Ñ"�Ø˜qÓ Ø!�”
Ùð ô # 5Ó)ˆŒ
Ø�‰�r*   c                 ól   — g | _         t        | j                  «      D �cg c]  }g ‘Œ c}| _        y c c}w rL   )r5   Úrangerk   Úlod)rm   Ú_s     r(   rl   zDataToLoDTensorConverter._reset  s-   € ØˆŒ	Ü % d§n¡nÔ 5Ó6Ñ 5˜1’BÐ 5Ñ6ˆ�ùÒ6s   Ÿ	1c                 óR   — | j                  || j                  | j                  «       y rL   )Ú_feed_impl_rs   rk   )rm   r5   s     r(   ÚfeedzDataToLoDTensorConverter.feed  s   € Ø×Ñ˜˜tŸx™x¨¯©Õ8r*   c                 óÀ   — |dk(  r| j                   j                  |«       y |d   j                  t        |«      «       |D ]  }| j                  ||dd  |dz
  «       Œ y ri   )r5   ÚappendÚlenrv   )rm   r5   rs   rk   Ú	each_datas        r(   rv   z$DataToLoDTensorConverter._feed_impl_  sU   € Ø˜Š>Ø�I‰I×Ñ˜TÕ"à�‰F�M‰Mœ#˜d›)Ô$Û!�	Ø× Ñ  ¨C°°¨G°YÀ±]ÕCñ "r*   c                 ó¬   — t        | j                  |«      D ];  \  }}||k7  sŒ|dk\  sŒ|dk\  sŒt        dj                  | j                  |«      «      ‚ y )Nr   zDShape not match. What is defined in data layer is {}, but receive {})Úzipr4   Ú
ValueErrorr[   )rm   r4   Ús1Ús2s       r(   Ú_check_shapez%DataToLoDTensorConverter._check_shape  sR   € Ü˜$Ÿ*™* eÖ,‰FˆB�Ø�R‹x˜B !›G¨¨a«Ü ØZ×aÑaØŸ
™
 Eóóð ñ -r*   c                 óN  — t        j                  | j                  | j                  ¬«      }| j                  rGt        |j                  «      t        | j                  «      k7  r	 |j                  | j                  «      }t        j                  «       }|j                  || j                  «       | j                  dkD  r|j                  | j                  «       | j!                  «        |S # t        $ r0 t        dj                  | j                  |j                  «      «      ‚w xY w)NrH   zBReshape error. What is defined in data layer is {}, but receive {}r   )r/   Úarrayr5   rI   r4   rz   r3   r~   r[   r   Ú	LoDTensorÚsetrj   rk   Úset_recursive_sequence_lengthsrs   rl   )rm   ÚarrÚts      r(   ÚdonezDataToLoDTensorConverter.done&  sÕ   € Ü�h‰h�t—y‘y¨¯
©
Ô3ˆØ�:Š:Ü�3—9‘9‹~¤ T§Z¡Z£Ò0ðØŸ+™+ d§j¡jÓ1�Cô �N‰NÓˆØ	�‰ˆc�4—:‘:ÔØ�>‰>˜AÒØ×,Ñ,¨T¯X©XÔ6Ø�‰ŒØˆøô "ò Ü$Ø\×cÑcØ ŸJ™J¨¯	©	óóð ðús   Á$C+ Ã+9D$N)	rE   Ú
__module__Ú__qualname__rp   rl   rw   rv   r�   r‰   © r*   r(   rg   rg   ÿ   s!   „ òò7ò9òDòór*   rg   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚBatchedTensorProviderc           	      ó  — || _         || _        || _        g | _        || _        |D ]^  }|j
                  dk(  sJ d«       ‚| j                  j                  t        | j                   d|j                  |j                  ¬«      «       Œ` y )Nr   zlod_level must be 0©rj   rk   r4   rI   )
rj   Ú
batch_sizeÚ	generatorÚ
convertersÚ	drop_lastrk   ry   rg   r4   rI   )rm   Ú	feed_listrj   r‘   r’   r”   Úvars          r(   rp   zBatchedTensorProvider.__init__;  sy   € ØˆŒ
Ø$ˆŒØ"ˆŒØˆŒØ"ˆŒãˆCØ—=‘= AÒ%Ð<Ð'<Ó<Ð%Ø�O‰O×"Ñ"Ü(ØŸ*™*ØØŸ)™)ØŸ)™)ô	õñ r*   c                 ó\   — | j                   D �cg c]  }|j                  «       ‘Œ c}S c c}w rL   )r“   r‰   )rm   Úcs     r(   Ú_donezBatchedTensorProvider._doneM  s$   € Ø"&§/¢/Ó2¡/˜Q�—‘• /Ñ2Ð2ùÒ2s   �)c              #   ó   K  — d}| j                  «       D ]d  }t        || j                  «      D ]   \  }}|j                  j	                  |«       Œ" |dz  }|| j
                  k(  sŒQd}| j                  «       –— Œf | j                  s|dkD  r| j                  «       –— y | j                  D �cg c]  }|j                  «       ‘Œ c} y c c}w ­wri   )	r’   r}   r“   r5   ry   r‘   r™   r”   rl   )rm   ÚidxÚeach_sampleÚ	each_slotÚeach_converterr˜   s         r(   Ú__call__zBatchedTensorProvider.__call__P  s­   è ø€ ØˆØŸ>™>Ö+ˆKÜ-0°¸d¿o¹oÖ-NÑ)�	˜>Ø×#Ñ#×*Ñ*¨9Õ5ð .Oð �1‰HˆCØ�d—o‘oÓ%Ø�Ø—j‘j“lÓ"ð ,ð �~Š~ #¨¢'Ø—*‘*“,Óà!%§¢Ó1¡˜AˆQ�X‰X�Z Ó1ùÒ1ùs   ‚A#CÁ&ACÂ.C	Ã	CN)rE   rŠ   r‹   rp   r™   rŸ   rŒ   r*   r(   rŽ   rŽ   :  s   „ òò$3ó2r*   rŽ   c                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)Ú
DataFeedera®	  
    :api_attr: Static Graph

    DataFeeder converts the data that returned by a reader into a data
    structure that can feed into Executor. The reader is usually a
    python generator that returns a list of mini-batch data entries.

    Parameters:
        feed_list (list): Variables or names of Variables that need
            to feed.
        place (:ref:`api_paddle_CPUPlace` | :ref:`api_paddle_CUDAPlace` ):
            place indicates the device (CPU | GPU) the data will be fed into, if
            you want to feed data into GPU, please using :code:`base.CUDAPlace(i)`
            (:code:`i` represents the GPU id), or if you want to feed data into CPU,
            please using :code:`base.CPUPlace()`.
        program (:ref:`api_paddle_static_Program` , optional): The Program that will
            feed data into, if program is None, it will use default_main_program().
            Default None.

    Raises:
        :code:`ValueError` - If some Variables are not in this Program.

    Example:
        .. code-block:: python

            >>> import numpy as np
            >>> import paddle
            >>> from paddle import base

            >>> paddle.enable_static()
            >>> place = paddle.CPUPlace()
            >>> def reader():
            ...     for _ in range(4):
            ...         yield np.random.random([4]).astype('float32'), np.random.random([3]).astype('float32'),
            ...
            >>> main_program = paddle.static.Program()
            >>> startup_program = paddle.static.Program()

            >>> with paddle.static.program_guard(main_program, startup_program):
            ...     data_1 = paddle.static.data(name='data_1', shape=[None, 2, 2], dtype='float32')
            ...     data_2 = paddle.static.data(name='data_2', shape=[None, 1, 3], dtype='float32')
            ...     out = paddle.static.nn.fc(x=[data_1, data_2], size=2)
            ...     # ...
            >>> feeder = base.DataFeeder([data_1, data_2], place)

            >>> exe = paddle.static.Executor(place)
            >>> exe.run(startup_program)

            >>> feed_data = feeder.feed(reader())

            >>> # print feed_data to view feed results
            >>> # print(feed_data['data_1'])
            >>> # print(feed_data['data_2'])

            >>> outs = exe.run(
            ...     program=main_program,
            ...     feed=feed_data,
            ...     fetch_list=[out]
            ... )
            >>> print(outs)

    Nc                 ó.  — g | _         g | _        g | _        g | _        |€
t	        «       }|D ]á  }t        |t        «      r |j                  d«      j                  |«      }t        |t        «      st        d«      ‚| j                   j                  |j                  «       | j                  j                  |j                  «       | j                  j                  |j                  «       | j                  j                  |j                  «       Œã || _        y )Nr   z+Feed list should contain a list of variable)Úfeed_dtypesÚ
feed_namesÚfeed_shapesÚfeed_lod_levelr   r>   rF   Úblockr–   r   rG   ry   rI   Únamerk   r4   rj   )rm   r•   rj   ÚprogramÚeach_vars        r(   rp   zDataFeeder.__init__¡  sÚ   € ØˆÔØˆŒØˆÔØ ˆÔØˆ?Ü*Ó,ˆGÛ!ˆHÜ˜(¤CÔ(Ø"Ÿ=™=¨Ó+×/Ñ/°Ó9�Ü˜h¬Ô1ÜÐ MÓNÐNØ×Ñ×#Ñ# H§N¡NÔ3Ø�O‰O×"Ñ" 8§=¡=Ô1Ø×Ñ×&Ñ& x×'9Ñ'9Ô:Ø×Ñ×#Ñ# H§N¡NÕ3ð "ð ˆ�
r*   c           	      óê  — g }t        | j                  | j                  | j                  «      D ].  \  }}}|j	                  t        | j                  |||¬«      «       Œ0 |D ]\  }t        |«      t        |«      k(  sJ dt        |«      t        |«      fz  «       ‚t        ||«      D ]  \  }}|j                  |«       Œ Œ^ i }	t        | j                  |«      D ]  \  }
}|j                  «       |	|
<   Œ |	S )au  
        According to :code:`feed_list` of :code:`DataFeeder` and :code:`iterable` , converts
        the input into a data structure that can feed into Executor.

        Parameters:
            iterable (generator): user defined python generator to read the raw input data

        Returns:
            :code:`dict`: a :code:`dict` that contains (variable name - converted tensor) pairs

        Example:
            .. code-block:: python

                >>> # In this example, reader - generator will return a list of ndarray of 3 elements
                >>> # feed API will convert each ndarray input into a tensor
                >>> # the return result is a dict with keys: data_1, data_2, data_3
                >>> # result['data_1']  a LoD-Tensor with shape of  [5, 2, 1, 3]. 5 is batch size, and [2, 1, 3] is the real shape of data_1.
                >>> # result['data_2'], result['data_3'] are similar.
                >>> import numpy as np
                >>> import paddle
                >>> from paddle import base

                >>> paddle.enable_static()

                >>> def reader(limit=5):
                ...     for i in range(1, limit + 1):
                ...         yield np.ones([6]).astype('float32') * i , np.ones([1]).astype('int64') * i, np.random.random([9]).astype('float32')
                ...
                >>> data_1 = paddle.static.data(name='data_1', shape=[None, 2, 1, 3])
                >>> data_2 = paddle.static.data(name='data_2', shape=[None, 1], dtype='int64')
                >>> data_3 = paddle.static.data(name='data_3', shape=[None, 3, 3], dtype='float32')
                >>> feeder = base.DataFeeder(['data_1','data_2', 'data_3'], paddle.CPUPlace())

                >>> result = feeder.feed(reader())
                >>> print(result['data_1'])
                >>> print(result['data_2'])
                >>> print(result['data_3'])

        r�   zDThe number of fields in data (%d) does not match len(feed_list) (%d))r}   r¦   r¥   r£   ry   rg   rj   rz   rw   r¤   r‰   )rm   ÚiterableÚ	converterrk   r4   rI   rœ   rž   r�   Úret_dictÚ	each_names              r(   rw   zDataFeeder.feed´  s  € ðP ˆ	Ü'*Ø×Ñ ×!1Ñ!1°4×3CÑ3Cö(
Ñ#ˆI�u˜eð ×ÑÜ(ØŸ*™*Ø'ØØô	õð(
ó $ˆKÜ�{Ó#¤s¨9£~Ò5ð 3ð(ä�[Ó!¤3 y£>Ð2ñ83ó 3Ð5ô .1°¸KÖ-HÑ)� 	Ø×#Ñ# IÕ.ñ .Ið $ð ˆÜ),¨T¯_©_¸iÖ)HÑ%ˆI�~Ø"0×"5Ñ"5Ó"7ˆH�YÒð *Iàˆr*   c                 óž   — |�t        |«      S t        | j                  t        j                  «      rt        t        «       «      S t        «       S rL   )Úintr>   rj   r   Ú	CUDAPlacerz   r
   r	   )rm   Ú
num_placess     r(   Ú_get_number_of_places_z!DataFeeder._get_number_of_places_õ  s9   € ØÐ!Ü�z“?Ð"Ü˜Ÿ
™
¤D§N¡NÔ3Ü”y“{Ó#Ð#ä“:Ðr*   rL   )rE   rŠ   r‹   Ú__doc__rp   rw   r´   rŒ   r*   r(   r¡   r¡   a  s   „ ñ=ó~ò&?óBr*   r¡   )ÚNCHW)Ú )4r#   Únumpyr/   Úpirr   Úpir.corer   r·   r   Ú	frameworkr   r	   r
   r   r   r   Ú__all__r?   r@   ÚBOOLÚFP16ÚBF16ÚFP32ÚFP64ÚINT8ÚINT16ÚINT32ÚINT64ÚUINT8Ú	COMPLEX64Ú
COMPLEX128rA   Ú_NUMPY_DTYPE_2_PADDLE_DTYPErB   ÚFLOAT16ÚBFLOAT16ÚFLOAT32ÚFLOAT64rC   r8   r;   rJ   rT   rM   rN   ÚlistrX   r±   re   rg   rŽ   r¡   rŒ   r*   r(   Ú<module>rÏ      sE  ðó ã å Ý $Ý ÷÷ ð €ð 	‡L�L×Ñ×Ñ˜vØ‡L�L×Ñ×Ñ˜yØ‡L�L×Ñ×Ñ˜xØ‡L�L×Ñ×Ñ˜yØ‡L�L×Ñ×Ñ˜yØ‡L�L×Ñ×Ñ˜vØ‡L�L×Ñ×Ñ Ø‡L�L×Ñ×Ñ Ø‡L�L×Ñ×Ñ Ø‡L�L×Ñ×Ñ Ø‡L�L×Ñ×"Ñ" KØ‡L�L×Ñ×#Ñ# \ðÐ ð  �L‰L× Ñ ×%Ñ%Ø�|‰|×#Ñ#×(Ñ(Ø�l‰l×"Ñ"×'Ñ'Ø�|‰|×#Ñ#×(Ñ(Ø�|‰|×#Ñ#×(Ñ(Ø�L‰L× Ñ ×%Ñ%Ø�\‰\×!Ñ!×'Ñ'Ø�\‰\×!Ñ!×'Ñ'Ø�\‰\×!Ñ!×'Ñ'Ø�\‰\×!Ñ!×'Ñ'Ø—‘×%Ñ%×/Ñ/Ø—,‘,×&Ñ&×1Ñ1ñÐ ð  	‡M�M×Ñ˜Ø‡M�M×Ñ˜9Ø‡M�M×Ñ˜HØ‡M�M×Ñ˜9Ø‡M�M×Ñ˜9Ø‡M�M×Ñ˜Ø‡M�M×Ñ˜Ø‡M�M×Ñ˜Ø‡M�M×Ñ˜Ø‡M�M×Ñ˜Ø‡M�M×Ñ˜[Ø‡M�M×Ñ˜lð#Ð ó ò$,ò6ðt ?Aó	Qó
ðF EGó
ð, ˜u hÐ/Ø ˜/Ø,óJ÷88ñ 8÷v$2ñ $2÷NZò Zr*   