§
    šŠtj¨@  ã                  ó®  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dl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mZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ erd d	lmZ  ej        e¦  «        Z 	  G d
„ de¦  «        Z!	  G d„ d¦  «        Z"	  eddddd¬¦  «         G d„ de¦  «        ¦   «         Z# eddddd¬¦  «         G d„ de¦  «        ¦   «         Z$dS )é    )ÚannotationsN)Ú
HTMLParser)ÚTYPE_CHECKINGÚAnyÚDictÚListÚOptionalÚTupleÚUnion)Ú
deprecated)Ú
BaseLoader)ÚDocument)ÚTextSplitter)Ú
Connectionc                  ó<   ‡ — e Zd ZdZdˆ fd„Zdd	„Zdd„Zdd„Zˆ xZS )ÚParseOracleDocMetadatazParse Oracle doc metadata...ÚreturnÚNonec                óŒ   •— t          ¦   «                              ¦   «          |                      ¦   «          d| _        i | _        d S )NF)ÚsuperÚ__init__ÚresetÚmatchÚmetadata)ÚselfÚ	__class__s    €úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/document_loaders/oracleai.pyr   zParseOracleDocMetadata.__init__&   s8   ø€ Ý‰Œ×ÒÑÔÐØ�
Š
‰ŒˆØˆŒ
Ø(*ˆŒˆˆó    ÚtagÚstrÚattrsúList[Tuple[str, Optional[str]]]c                ó|   — |dk    r&d}|D ]\  }}|dk    r|}|dk    r|r
|| j         |<   Œ d S |dk    r	d| _        d S d S )NÚmetaÚ ÚnameÚcontentÚtitleT)r   r   )r   r   r!   Úentryr&   Úvalues         r   Úhandle_starttagz&ParseOracleDocMetadata.handle_starttag,   sx   € Ø�&Š=ˆ=Ø#%ˆEØ$ð 5ð 5‘��eØ˜6’>�>Ø!�EØ˜9Ò$Ð$Øð 5Ø/4˜œ eÑ,øð5ð 5ð �GŠ^ˆ^ØˆDŒJˆJˆJð ˆ^r   Údatac                ó:   — | j         r|| j        d<   d| _         d S d S )Nr(   F)r   r   )r   r,   s     r   Úhandle_dataz"ParseOracleDocMetadata.handle_data8   s-   € ØŒ:ð 	Ø%)ˆDŒM˜'Ñ"ØˆDŒJˆJˆJð	ð 	r   úDict[str, Any]c                ó   — | j         S ©N)r   )r   s    r   Úget_metadataz#ParseOracleDocMetadata.get_metadata=   s
   € ØŒ}Ðr   )r   r   )r   r    r!   r"   r   r   )r,   r    r   r   )r   r/   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   r.   r2   Ú__classcell__©r   s   @r   r   r   #   s   ø€ € € € € Ø&Ð&ð+ð +ð +ð +ð +ð +ð
ð 
ð 
ð 
ðð ð ð ð
ð ð ð ð ð ð ð r   r   c                  óD   — e Zd ZdZeddd„¦   «         Zedd„¦   «         ZdS )ÚOracleDocReaderzRead a fileNÚinput_stringúUnion[str, None]r   r    c                ó  — d}d}| €)d                      t          j        dd¬¦  «        ¦  «        } t          t	          j        ¦   «         ¦  «        }t          j        d|¦  «        }t          j        |  	                    ¦   «         ¦  «         
                    ¦   «         }|d |…         }t          j        dt          j        d¦  «        ¦  «        }||z   |z   }|                     ¦   «         }|                     |¦  «        }|d |…         }|S )Né    é   r%   Ú>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789é   )Úkz>I)ÚjoinÚrandomÚchoicesÚintÚtimeÚstructÚpackÚhashlibÚsha256ÚencodeÚdigestÚgetrandbitsÚhexÚzfill)	r;   Ú
