Ë
    Z^(hVE  ã                   ób  — U d Z ddlZddlZddlmZ ddlmZmZmZm	Z	 ddl
Z
ddlZ
ddl
mZ ddlmZmZ ddlmZ dd	lmZmZ d
a ej.                  «       Z ej2                  «       Zg aeeeg df   ee   f      ed<    e e
jB                  dd„ «      Z"e	eee#df   Z$ e«       a%dZ&ee
jB                  jN                     ed<   de(fd„Z) e)«       rCe
jB                  jT                  Z*e
jB                  jV                  Z,e
jB                  jZ                  Z.n ed«      Z*de#de#fd„Z,de#de#fd„Z. ed¬«      de#fd„«       Z/de(fd„Z0d„ Z1d„ Z2d„ Z3d„ Z4d„ Z5 G d„ d«      Z6 G d „ d«      Z G d!„ d"e«      Z7de$ddfd#„Z8d=dee$   defd$„Z9 ed«      d=dee$   de:eef   fd%„«       Z;d=dee$   de*fd&„Z<de#fd'„Z=de	e#ee
j                  f   de
j                  fd(„Z> G d)„ d*«      Z?d+ed,   de?fd-„Z@d.„ ZAd+efd/„ZBd=dee$   defd0„ZC	 d=d1e#dee$   defd2„ZDd=de$ddfd3„ZEdee   fd4„ZFdefd5„ZGde
j                  de
jB                  jN                  fd6„ZH	 d>d7e#de	e#ee
j                  f   ddfd8„ZId>de	e#ee
j                  f   de#fd9„ZJdd:lKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZU dd;lVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ g d<¢Z`y)?zó
This package introduces support for the XPU backend, specifically tailored for
Intel GPU optimization.

This package is lazily initialized, so you can always import it, and use
:func:`is_available()` to determine if your system supports XPU.
é    N)Ú	lru_cache)ÚAnyÚCallableÚOptionalÚUnion©Údevice)Ú_dummy_typeÚ_LazySeedTrackeré   )Ú_get_device_index)ÚEventÚStreamFÚ_queued_callsÚ_xpu_isInBadForkc                   ó   — y©NF© r   ó    úP/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/xpu/__init__.pyú<lambda>r      s   � r   r   Údefault_generatorsÚreturnc                  ó6   — t         j                  j                  S )z(Return true if compile with XPU support.)ÚtorchÚ_CÚ_has_xpur   r   r   Ú_is_compiledr   #   s   € ä�8‰8×ÑÐr   Ú_XpuDevicePropertiesr	   c                 ó   — t        d«      ‚©Nz(PyTorch was compiled without XPU support©ÚNotImplementedErrorr   s    r   Ú_exchange_devicer$   0   ó   € Ü!Ð"LÓMÐMr   c                 ó   — t        d«      ‚r!   r"   r   s    r   Ú_maybe_exchange_devicer'   3   r%   r   )Úmaxsizec                  óT   — t        «       syt        j                  j                  «       S )z*Return the number of XPU device available.r   )r   r   r   Ú_xpu_getDeviceCountr   r   r   Údevice_countr+   7   s   € ô Œ>ØÜ�8‰8×'Ñ'Ó)Ð)r   c                  ó   — t        «       dkD  S )z7Return a bool indicating if XPU is currently available.r   )r+   r   r   r   Úis_availabler-   ?   s   € ô ‹>˜AÑÐr   c                   ó   — y)zKReturn a bool indicating if the current XPU device supports dtype bfloat16.Tr   r   r   r   Úis_bf16_supportedr/   E   s   € àr   c                  ó(   — t         xr t        «        S )z8Return whether PyTorch's XPU state has been initialized.)Ú_initializedÚ_is_in_bad_forkr   r   r   Úis_initializedr3   J   s   € äÒ1¤Ó 1Ð1Ð1r   c                 óf  — t        «       r | «        y |j                  dd«      r)t        j                  | t	        j
                  «       «       y |j                  dd«      r)t        j                  | t	        j
                  «       «       y t        j                  | t	        j
                  «       f«       y )NÚseed_allFÚseed)	r3   ÚgetÚ_lazy_seed_trackerÚqueue_seed_allÚ	tracebackÚformat_stackÚ
