ó
    �®žjÃ>  ã                   ó˜  • S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
JrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJrJrJr  S S	KJr  S S
KJrJrJrJ r J!r!  S SK"J#r#  S SK$J%r%  S SK&J'r'J(r(  S SK)J*r*J+r+J,r,  \ RZ                  " \.5      r/\ " S S5      5       r0\ " S S5      5       r1S\#S\2\2\3\44   S4   SS4S jr5 " S S\'5      r6g)é    N)ÚIterator)Ú	dataclass)ÚPath)ÚBoundingBoxÚCoordOriginÚDocItemLabelÚDoclingDocumentÚDocumentOriginÚImageRefÚProvenanceItemÚSize)ÚSegmentedPdfPage)ÚAbstractDocumentBackend)ÚPdfDocumentBackendÚPdfPageBackendÚiter_pdf_page_backends)Ú"ThreadedDoclingParseBackendOptions)ÚConversionStatusÚDoclingComponentTypeÚ	ErrorItemÚFailureCategoryÚPage)ÚConversionResult©ÚNativePdfPipelineOptions)ÚConvertPipelineÚget_expected_page_nos)ÚProfilingScopeÚTimeIntervalRecorderÚTimeRecorderc                   ó@   • \ rS rSr% Sr\\S'   Sr\\S'   Sr\\S'   Sr	g)Ú_NativeBuildTimingsé4   ç        Úparser_waitÚmaterializeÚpage_image_fetch© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r%   ÚfloatÚ__annotations__r&   r'   Ú__static_attributes__r(   ó    Úa/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/pipeline/native_pdf_pipeline.pyr"   r"   4   s!   ‡ à€K�ÓØ€K�ÓØ!Ð�eÖ!r0   r"   c                   ój   • \ rS rSr% Sr\\S'   Sr\\S'   Sr\\S'   Sr	\
\S'   Sr\
\S'   Sr\
\S	'   S
rg)Ú_NativeAssemblyTimingsé;   r$   Úpage_image_encodeÚ
text_itemsÚpicture_itemsr   Ún_text_itemsÚ
n_picturesÚn_picture_imagesr(   N)r)   r*   r+   r,   r5   r-   r.   r6   r7   r8   Úintr9   r:   r/   r(   r0   r1   r3   r3   ;   s@   ‡ à"Ð�uÓ"Ø€J�ÓØ€M�5Óà€L�#ÓØ€J�ÓØÐ�cÖr0   r3   Úconv_resÚtimings.Úreturnc                 óŒ   • U H>  u  p#[        X[        R                  S9nUR                  U5        UR	                  5         M@     g)z8Publish native phases so `--profiling` reports them too.©ÚscopeN)r   r   ÚDOCUMENTÚaddÚclose)r<   r=   ÚkeyÚsecondsÚrecorders        r1   Ú_record_timingsrH   F   s8   € ó  ‰ˆÜ'¨¼^×=TÑ=TÑUˆØ�‰�WÔØ�‰Öò  r0   c                   ó†  ^ • \ rS rSrSrS\SS4U 4S jjrS\S\4S jrS	\	S
\
\   S\
\   4S jrS\SS4S jrS	\	S\S\S\S-  4S jrS\S\S\SS4S jrS\S\4S jrS	\S\S\S\S\SS4S jrS	\S\S\S\S\SS4S jr\S\S\S\4S j5       rS\S\4S jrS\SS4S jr \!S\4S j5       r"\!S\#S\$4S j5       r%Sr&U =r'$ ) ÚNativePdfPipelineéP   aÍ  Model-free PDF pipeline built on the native content of the PDF.

Every text cell reported by the PDF backend becomes a plain `TextItem` with a
provenance box, every embedded bitmap becomes a `PictureItem`, and - when
`generate_page_images` is set - the rendered page is attached to the page. No
layout, OCR or table model runs, so conversion is fast, but the document has
no reading order, headings or tables: items appear in the order the parser
reports them.
Úpipeline_optionsr>   Nc                 óR   >• [         TU ]  U5        Xl        UR                  U l        g ©N)ÚsuperÚ__init__rL   Úgenerate_page_imagesÚkeep_images)ÚselfrL   Ú	__class__s     €r1   rP   ÚNativePdfPipeline.__init__[   s%   ø€ Ü‰ÑÐ)Ô*Ø:JÔØ+×@Ñ@ˆÕr0   r<   c                 óˆ  • UR                   R                  n[        U[        5      (       d9  [	        S[        U5      R                   SUR                   R                   S35      e[        U5      nU(       d  [        R                  Ul        U$ [        5       nU R                  U5        [        R                  " 5       n[!        US["        R$                  S9   U R'                  U[)        X#5      5       GH)  nU R+                  XAU5      nUb  UR,                  R/                  U5        UR1                  5         U R2                  R4                  n[        R                  " 5       U-
  n	Uc  Mw  X˜:”  d  M~  SUS SU	S S	[7        UR,                  5       S
[7        U5       S3	n
[8        R;                  U
5        UR<                  R/                  [?        [@        RB                  U RD                  R                  U
[F        RH                  S95        [        RJ                  Ul          O   UR,                  RM                  S S9  S S S 5        [8        RO                  SUR                   R                  RP                  [7        UR,                  5      [        R                  " 5       U-
  U R2                  RR                  URT                  URV                  URX                  5        UR,                  (       d  [        R                  Ul        [[        USURT                  4SURV                  4SURX                  445        U$ ! , (       d  f       Nþ= f)NzThe selected backend z for z† is not a PDF backend. Can not convert this with the native PDF pipeline. Please check your format configuration on DocumentConverter.Ú	doc_buildr@   z&Document processing timeout: exceeded z.3fzs limit after zs. Processed Ú/z pages.)Úcomponent_typeÚmodule_nameÚerror_messageÚcategoryc                 ó   • U R                   $ rN   ©Úpage_no)Úpages    r1   Ú<lambda>Ú3NativePdfPipeline._build_document.<locals>.<lambda>“   s   € °·²r0   )rE   z�Native build of %s: %d page(s) in %.2fs with %d parser thread(s) [waiting for the parser %.2fs, materializing cells %.2fs, page images %.2fs]Únative_parser_waitÚnative_materializeÚnative_page_image_fetch).ÚinputÚ_backendÚ
isinstancer   ÚRuntimeErrorÚtyper)   Úfiler   r   ÚFAILUREÚstatusr"   Ú_warn_on_rerenderÚtimeÚ	monotonicr    r   rB   Ú_timed_page_backendsr   Ú_parse_pageÚpagesÚappendÚunloadrL   Údocument_timeoutÚlenÚ_logÚwarningÚerrorsr   r   ÚPIPELINErT   r   ÚTIMEOUTÚPARTIAL_SUCCESSÚsortÚinfoÚnameÚparser_threadsr%   r&   r'   rH   )rS   r<   ÚbackendÚexpected_page_nosr=   Ú
start_timeÚpage_backendr`   ÚtimeoutÚelapsedÚtimeout_msgs              r1   Ú_build_documentÚ!NativePdfPipeline._build_document`   s¿  € Ø—.‘.×)Ñ)ˆÜ˜'Ô#5×6Ñ6ÜØ'¬¨W«×(>Ñ(>Ð'?¸uÀXÇ^Á^×EXÑEXÐDYð ZOð Póð ô 2°(Ó;ÐÞ Ü.×6Ñ6ˆHŒOØˆOä%Ó'ˆØ×Ñ˜wÔ'ä—^’^Ó%ˆ
Ü˜( K´~×7NÑ7NÓOØ $× 9Ñ 9ØÔ/°ÓK÷!�ð ×'Ñ'¨¸<ÓH�ØÑ#Ø—N‘N×)Ñ)¨$Ô/Ø×#Ñ#Ô%à×/Ñ/×@Ñ@�ÜŸ.š.Ó*¨ZÑ7�ØÓ&¨7Õ+<à@ÀÈÀÈ^Ø" 3˜- }´S¸¿¹Ó5HÐ4IÈÜÐ0Ó1Ð2°'ð;ð  ô
 —L‘L Ô-Ø—O‘O×*Ñ*Ü!Ü+?×+HÑ+HØ(,¯©×(?Ñ(?Ø*5Ü%4×%<Ñ%<ñ	ôô '7×&FÑ&F�H”OÙñ5!ð@ �N‰N×ÑÑ$=ÐÑ>÷C PôF 	�	‰	ð!ð �N‰N×Ñ×$Ñ$Ü�—‘ÓÜ�NŠNÓ˜zÑ)Ø×!Ñ!×0Ñ0Ø×ÑØ×ÑØ×$Ñ$ô	
ð �~�~Ü.×6Ñ6ˆHŒOäØà% w×':Ñ':Ð;Ø% w×':Ñ':Ð;Ø*¨G×,DÑ,DÐEðô	
ð ˆ÷w PÕOús   ÃBL3Å*L3Å1C
L3Ì3
Mr=   Úpage_backendsc              #   óˆ  #   •  [         R                  " 5       n [        U5      n U=R                  [         R                  " 5       U-
  -  sl        Uv •  MS  ! [         a.     U=R                  [         R                  " 5       U-
  -  sl        gf = f! U=R                  [         R                  " 5       U-
  -  sl        f = f7f)a  Yield the page backends, timing how long each one is waited for.

That wait is the pipeline's view of the parser's threaded decode: with
enough parser threads the next page is already finished and the wait is
near zero, while a single thread makes it the bulk of the build.
N)ro   rp   ÚnextÚStopIterationr%   )rS   r=   r‹   Ústartedr…   s        r1   rq   Ú&NativePdfPipeline._timed_page_backends¯   s    é € ð Ü—n’nÓ&ˆGðBÜ# MÓ2‘ð ×#Ò#¤t§~¢~Ó'7¸'Ñ'AÑAÕ#ØÒñ øô !ó Øà×#Ò#¤t§~¢~Ó'7¸'Ñ'AÑAÖ#ðûð ×#Ò#¤t§~¢~Ó'7¸'Ñ'AÑAÖ#üs9   ‚CšA ¦1CÁ
BÁ!B Á",CÂBÂB Â-B?Â?Cr‚   c                 ó®  • U R                   R                  (       d  gUR                  n[        U[        5      (       d  gUR
                  (       d  g[        R                  " UR                  U R                   R                  5      (       a  g[        R                  SUR                  U R                   R                  U R                   R                  5        g)a6  Warn when every page image will be rasterized a second time.

The threaded parser rasterizes each page on its worker threads while
decoding it, but only at its own `render_scale`. Asking for a page image
at any other scale re-rasterizes it here, on the calling thread, which is
both duplicate work and serial.
NzÄThe backend rasterizes pages at scale %.2f but the pipeline asks for page images at scale %.2f, so every page is rasterized twice, the second time serially. Set the backend's render_scale to %.2f.)rL   rQ   Úoptionsrh   r   Úrender_pagesÚmathÚiscloseÚrender_scaleÚimages_scalerx   ry   )rS   r‚   r’   s      r1   rn   Ú#NativePdfPipeline._warn_on_rerenderÄ   s�   € ð ×$Ñ$×9×9ØØ—/‘/ˆÜ˜'Ô#E×FÑFØØ×#×#ØÜ�<Š<˜×,Ñ,¨d×.CÑ.C×.PÑ.P×QÑQØä�‰ðLð × Ñ Ø×!Ñ!×.Ñ.Ø×!Ñ!×.Ñ.õ	
r0   r…   c                 ó0  • UR                  5       (       d0  UR                  5       nU R                  UUU(       a  SU 3OS5        g [        R                  " 5       n[        UR                  S9nUR                  5       Ul        UR                  5       Ul
        U=R                  [        R                  " 5       U-
  -  sl        U R                  R                  (       a‹  [        R                  " 5       nX6l        U R                  R                  Ul        UR#                  U R                  R                  S9  SUl        U=R$                  [        R                  " 5       U-
  -  sl        U$ ! [&         a  nU R                  X#SU 35         SnAgSnAff = f)zFCollect the native content of one page, or None if it failed to parse.zPage failed to parse: zPage failed to parse.Nr^   ©Úscale)Úis_validÚget_error_messageÚ_record_page_failurero   rp   r   r_   Úget_sizeÚsizeÚget_segmented_pageÚparsed_pager&   rL   rQ   rg   r—   Ú_default_image_scaleÚ	get_imager'   Ú	Exception)rS   r=   r<   r…   Údetailr�   r`   Úexcs           r1   rr   ÚNativePdfPipeline._parse_pageß   sX  € ð ×$Ñ$×&Ñ&Ø!×3Ñ3Ó5ˆFØ×%Ñ%ØØæð )¨¨Ñ1à,ôð ð	Ü—n’nÓ&ˆGÜ × 4Ñ 4Ñ5ˆDØ$×-Ñ-Ó/ˆDŒIØ+×>Ñ>Ó@ˆDÔØ×Ò¤4§>¢>Ó#3°gÑ#=Ñ=Õà×$Ñ$×9×9ô Ÿ.š.Ó*�Ø ,”Ø,0×,AÑ,A×,NÑ,N�Ô)Ø—‘ T×%:Ñ%:×%GÑ%G�ÑHØ $�”Ø×(Ò(¬D¯NªNÓ,<¸wÑ,FÑFÕ(ð ˆøô ó 	à×%Ñ%ØÐ*@ÀÀÐ(Fôô ûð	ús   ÁD#E, Å,
FÅ6FÆFÚmessagec           
      óX  • [         R                  SUR                  UR                  R                  U5        UR
                  R                  [        [        R                  [        U5      R                  U[        R                  UR                  S95        [        R                  Ul        g )NzPage %d of %s: %s)rY   rZ   r[   r\   r_   )rx   ry   r_   rf   rk   rz   rt   r   r   ÚDOCUMENT_BACKENDrj   r)   r   ÚBACKEND_FAILUREr   r}   rm   )rS   r<   r…   r©   s       r1   rž   Ú&NativePdfPipeline._record_page_failure
  s€   € ô 	�‰Ø ×!5Ñ!5°x·~±~×7JÑ7JÈGô	
ð 	�‰×ÑÜÜ3×DÑDÜ  Ó.×7Ñ7Ø%Ü(×8Ñ8Ø$×,Ñ,ñô	
ô +×:Ñ:ˆ�r0   c                 ó¶  • [        5       n[        US[        R                  S9   [	        SUR
                  R                  R                  UR
                  R                  S9n[        [        UR                  5      R                  US9n[        SU R                  R                  -  5      nUR                    GHª  nUR"                  c   S5       e[$        R&                  " 5       nUR)                  U R                  R                  S9nUR+                  UR,                  UR"                  Ub  [.        R0                  " X…S	9OS S
9  U=R2                  [$        R&                  " 5       U-
  -  sl        UR4                  c  MÆ  [$        R&                  " 5       nU R7                  X$UR,                  UR4                  UR"                  5        U=R8                  [$        R&                  " 5       U-
  -  sl        [$        R&                  " 5       nU R;                  X$UR,                  UR4                  UR"                  5        U=R<                  [$        R&                  " 5       U-
  -  sl        GM­     XAl        S S S 5        [@        RC                  SUR
                  R                  R                  URD                  URF                  URH                  UR2                  UR8                  UR<                  5        [K        USUR2                  4SUR8                  4SUR<                  445        U RL                  (       d  UR                    H
  n0 Ul'        M     U$ ! , (       d  f       Nä= f)NÚdoc_assembler@   zapplication/pdf)ÚmimetypeÚfilenameÚbinary_hash)r€   ÚoriginéH   zPage size is not initialized.rš   )Údpi)r_   r    ÚimagezxNative assembly of %s: %d text item(s), %d picture(s) (%d with an image) [page images %.2fs, text %.2fs, pictures %.2fs]Únative_page_image_encodeÚnative_text_itemsÚnative_picture_items)(r3   r    r   rB   r
   rf   rk   r€   Údocument_hashr	   r   r±   ÚstemÚroundrL   r—   rs   r    ro   rp   r¤   Úadd_pager_   r   Úfrom_pilr5   r¢   Ú_add_text_itemsr6   Ú_add_picture_itemsr7   Údocumentrx   r   r8   r9   r:   rH   rR   Ú_image_cache)	rS   r<   r=   r³   Údocrµ   r`   r�   r¶   s	            r1   Ú_assemble_documentÚ$NativePdfPipeline._assemble_document  s±  € Ü(Ó*ˆÜ˜( N¼.×:QÑ:QÓRÜ#Ø*Ø!Ÿ™×,Ñ,×1Ñ1Ø$ŸN™N×8Ñ8ñˆFô
 "¤t¨F¯O©OÓ'<×'AÑ'AÈ&ÑQˆCÜ˜˜T×2Ñ2×?Ñ?Ñ?Ó@ˆCà Ÿ��Ø—y‘yÑ,ÐMÐ.MÓMÐ,äŸ.š.Ó*�ØŸ™¨T×-BÑ-B×-OÑ-O˜ÐP�Ø—‘Ø ŸL™LØŸ™àÑ(ô #×+Ò+¨EÒ;àð ñ ð ×)Ò)¬T¯^ª^Ó-=ÀÑ-GÑGÕ)à×#Ñ#Ñ+ÙäŸ.š.Ó*�Ø×$Ñ$Ø $§,¡,°×0@Ñ0@À$Ç)Á)ôð ×"Ò"¤d§n¢nÓ&6¸Ñ&@Ñ@Õ"äŸ.š.Ó*�Ø×'Ñ'Ø $§,¡,°×0@Ñ0@À$Ç)Á)ôð ×%Ò%¬¯ªÓ)9¸GÑ)CÑC×%Ð%ñ7 'ð: !$Ô÷M SôP 	�	‰	ð>à�N‰N×Ñ×$Ñ$Ø× Ñ Ø×ÑØ×$Ñ$Ø×%Ñ%Ø×ÑØ×!Ñ!ô
	
ô 	Øà+¨W×-FÑ-FÐGØ$ g×&8Ñ&8Ð9Ø'¨×)>Ñ)>Ð?ðô	
ð ××Ø Ÿœ�Ø$&�Ö!ñ 'ð ˆ÷A SÕRús   ¤IM
Í

MrÃ   r_   r¢   r    c                 óî  • U R                   R                  nSnUR                  U5       Hy  nUR                  n	U	(       d  M  UR	                  [
        R                  U	U	[        UU R                  UR                  R                  5       U5      S[        U	5      4S9S9  US-  nM{     U=R                  U-  sl        US:X  a4  UR                  (       a"  [        R                  SUUR                   5        g g g )Nr   ©r_   ÚbboxÚcharspan)ÚlabelÚtextÚorigÚprové   z\Page %d has text, but no %s cells: the PDF backend does not materialize that text cell unit.)rL   Útext_cell_unitÚiterate_cellsrË   Úadd_textr   ÚTEXTr   Ú_to_prov_bboxÚrectÚto_bounding_boxrw   r8   Útextline_cellsrx   ry   Úvalue)
rS   r=   rÃ   r_   r¢   r    ÚunitÚn_cellsÚcellrË   s
             r1   r¿   Ú!NativePdfPipeline._add_text_items_  sà   € ð ×$Ñ$×3Ñ3ˆØˆØ×-Ñ-¨dÖ3ˆDØ—9‘9ˆDÞÙØ�L‰LÜ"×'Ñ'ØØÜ#Ø#Ø×+Ñ+¨D¯I©I×,EÑ,EÓ,GÈÓNØ¤ T£˜^ñð	 ñ 	ð �q‰LŠGñ 4ð  	×Ò Ñ'ÕØ�a‹<˜K×6×6Ü�L‰Lð'àØ—
‘
õ	ð 7ˆ<r0   c                 óV  • UR                    H™  nU R                  R                  (       a  UR                  OS nUR	                  U[        UU R                  UR                  R                  5       U5      SS9S9  U=R                  S-  sl	        U=R                  US L-  sl
        M›     g )N)r   r   rÇ   )r¶   rÍ   rÎ   )Úbitmap_resourcesrL   Úgenerate_picture_imagesr¶   Úadd_picturer   rÓ   rÔ   rÕ   r9   r:   )rS   r=   rÃ   r_   r¢   r    Úbitmapr¶   s           r1   rÀ   Ú$NativePdfPipeline._add_picture_items‚  s›   € ð "×2Ô2ˆFà $× 5Ñ 5× M× M�—’ÐSWð ð �O‰OØÜ#Ø#Ø×+Ñ+¨F¯K©K×,GÑ,GÓ,IÈ4ÓPØ#ñð ñ ð ×Ò !Ñ#ÕØ×$Ò$¨°TÐ(9Ñ9×$ò 3r0   rÈ   c                 ót   • U R                   [        R                  :X  a  U $ U R                  UR                  S9$ )zDProvenance boxes are bottom-left; parsed cells can be either origin.)Úpage_height)Úcoord_originr   Ú
BOTTOMLEFTÚto_bottom_left_originÚheight)rÈ   r    s     r1   rÓ   ÚNativePdfPipeline._to_prov_bbox™  s5   € ð ×Ñ¤× 6Ñ 6Ó6ØˆKØ×)Ñ)°d·k±kÐ)ÐBÐBr0   c                 ó–   • UR                   [        R                  [        R                  4;   a  [        R                  $ UR                   $ rN   )rm   r   ÚPENDINGÚSTARTEDÚSUCCESS)rS   r<   s     r1   Ú_determine_statusÚ#NativePdfPipeline._determine_status   s7   € Ø�?‰?Ô/×7Ñ7Ô9I×9QÑ9QÐRÓRÜ#×+Ñ+Ð+Ø�‰Ðr0   c                 óü   • UR                    H,  nUR                  c  M  UR                  R                  5         M.     UR                  R                  (       a%  UR                  R                  R                  5         g g rN   )rs   rg   ru   rf   )rS   r<   r`   s      r1   Ú_unloadÚNativePdfPipeline._unload¥  sT   € Ø—N”NˆDØ�}‰}Ó(Ø—‘×$Ñ$Ö&ñ #ð �>‰>×"×"Ø�N‰N×#Ñ#×*Ñ*Õ,ð #r0   c                 ó   • [        5       $ rN   r   )Úclss    r1   Úget_default_optionsÚ%NativePdfPipeline.get_default_options¬  s   € ä'Ó)Ð)r0   c                 ó"   • [        U[        5      $ rN   )rh   r   )ró   r‚   s     r1   Úis_backend_supportedÚ&NativePdfPipeline.is_backend_supported°  s   € ä˜'Ô#5Ó6Ð6r0   )rR   rL   )(r)   r*   r+   r,   Ú__doc__r   rP   r   r‰   r"   r   r   rq   r   rn   r   rr   Ústrrž   rÄ   r3   r	   r;   r   r   r¿   rÀ   Ústaticmethodr   rÓ   r   rí   rð   Úclassmethodrô   r   Úboolr÷   r/   Ú__classcell__)rT   s   @r1   rJ   rJ   P   sú  ø† ñðAÐ)Að AÀd÷ Að
MÐ(8ð MÐ=Mô Mð^à$ðð   Ñ/ðð 
�.Ñ	!ô	ð*
Ð);ð 
Àô 
ð6)à$ð)ð #ð)ð %ð	)ð
 
�‰ô)ðV;Ø(ð;Ø8Fð;ØQTð;à	ô;ð"BÐ+;ð BÐ@Pô BðH!à'ð!ð ð!ð ð	!ð
 &ð!ð ð!ð 
ô!ðF:à'ð:ð ð:ð ð	:ð
 &ð:ð ð:ð 
ô:ð. ðC˜Kð C¨tð C¸ó Có ðCðÐ*:ð Ð?Oô ð
-Ð 0ð -°Tô -ð ð*Ð$<ó *ó ð*ð ð7Ð+Bð 7Àtó 7ó ö7r0   rJ   )7Úloggingr”   ro   Úcollections.abcr   Údataclassesr   Úpathlibr   Údocling_core.types.docr   r   r   r	   r
   r   r   r   Údocling_core.types.doc.pager   Ú docling.backend.abstract_backendr   Údocling.backend.pdf_backendr   r   r   Ú!docling.datamodel.backend_optionsr   Údocling.datamodel.base_modelsr   r   r   r   r   Údocling.datamodel.documentr   Ú"docling.datamodel.pipeline_optionsr   Údocling.pipeline.base_pipeliner   r   Údocling.utils.profilingr   r   r    Ú	getLoggerr)   rx   r"   r3   Útuplerú   r-   rH   rJ   r(   r0   r1   Ú<module>r     sã   ðó Û Û Ý $Ý !Ý ÷	÷ 	ó 	õ 9å D÷ñ õ
 Q÷õ õ 8Ý G÷÷ñ ð ×Ò˜Ó"€ð ÷"ð "ó ð"ð ÷ð ó ððØðØ).¨u°S¸%°ZÑ/@À#Ð/EÑ)Fðà	ôôb7˜õ b7r0   