out_lengthÚhash_lenÚ	timestampÚtimestamp_binÚhashval_binÚcounter_binÚ	object_idÚobject_id_hexs	            r   Úgenerate_object_idz"OracleDocReader.generate_object_idG   s  € àˆ
ØˆàÐØŸ7š7Ý”ØTØðñ ô ñô ˆLõ �œ	™œÑ$Ô$ˆ	Ýœ D¨)Ñ4Ô4ˆõ ”n \×%8Ò%8Ñ%:Ô%:Ñ;Ô;×BÒBÑDÔDˆØ! ) 8 )Ô,ˆõ ”k $­Ô(:¸2Ñ(>Ô(>Ñ?Ô?ˆð " KÑ/°+Ñ=ˆ	Ø!Ÿš™œˆØ%×+Ò+Øñ
ô 
ˆð & k z kÔ2ˆàÐr   Úconnr   Ú	file_pathÚparamsÚdictúUnion[Document, None]c                óÜ  — i }	 ddl }n"# t          $ r}t          d¦  «        |‚d}~ww xY w	 d|j        _        |                      ¦   «         }t          |d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |€t          d|¬¦  «        S |                     |j	        ¦  «        }	|                     |j	        ¦  «        }
| 
                    d|t          j        |¦  «        |	|
¬	¦  «         |                     ¦   «          |	€i }n‚t          |	                     ¦   «         ¦  «        }|                     d
¦  «        s|                     d¦  «        r7t#          ¦   «         }|                     |¦  «         |                     ¦   «         }t(                               | j        dz   |z   ¦  «        }||d<   ||d<   |
€t          d|¬¦  «        S t          t          |
                     ¦   «         ¦  «        |¬¦  «        S # t.          $ rY}t0                               d|› �¦  «         t0                               d|› �¦  «         |                     ¦   «          Y d}~dS d}~ww xY w)zóRead a file using OracleReader
        Args:
            conn: Oracle Connection,
            file_path: Oracle Directory,
            params: ONNX file name.
        Returns:
            Plain text and metadata as Langchain Document.
        r   NúIUnable to import oracledb, please install with `pip install -U oracledb`.FÚrbr%   ©Úpage_contentr   a  
                declare
                    input blob;
                begin
                    input := :blob;
                    :mdata := dbms_vector_chain.utl_to_text(input, json(:pref));
                    :text := dbms_vector_chain.utl_to_text(input);
                end;)ÚblobÚprefÚmdataÚtextú<!DOCTYPE htmlú<HTML>ú$Ú_oidÚ_fileúAn exception occurred :: zSkip processing )ÚoracledbÚImportErrorÚdefaultsÚ