queue_seedr   Úappend)ÚcallableÚkwargss     r   Ú
_lazy_callr@   O   s{   € ÜÔÙ�
ð �:‰:�j %Ô(Ü×-Ñ-¨h¼	×8NÑ8NÓ8PÕQØ�Z‰Z˜ Ô&Ü×)Ñ)¨(´I×4JÑ4JÓ4LÕMô × Ñ  (¬I×,BÑ,BÓ,DÐ!EÕFr   c                  ó   — t        «        y)z×Initialize PyTorch's XPU state.
    This is a Python API about lazy initialization that avoids initializing
    XPU until the first time it is accessed. Does nothing if the XPU state is
    already initialized.
    N)Ú
_lazy_initr   r   r   ÚinitrC   ]   s	   € ô …Lr   c            	      ó’  — t        «       st        t        d«      ry t        5  t        «       r
	 d d d «       y t	        «       rt        d«      ‚t        «       st        d«      ‚t        j                  j                  «        dt        _        t        j                  d„ t        j                  «       D «       «       	 t        D ]  \  } }	  | «        Œ 	 t'        t        d«       dad d d «       y # t         $ r1}dt#        |«      › ddj%                  |«      › �}t!        |«      |‚d }~ww xY w# t'        t        d«       w xY w# 1 sw Y   y xY w)	NÚis_initializingzuCannot re-initialize XPU in forked subprocess. To use XPU with multiprocessing, you must use the 'spawn' start methodz#Torch not compiled with XPU enabledTc              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­w©Nr   )Ú.0Úcallss     r   ú	<genexpr>z_lazy_init.<locals>.<genexpr>}   s   è ø€ ÒX uÒRWœUÑXùs   ‚Šz5XPU call failed lazily at initialization with error: z'

XPU call was originally invoked at:

Ú )r3   ÚhasattrÚ_tlsÚ_initialization_lockr2   ÚRuntimeErrorr   ÚAssertionErrorr   r   Ú	_xpu_initrE   r   Úextendr8   Ú	get_callsÚ	ExceptionÚstrÚjoinÚdelattrr1   )Úqueued_callÚorig_tracebackÚeÚmsgs       r   rB   rB   f   sA  € äÔœ7¤4Ð):Ô;ØÜ	ñ !ô ÔØ÷	!ð !ô ÔÜðIóð ô Œ~Ü Ð!FÓGÐGä�‰×ÑÔð  $ŒÔä×ÑÑXÔ0B×0LÑ0LÓ0NÔXÔXð	-Ü/<ò 0Ñ+�˜^ð0Ù•Mñ0ô ”DÐ+Ô,Øˆ÷C!ð !øô2 !ò 0àOÔPSÐTUÓPVÈxð XBØBDÇ'Á'È.ÓBYÐAZð\ð ô $ C›.¨aÐ/ûð0ûô ”DÐ+Õ,ú÷A!ð !úsM   ¢D=·BD=Â9D(ÃC+ÃD(ÃD=Ã+	D%Ã4,D Ä D%Ä%D(Ä(D:Ä:D=Ä=Ec                   ó2   — e Zd Zdefd„Zd„ Zdededefd„Zy)	Ú_DeviceGuardÚindexc                 ó    — || _         d| _        y ©Néÿÿÿÿ)ÚidxÚprev_idx)Úselfr^   s     r   Ú__init__z_DeviceGuard.__init__�   s   € ØˆŒØˆ�r   c                 ó`   — t         j                  j                  | j                  «      | _        y rG   ©r   Úxpur$   rb   rc   ©rd   s    r   Ú	__enter__z_DeviceGuard.__enter__“   ó   € ÜŸ	™	×2Ñ2°4·8±8Ó<ˆ�r   ÚtypeÚvaluer:   c                 ó`   — t         j                  j                  | j                  «      | _        yr   ©r   rh   r'   rc   rb   ©rd   rl   rm   r:   s       r   Ú__exit__z_DeviceGuard.__exit__–   ó   € Ü—9‘9×3Ñ3°D·M±MÓBˆŒØr   N)Ú__name__Ú
__module__Ú__qualname__Úintre   rj   r   rq   r   r   r   r]   r]   Ž   s-   „ ð˜có ò=ð˜Sð ¨ð ¸ô r   r]   c                   ó6   — e Zd ZdZd efd„Zd„ Zdededefd„Zy)	r	   zÓContext-manager that changes the selected device.

    Args:
        device (torch.device or int or str): device index to select. It's a no-op if
            this argument is a negative integer or ``None``.
    c                 ó6   — t        |d¬«      | _        d| _        y )NT©Úoptionalra   )r   rb   rc   )rd   r	   s     r   re   zdevice.__init__£   s   € Ü$ V°dÔ;ˆŒØˆ�r   c                 ó`   — t         j                  j                  | j                  «      | _        y rG   rg   ri   s    r   rj   zdevice.__enter__§   rk   r   rl   rm   r:   c                 ó`   — t         j                  j                  | j                  «      | _        yr   ro   rp   s       r   rq   zdevice.__exit__ª   rr   r   N)rs   rt   ru   Ú__doc__r   re   rj   rq   r   r   r   r	   r	   ›   s2   „ ñð˜só ò=ð˜Sð ¨ð ¸ô r   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú	device_ofa  Context-manager that changes the current device to that of given object.

    You can use both tensors and storages as arguments. If a given object is
    not allocated on a XPU, this is a no-op.

    Args:
        obj (Tensor or Storage): object allocated on the selected device.
    c                 ó`   •— |j                   r|j                  «       nd}t        ‰| �  |«       y r`   )Úis_xpuÚ