fetch_lobsÚcursorÚopenÚreadr   ÚvarÚDB_TYPE_CLOBÚexecuteÚjsonÚdumpsÚcloser    ÚgetvalueÚ
startswithr   Úfeedr2   r:   rY   ÚusernameÚ	ExceptionÚloggerÚinfo)rZ   r[   r\   r   rn   Úerr   Úfr,   rf   rg   Údoc_dataÚpÚdoc_idÚexs                  r   Ú	read_filezOracleDocReader.read_filej   sÈ  € ð $&ˆð	ØˆOˆOˆOˆOøÝð 	ð 	ð 	Ýð-ñô ð ðøøøøð	øøøð
4	Ø+0ˆHÔÔ(Ø—[’[‘]”]ˆFå�i Ñ&Ô&ð  ¨!Ø—v’v‘x”x�ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð ˆ|Ý¨R¸(ÐCÑCÔCÐCà—J’J˜xÔ4Ñ5Ô5ˆEØ—:’:˜hÔ3Ñ4Ô4ˆDØ�NŠNðð Ý”Z Ñ'Ô'ØØð ñ ô ð ð �LŠL‰NŒNˆNàˆ}Ø��å˜uŸ~š~Ñ/Ô/Ñ0Ô0�Ø×&Ò&Ð'7Ñ8Ô8ð 0¸H×<OÒ<OØñ=ô =ð 0õ /Ñ0Ô0�AØ—F’F˜8Ñ$Ô$Ð$Ø Ÿ~š~Ñ/Ô/�Hå$×7Ò7¸¼ÈÑ8KÈiÑ8WÑXÔXˆFØ%ˆH�VÑØ )ˆH�WÑàˆ|Ý¨R¸(ÐCÑCÔCÐCå­S°·²±´Ñ-AÔ-AÈHÐUÑUÔUÐUøåð 	ð 	ð 	Ý�KŠKÐ8°BÐ8Ð8Ñ9Ô9Ð9Ý�KŠKÐ6¨9Ð6Ð6Ñ7Ô7Ð7Ø�LŠL‰NŒNˆNØ�4�4�4�4�4øøøøð		øøøsY   „	 ‰
(“#£(¬0H ÁA=Á1H Á=BÂH ÂBÂH ÂD<H Ç/H È
I+ÈAI&É&I+r1   )r;   r<   r   r    )rZ   r   r[   r    r\   r]   r   r^   )r3   r4   r5   r6   ÚstaticmethodrY   rˆ   © r   r   r:   r:   D   sd   € € € € € ØÐàð ð  ð  ð  ñ „\ð ðD ðHð Hð Hñ „\ðHð Hð Hr   r:   z0.3.30z1.0zóThis class is deprecated and will be removed in a future release. Instead, please use `OracleDocLoader` from the `langchain-oracledb` package. For more information, refer to <https://github.com/oracle/langchain-oracle/tree/main/libs/oracledb>.z@from langchain_oracledb.document_loaders import OracleDocLoader;F)ÚsinceÚremovalÚmessageÚalternativeÚpendingc                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚOracleDocLoaderzwRead documents using OracleDocLoader
    Args:
        conn: Oracle Connection,
        params: Loader parameters.
    rZ   r   r\   r/   Úkwargsr   c                óž   •— || _         t          j        t          j        |¦  «        ¦  «        | _         t          ¦   «         j        di |¤Ž d S )NrŠ   )rZ   rx   Úloadsry   r\   r   r   )r   rZ   r\   r’   r   s       €r   r   zOracleDocLoader.__init__Ì   sH   ø€ ØˆŒ	Ý”j¥¤¨FÑ!3Ô!3Ñ4Ô4ˆŒØ�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"r   r   úList[Document]c           	     ó¢  — 	 ddl }n"# t          $ r}t          d¦  «        |‚d}~ww xY wd}g }i }ddi}	 | j        �œ| j                             d¦  «        | _        | j                             d¦  «        | _        | j                             d¦  «        | _        | j                             d	¦  «        | _        | j                             d
¦  «        | _        nt          d¦  «        ‚d|j
        _        | j        r?t                               | j        | j        |¦  «        }|€|S |                     |¦  «         | j        r¾d}t!          j        | j        ¦  «        D ]¢}	t           j                             | j        |	¦  «        }
t           j                             |
¦  «        r\t                               | j        |
|¦  «        }|€$|dz   }t*                               d|› d�¦  «         Œ�|                     |¦  «         Œ£| j        �r	 | j        �| j        €t          d¦  «        ‚| j                             ¦   «         }| j                             d¦  «        | _        | j        �°t3          | j        ¦  «        dk    rt          d¦  «        ‚d}|                     || j                             ¦   «         | j                             ¦   «         ¬¦  «         |                     ¦   «         }|D ]*}|d         | j        v r|d         dvrt          d¦  «        ‚Œ+d| _        | j        �| j        D ]}| j        dz   |z   | _        Œd| j        z   dz   t=          j        |¦  «        z   dz   | j        z   dz   | j        z   dz   | j        z   dz   | j        z   d z   }|                     |¦  «         |D �]}i }|€ot                                | j        j!        d!z   | j        z   d!z   | j        z   d!z   | j        z   ¦  «        }||d"<   |                     tE          d#|¬$¦  «        ¦  «         Œv|d         �vtG          |d         ¦  «        }| $                    d%¦  «        s| $                    d&¦  «        r7tK          ¦   «         }| &                    |¦  «         | '                    ¦   «         }t                                | j        j!        d!z   | j        z   d!z   | j        z   d!z   | j        z   d!z   tG          |d'         ¦  «        z   ¦  «        }||d"<   |d'         |d(<   | j        �t3          | j        ¦  «        }tQ          d|¦  «        D ]}||d'z            || j        |         <   Œ|d         €&|                     tE          d#|¬$¦  «        ¦  «         �Œ×|                     tE          tG          |d         ¦  «        |¬$¦  «        ¦  «         �ŒnW# t          $ rJ}t*                               d)|› �¦  «         tS          j*        ¦   «          | +                    ¦   «          ‚ d}~ww xY w|S # t          $ r6}t*                               d)|› �¦  «         tS          j*        ¦   «          ‚ d}~ww xY w)*z,Load data into LangChain Document objects...r   Nr`   Ú	plaintextÚfalseÚfileÚdirÚownerÚ	tablenameÚcolnamezMissing loader parametersFé   zTotal skipped: ú
z%Missing owner or column name or both.Ú
mdata_colsé   z?Exceeds the max number of columns you can request for metadata.zgselect column_name, data_type from all_tab_columns where owner = :ownername and table_name = :tablename)Ú	ownernamerœ   )ÚNUMBERÚBINARY_DOUBLEÚBINARY_FLOATÚLONGÚDATEÚ	TIMESTAMPÚVARCHAR2zDThe datatype for the column requested for metadata is not supported.z, rowidz, z'select dbms_vector_chain.utl_to_text(t.z, json('z+')) mdata, dbms_vector_chain.utl_to_text(t.z) textz from ú.z trj   rk   r%   rb   rh   ri   é   Ú_rowidrm   ),rn   ro   r\   Úgetr™   rš   r›   rœ   r�   r   rp   rq   r:   rˆ   rZ   ÚappendÚosÚlistdirÚpathrC   Úisfiler€   r�   rr   r    Úlenrw   ÚupperÚfetchallÚmdata_cols_sqlrx   ry   rY   r~   r   r    r|   r   r}   r2   ÚrangeÚ	tracebackÚ	print_excrz   )r   rn   r‚   ÚncolsÚresultsr   Úm_paramsÚdocÚ
skip_countÚ	file_namer[   rr   ÚsqlÚrowsÚrowÚcolr†   r,   r…   Úir‡   s                        r   ÚloadzOracleDocLoader.loadÑ   s.  € ð	ØˆOˆOˆOˆOøÝð 	ð 	ð 	Ýð-ñô ð ðøøøøð	øøøð ˆØ"$ˆØ#%ˆØ Ð)ˆðg	àŒ{Ð&Ø œKŸOšO¨FÑ3Ô3�”	Øœ;Ÿ?š?¨5Ñ1Ô1�”Ø!œ[Ÿ_š_¨WÑ5Ô5�”
Ø!%¤§¢°Ñ!=Ô!=�”Ø#œ{Ÿš¨yÑ9Ô9�”�åÐ ;Ñ<Ô<Ð<à+0ˆHÔÔ(àŒyð $Ý%×/Ò/°´	¸4¼9ÀhÑOÔO�à�;Ø"�Nà—’˜sÑ#Ô#Ð#àŒxð 0Ø�
Ý!#¤¨D¬HÑ!5Ô!5ð 	0ð 	0�IÝ "¤§¢¨T¬X°yÑ AÔ A�IÝ”w—~’~ iÑ0Ô0ð 0Ý-×7Ò7¸¼	À9ÈhÑWÔW˜à˜;Ø)3°a©˜JÝ"ŸKšKÐ(H¸*Ð(HÐ(HÐ(HÑIÔIÐIÐIà#ŸNšN¨3Ñ/Ô/Ð/øàŒ~ñ ð~Ø”zÐ)¨T¬\Ð-AÝ'Ð(OÑPÔPÐPà!œY×-Ò-Ñ/Ô/�FØ&*¤k§o¢o°lÑ&CÔ&C�D”OØ”Ð2Ý˜tœÑ/Ô/°!Ò3Ð3Ý"+ð!Bñ#ô #ð ð8ð ð
 ŸšØØ&*¤j×&6Ò&6Ñ&8Ô&8Ø&*¤n×&:Ò&:Ñ&<Ô&<ð 'ñ ô ð ð  &ŸšÑ0Ô0˜Ø#'ð &ð &˜CØ" 1œv¨¬Ð8Ð8Ø#& q¤6ð 2"ð $"ð $"õ +4ð)Kñ+&ô +&ð %&øð
 +4�DÔ'Ø”Ð2Ø#'¤?ð Sð S˜CØ26Ô2EÈÑ2LÈsÑ2R˜DÔ/Ð/ð BØœ,ñ'à$ñ%õ œ* XÑ.Ô.ñ/ð Hñ	Hð
 œ,ñ'ð #ñ#ð Ô-ñ.ð #ñ#ð œ*ñ	%ð ñ