get_deviceÚsuperre   )rd   Úobjrb   Ú	__class__s      €r   re   zdevice_of.__init__¹   s$   ø€ Ø"%§*¢*ˆc�n‰nÔ°"ˆÜ‰Ñ˜Õr   )rs   rt   ru   r}   re   Ú__classcell__)r…   s   @r   r   r   ¯   s   ø„ ñ÷ð r   r   c                 óx   — t        «        t        | «      } | dk\  r t        j                  j	                  | «       yy)z¨Set the current device.

    Args:
        device (torch.device or int or str): selected device. This function is a
            no-op if this argument is negative.
    r   N)rB   r   r   r   Ú_xpu_setDevicer   s    r   Ú
set_devicer‰   ¾   s1   € ô „LÜ˜vÓ&€FØ�‚{Ü�‰×Ñ Õ'ð r   c                 ó,   — t        | «      j                  S )a�  Get the name of a device.

    Args:
        device (torch.device or int or str, optional): device for which to
            return the name. This function is a no-op if this argument is a
            negative integer. It uses the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).

    Returns:
        str: the name of the device
    )Úget_device_propertiesÚnamer   s    r   Úget_device_namer�   Ë   s   € ô ! Ó(×-Ñ-Ð-r   c                 óŒ   — t        | «      }t        |«      D �ci c]   }|j                  d«      s|t        ||«      “Œ" c}S c c}w )aÐ  Get the xpu capability of a device.

    Args:
        device (torch.device or int or str, optional): device for which to
            return the device capability. This function is a no-op if this
            argument is a negative integer. It uses the current device, given by
            :func:`~torch.xpu.current_device`, if :attr:`device` is ``None``
            (default).

    Returns:
        Dict[str, Any]: the xpu capability dictionary of the device
    )Ú__Ú
_pybind11_)r‹   ÚdirÚ
startswithÚgetattr)r	   ÚpropsÚprops      r   Úget_device_capabilityr–   Ú   sM   € ô " &Ó)€Eô ˜“JöàØ�‰Ð3Ô4ð 	Œg�e˜TÓ"Ñ"òð ùò s   ™%Ac                 óF   — t        «        t        | d¬«      } t        | «      S )zêGet the properties of a device.

    Args:
        device (torch.device or int or str): device for which to return the
            properties of the device.

    Returns:
        _XpuDeviceProperties: the properties of the device
    Try   )rB   r   Ú_get_device_propertiesr   s    r   r‹   r‹   õ   s    € ô „LÜ˜v°Ô5€FÜ! &Ó)Ð)r   c                  óR   — t        «        t        j                  j                  «       S )z0Return the index of a currently selected device.)rB   r   r   Ú_xpu_getDevicer   r   r   Úcurrent_devicer›     s   € ä„LÜ�8‰8×"Ñ"Ó$Ð$r   c                 ó    — t        | t        «      rt        j                  | «      } | S t        | t        «      rt        j                  d| «      } | S )zŒReturn the torch.device type object from the passed in device.

    Args:
        device (torch.device or int or str): selected device.
    rh   )Ú
isinstancerU   r   r	   rv   r   s    r   Ú_get_devicerž   
  sD   € ô �&œ#ÔÜ—‘˜fÓ%ˆð €Mô 