ð œ.ñ)ð ñð ð  —N’N 3Ñ'Ô'Ð'Ø%ð 7"ñ 7"˜Ø#%˜à˜;Ý%4×%GÒ%GØ $¤	Ô 2Ø"%ñ!&à"&¤*ñ!-ð #&ñ!&ð #'¤.ñ	!1ð
 #&ñ!&ð #'¤,ñ!/ñ&ô &˜Fð 06˜H VÑ,Ø#ŸNšN­8ÀÈhÐ+WÑ+WÔ+WÑXÔXÐXÐXà" 1œvÐ1Ý'*¨3¨q¬6¡{¤{ Ø#'§?¢?Ð3CÑ#DÔ#Dð !@ÈÏÊØ$,ñI"ô I"ð !@õ )?Ñ(@Ô(@ AØ$%§F¢F¨4¡L¤L LØ/0¯~ª~Ñ/?Ô/? Hå%4×%GÒ%GØ $¤	Ô 2Ø"%ñ!&à"&¤*ñ!-ð #&ñ!&ð #'¤.ñ	!1ð
 #&ñ!&ð #'¤,ñ!/ð #&ñ!&õ #& c¨!¤f¡+¤+ñ!.ñ
&ô 
&˜Fð 06˜H VÑ,Ø14°Q´˜H XÑ.ð  $œÐ:Ý(+¨D¬OÑ(<Ô(< å%*¨1¨e¡_¤_ð Jð J Ø?BÀ1ÀqÁ5¼z ¨¬¸Ô);Ñ <Ð <à" 1œv˜~Ø '§¢Ý$,¸"ÀxÐ$PÑ$PÔ$Pñ!"ô !"ð !"ñ !"ð !(§¢Ý$,Ý58¸¸Q¼±[´[È8ð%&ñ %&ô %&ñ!"ô !"ð !"ñ !"ðg7"øõp !ð ð ð Ý—K’KÐ @¸BÐ @Ð @ÑAÔAÐAÝÔ'Ñ)Ô)Ð)Ø—L’L‘N”N�NØøøøøð	øøøð ˆNøÝð 	ð 	ð 	Ý�KŠKÐ8°BÐ8Ð8Ñ9Ô9Ð9ÝÔÑ!Ô!Ð!Øøøøøð	øøøsU   ‚ ‡
&‘!¡&´C.X Ä#C"X ÈN.V5 Ö4X Ö5
X	Ö?AXØX	Ø	X Ø
YØ1Y	Ù	Y)rZ   r   r\   r/   r’   r   )r   r•   )r3   r4   r5   r6   r   rÅ   r7   r8   s   @r   r‘   r‘   ¹   sc   ø€ € € € € ðð ð#ð #ð #ð #ð #ð #ð
uð uð uð uð uð uð uð ur   r‘   zöThis class is deprecated and will be removed in a future release. Instead, please use `OracleTextSplitter` from the `langchain-oracledb` package. For more information, refer to <https://github.com/oracle/langchain-oracle/tree/main/libs/oracledb>.zCfrom langchain_oracledb.document_loaders import OracleTextSplitter;c                  ó,   ‡ — e Zd ZdZdˆ fd
„Zdd„Zˆ xZS )ÚOracleTextSplitterz$Splitting text using Oracle chunker.rZ   r   r\   r/   r’   r   r   r   c                ó  •— || _         || _         t          ¦   «         j        di |¤Ž 	 ddl}	 ddl}n"# t          $ r}t          d¦  «        |‚d}~ww xY w|| _        || _        dS # t          $ r t          d¦  «        ‚w xY w)zInitialize.r   Nr`   zjoracledb or json or both are not installed. Please install them. Recommendations: `pip install oracledb`. rŠ   )	rZ   r\   r   r   rx   rn   ro   Ú	_oracledbÚ_json)r   rZ   r\   r’   rx   rn   r‚   r   s          €r   r   zOracleTextSplitter.__init__˜  sÍ   ø€ àˆŒ	ØˆŒØ�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ð	ØˆKˆKˆKðØ����øÝð ð ð Ý!ð1ñô ð ðøøøøðøøøð &ˆDŒNØˆDŒJˆJˆJøÝð 	ð 	ð 	Ýð>ñô ð ð	øøøs*   ªA& ¯4 ³A& ´
A¾AÁAÁA& Á&B rg   r    ú	List[str]c                ó~  — 	 ddl }n"# t          $ r}t          d¦  «        |‚d}~ww xY wg }	 d| j        j        _        | j                             ¦   «         }|                     |j        ¬¦  «         | 	                    d|| j
                             | j        ¦  «        ¬¦  «         	 |                     ¦   «         }|€n<| j
                             |d         ¦  «        }|                     |d	         ¦  «         ŒS|S # t           $ r6}t"                               d
|› �¦  «         t'          j        ¦   «          ‚ d}~ww xY w)z&Split incoming text and return chunks.r   Nr`   F)r'   zUselect t.column_value from dbms_vector_chain.utl_to_chunks(:content, json(:params)) t)r'   r\   TÚ
chunk_datarm   )rn   ro   rÉ   rp   rq   rZ   rr   ÚsetinputsizesÚCLOBrw   rÊ   ry   r\   Úfetchoner”   r®   r   r€   r�   r¸   r¹   )	r   rg   rn   r‚   Úsplitsrr   rÂ   Údr‡   s	            r   Ú
split_textzOracleTextSplitter.split_text±  sn  € ð	ØˆOˆOˆOˆOøÝð 	ð 	ð 	Ýð-ñô ð ðøøøøð	øøøð ˆð	à16ˆDŒNÔ#Ô.à”Y×%Ò%Ñ'Ô'ˆFà× Ò ¨¬Ð Ñ7Ô7Ð7Ø�NŠNðOàØ”z×'Ò'¨¬Ñ4Ô4ð	 ñ ô ð ð/Ø—o’oÑ'Ô'�Ø�;ØØ”J×$Ò$ S¨¤VÑ,Ô,�Ø—’˜a œoÑ.Ô.Ð.ð/ð ˆMøåð 	ð 	ð 	Ý�KŠKÐ8°BÐ8Ð8Ñ9Ô9Ð9ÝÔÑ!Ô!Ð!Øøøøøð	øøøs(   ‚ ‡
&‘!¡&¬CC< Ã<
D<Ä1D7Ä7D<)rZ   r   r\   r/   r’   r   r   r   )rg   r    r   rË   )r3   r4   r5   r6   r   rÓ   r7   r8   s   @r   rÇ   rÇ   ‰  sY   ø€ € € € € ð /Ð.ðð ð ð ð ð ð2'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   rÇ   )%Ú
__future__r   rJ   rx   Úloggingr¯   rD   rH   rG   r¸   Úhtml.parserr   Útypingr   r   r   r   r	   r
   r   Úlangchain_core._apir   Úlangchain_core.document_loadersr   Úlangchain_core.documentsr   Úlangchain_text_splittersr   rn   r   Ú	getLoggerr3   r€   r   r:   r‘   rÇ   rŠ   r   r   ú<module>rÝ      sc  ðð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ià *Ð *Ð *Ð *Ð *Ð *Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø -Ð -Ð -Ð -Ð -Ð -Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1àð $Ø#Ð#Ð#Ð#Ð#Ð#à	ˆÔ	˜8Ñ	$Ô	$€à "ðð ð ð ð ˜Zñ ô ð ð< ðoð oð oð oð oñ oô oð oðd ð €Ø
Øð	oð
 SØðñ ô ðAð Að Að Að A�jñ Aô Añô ðAðH €Ø
Øð	oð
 VØðñ ô ðCð Cð Cð Cð C˜ñ Cô Cñô ðCð Cð Cr   