�FœCÔ	 Ü—‘˜e VÓ,ˆØ€Mr   c                   óN   — e Zd ZU dZed   ed<   ded   fd„Zd„ Zdeded	efd
„Z	y)ÚStreamContexta  Context-manager that selects a given stream.

    All XPU kernels queued within its context will be enqueued on a selected
    stream.

    Args:
        Stream (Stream): selected stream. This manager is a no-op if it's
            ``None``.
    .. note:: Streams are per-device.
    útorch.xpu.StreamÚ
cur_streamÚstreamc                 ó\   — || _         t        d d«      | _        | j                  €d| _        y y )NTra   )r£   r   rb   )rd   r£   s     r   re   zStreamContext.__init__$  s-   € ØˆŒÜ$ T¨4Ó0ˆŒØ�8‰8ÐØˆD�Hð r   c                 ó¼  — | j                   }|�| j                  dk(  ry t        j                  j	                  d «      | _        | j
                  j                  |j                  k7  rLt        |j                  «      5  t        j                  j	                  |j                  «      | _        d d d «       t        j                  j                  |«       y # 1 sw Y   Œ)xY wr`   )	r£   rb   r   rh   Úcurrent_streamÚsrc_prev_streamr	   Údst_prev_streamÚ
set_stream)rd   r¢   s     r   rj   zStreamContext.__enter__*  s§   € Ø—[‘[ˆ
ØÐ §¡¨R¢ØÜ$Ÿy™y×7Ñ7¸Ó=ˆÔð ×Ñ×&Ñ&¨*×*;Ñ*;Ò;Ü˜
×)Ñ)Ó*ñ SÜ',§y¡y×'?Ñ'?À
×@QÑ@QÓ'R�Ô$÷Sä�	‰	×Ñ˜ZÕ(÷Sð Sús   Á;/CÃCrl   rm   r:   c                 ó*  — | j                   }|�| j                  dk(  ry | j                  j                  |j                  k7  r)t        j
                  j                  | j                  «       t        j
                  j                  | j                  «       y r`   )r£   rb   r§   r	   r   rh   r©   r¨   )rd   rl   rm   r:   r¢   s        r   rq   zStreamContext.__exit__6  sj   € Ø—[‘[ˆ
ØÐ §¡¨R¢Øð ×Ñ×&Ñ&¨*×*;Ñ*;Ò;Ü�I‰I× Ñ  ×!5Ñ!5Ô6Ü�	‰	×Ñ˜T×1Ñ1Õ2r   N)
rs   rt   ru   r}   r   Ú__annotations__re   rj   r   rq   r   r   r   r    r      sF   … ñ	ð Ð+Ñ,Ó,ð˜xÐ(:Ñ;ó ò
)ð3˜Sð 3¨ð 3¸ô 3r   r    r£   r¡   c                 ó   — t        | «      S )z³Wrap around the Context-manager StreamContext that selects a given stream.

    Arguments:
        stream (Stream): selected stream. This manager is a no-op if it's ``None``.
    )r    ©r£   s    r   r£   r£   A  s   € ô ˜Ó Ð r   c                 óH   — t         j                  j                  | ||¬«       y)a  set stream specified by the stream id, device index and device type

    Args: stream_id (int): not visible to the user, used to assigned to the specific stream.
          device_index (int): selected device index.
          device_type (int): selected device type.
    ©Ú	stream_idÚdevice_indexÚdevice_typeN)r   r   Ú_xpu_setStreamr¯   s      r   Ú_set_stream_by_idr´   J  s$   € ô 
‡H�H×ÑØØ!Øð õ r   c                 óv   — | €yt        «        t        | j                  | j                  | j                  ¬«       y)a  Set the current stream.This is a wrapper API to set the stream.
        Usage of this function is discouraged in favor of the ``stream``
        context manager.

    Args:
        stream (Stream): selected stream. This function is a no-op
            if this argument is ``None``.
    Nr¯   )rB   r´   r°   r±   r²   r­   s    r   r©   r©   X  s4   € ð €~ØÜ„LÜØ×"Ñ"Ø×(Ñ(Ø×&Ñ&ör   c                 ó˜   — t        «        t        j                  j                  t	        | d¬«      «      }t        |d   |d   |d   ¬«      S )aR  Return the currently selected :class:`Stream` for a given device.

    Args:
        device (torch.device or int, optional): selected device. Returns
            the currently selected :class:`Stream` for the current device, given
            by :func:`~torch.xpu.current_device`, if :attr:`device` is ``None``
            (default).
    Try   r   r   é   r¯   )rB   r   r   Ú_xpu_getCurrentStreamr   r   )r	   Ú
streamdatas     r   r¦   r¦   k  sJ   € ô „LÜ—‘×/Ñ/Ü˜&¨4Ô0ó€Jô Ø˜Q‘-¨j¸©mÈÐTUÉôð r   Údata_ptrc                 óš   — t        «        t        j                  j                  | t	        |d¬«      «      }t        |d   |d   |d   ¬«      S )a;  Return a :class:`Stream` from an external SYCL queue.

    This function is used to wrap SYCL queue created in other libraries in order
    to facilitate data exchange and multi-library interactions.

    .. note:: This function doesn't manage the queue life-cycle, it is the user
       responsibility to keep the referenced queue alive while this returned stream is
       being used. The different SYCL queue pointers will result in distinct
       :class:`Stream` objects, even if the SYCL queues they dereference are equivalent.

    Args:
        data_ptr(int): Integer representation of the `sycl::queue*` value passed externally.
        device(torch.device or int, optional): the device where the queue was originally created.
            It is the user responsibility to ensure the device is specified correctly.
    Try   r   r   r·   r¯   )rB   r   r   Ú_xpu_getStreamFromExternalr   r   )rº   r	   r¹   s      r   Úget_stream_from_externalr½   }  sM   € ô$ „LÜ—‘×4Ñ4ØÔ# F°TÔ:ó€Jô Ø˜Q‘-¨j¸©mÈÐTUÉôð r   c                 ón   — t        «        t        | d¬«      } t        j                  j	                  | «      S )a*  Wait for all kernels in all streams on a XPU device to complete.

    Args:
        device (torch.device or int, optional): device for which to synchronize.
            It uses the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).
    Try   )rB   r   r   r   Ú_xpu_synchronizer   s    r   ÚsynchronizerÀ   ˜  s*   € ô „LÜ˜v°Ô5€FÜ�8‰8×$Ñ$ VÓ,Ð,r   c                  ó~   — t        «       sg S t        j                  j                  «       } | €g S | j	                  «       S )z<Return list XPU architectures this library was compiled for.)r   r   r   Ú_xpu_getArchFlagsÚsplit)Ú
arch_flagss    r   Úget_arch_listrÅ   ¥  s8   € äŒ>Øˆ	Ü—‘×+Ñ+Ó-€JØÐØˆ	Ø×ÑÓÐr   c                  ój   — t        «       } t        | «      dk(  ryddj                  d„ | D «       «      › �S )zIReturn XPU AOT(ahead-of-time) build flags this library was compiled with.r   rK   z-device ú,c              3   ó    K  — | ]  }|–— Œ y ­wrG   r   )rH   Úarchs     r   rJ   z$get_gencode_flags.<locals>.<genexpr>´  s   è ø€ Ò:¨œtÑ:ùs   ‚)rÅ   ÚlenrV   )Ú	arch_lists    r   Úget_gencode_flagsrÌ   ¯  s5   € ä“€IÜ
ˆ9ƒ~˜ÒØØ�c—h‘hÑ:°	Ô:Ó:Ð;Ð<Ð<r   c                 ól   — | j                   }|€
t        «       }t        j                  j                  |   S )zuReturn the XPU Generator object for the given device.

    Args:
        device (torch.device): selected device.
    )r^   r›   r   rh   r   )r	   rb   s     r   Ú_get_generatorrÎ   ·  s/   € ð �,‰,€CØ
€{ÜÓˆÜ�9‰9×'Ñ'¨Ñ,Ð,r   Úoffsetc                 ó@   ‡ ‡— t        |«      Šˆˆ fd„}t        |«       y)a$  Set the random number generator state offset of the specified GPU.

    Args:
        offset (int): The desired offset
        device (torch.device or int, optional): The device to set the RNG state.
            Default: ``'xpu'`` (i.e., ``torch.device('xpu')``, the current XPU device).
    c                  ó>   •— t        ‰«      } | j                  ‰«       y rG   )rÎ   Ú
set_offset)Údefault_generatorÚfinal_devicerÏ   s    €€r   Úcbz!_set_rng_state_offset.<locals>.cbÏ  s   ø€ Ü*¨<Ó8ÐØ×$Ñ$ VÕ,r   N)rž   r@   )rÏ   r	   rÕ   rÔ   s   `  @r   Ú_set_rng_state_offsetrÖ   Ã  s   ù€ ô ˜vÓ&€Lõ-ô ˆr…Nr   c                 ób   — t        «        t        | «      }t        |«      }|j                  «       S )aL  Return the random number generator state offset of the specified GPU.

    Args:
        device (torch.device or int, optional): The device to return the RNG state offset of.
            Default: ``'xpu'`` (i.e., ``torch.device('xpu')``, the current XPU device).

    .. warning::
        This function eagerly initializes XPU.
    )rB   rž   rÎ   Ú
get_offset)r	   rÔ   rÓ   s      r   Ú_get_rng_state_offsetrÙ   Ö  s-   € ô „LÜ˜vÓ&€LÜ& |Ó4ÐØ×'Ñ'Ó)Ð)r   )
Úempty_cacheÚmax_memory_allocatedÚmax_memory_reservedÚmem_get_infoÚmemory_allocatedÚmemory_reservedÚmemory_statsÚmemory_stats_as_nested_dictÚreset_accumulated_memory_statsÚreset_peak_memory_stats)	Úget_rng_stateÚget_rng_state_allÚinitial_seedÚmanual_seedÚmanual_seed_allr6   r5   Úset_rng_stateÚset_rng_state_all)+r   r   r    r›   r¦   r   r	   r   r+   rÚ   rÅ   r–   r�   r‹   rÌ   rä   rå   r½   rC   ræ   r-   r/   r3   rç   rè   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   r6   r5   r‰   ré   rê   r©   r£   ÚstreamsrÀ   rG   )rh   )ar}   Ú	threadingr:   Ú	functoolsr   Útypingr   r   r   r   r   Útorch._Cr	   Ú_deviceÚtorch._utilsr
   r   Ú_utilsr   rë   r   r   r1   ÚlocalrM   ÚLockrN   r   ÚlistÚtuplerU   r«   r“   r   r2   rv   Ú	_device_tr8   r   Ú	GeneratorÚboolr   r   Ú_xpu_exchangeDevicer$   Ú_xpu_maybeExchangeDevicer'   r+   r-   r/   r3   r@   rC   rB   r]   r   r‰   r�   Údictr–   r‹   r›   rž   r    r£   r´   r©   r¦   r½   rÀ   rÅ   rÌ   rÎ   rÖ   rÙ   ÚmemoryrÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   Úrandomrä   rå   ræ   rç   rè   r6   r5   ré   rê   Ú__all__r   r   r   ú<module>r      s˜  ðòó Û Ý ß 1Ó 1ã Û Ý #ß 6å %ß "ð €Ø€y‡�Ó€Ø%�y—~‘~Ó'Ð ð ð ˆtØ	ˆ(�2�t�8Ñ
˜d 3™iÐ
'Ñ(ñó ñ ˜%Ÿ(™(Ð$6¹ÓF€Ø�'˜3  TÐ)Ñ*€	Ù%Ó'Ð Ø02Ð �E˜%Ÿ(™(×,Ñ,Ñ-Ó 2ð�dó ñ
 „>Ø Ÿ8™8×8Ñ8ÐØ—x‘x×3Ñ3ÐØ"ŸX™X×>Ñ>Ññ 'Ð'=Ó>ÐðN ð N¨ó NðN sð N¨só Nñ �1Ôð*�cò *ó ð*ð�dó òò
2ò
Gòò%÷P
ñ 
÷ñ ô(�ô ð
(�yð 
( Tó 
(ñ.˜H YÑ/ð .¸3ó .ñ ˆ4ƒñ (¨9Ñ"5ð ÀÀcÈ3ÀhÁò ó ðñ4* (¨9Ñ"5ð *ÐAUó *ð%˜ó %ð
˜˜c 3¨¯©Ð4Ñ5ð 
¸%¿,¹,ó 
÷'3ñ '3ðT!�8Ð.Ñ/ð !°Mó !òð�vó ñ&˜8 IÑ.ð ¸&ó ð& 26ñØðØ# IÑ.ðàóñ6
-˜	ð 
-¨Tó 
-ð�t˜C‘yó ð=˜3ó =ð	-˜5Ÿ<™<ð 	-¨E¯H©H×,>Ñ,>ó 	-ð :?ñØðØ˜s C¨¯©Ð5Ñ6ðà	óñ&* %¨¨S°%·,±,Ð(>Ñ"?ð *ÈCó *÷"÷ ÷ ÷
÷ 
õ 
ò,�r   