Files
intellecton/venv/lib/python3.12/site-packages/pymdownx/__pycache__/superfences.cpython-312.pyc
T

251 lines
42 KiB
Plaintext
Raw Normal View History

Ë
cÀj…ŽãóX—dZddlmZddlmZddlmZddlmZddl m
Z ddl Z ddl
Z
dd lmZd
Zd Zd Ze
j&d
«Ze
j&d«Ze
j&d«Ze
j&d«ZdZe
j&dj3e j4de j4dddze j4d««ZGd„de«Zd„ZGd„d«Zd„Z d„Z!d„Z"d„Z#d*d„Z$d+d„Z%d*d „Z&Gd!„d"e«Z'Gd#„d$e«Z(Gd%„d&e(«Z)Gd'„d(e«Z*d)„Z+y),a9
SuperFences.
pymdownx.superfences
Nested Fenced Code Blocks
This is a modification of the original Fenced Code Extension.
Algorithm has been rewritten to allow for fenced blocks in blockquotes,
lists, etc. And also , allow for special UML fences like 'flow' for flowcharts
and `sequence` for sequence diagrams.
Modified: 2014 - 2017 Isaac Muse <isaacmuse@gmail.com>
---
Fenced Code Extension for Python Markdown
=========================================
This extension adds Fenced Code Blocks to Python-Markdown.
See <https://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html>
for documentation.
Original code Copyright 2007-2008 [Waylan Limberg](https://github.com/waylan).
All changes Copyright 2008-2014 The Python Markdown Project
License: [BSD](http://www.opensource.org/licenses/bsd-license.php)
é)Ú Extension)Ú Preprocessor)ÚCodeBlockProcessor)Ú get_attrs)ÚutilNé)ÚQuotesExtensionúú)ú>ú ú a(?x)
(?P<fence>~{3,}|`{3,})
(?:[ \t]*\.?(?P<lang>[\w#.+-]+)(?=[\t ]|$))? # Language
(?:
[ \t]*(\{(?P<attrs>[^\n]*)\}) | # Optional attributes or
(?P<options>
(?:
(?:[ \t]*[a-zA-Z][a-zA-Z0-9_]*(?:=(?P<quot>"|').*?(?P=quot))?)(?=[\t ]|$) # Options
)+
) |
(?P<unrecognized>
(?:([ \t]*[^\s]+)(?=[\t ]|$))+
)
)?[ \t]*$
z3^(?P<hl_lines>\d+(?:-\d+)?(?:[ \t]+\d+(?:-\d+)?)*)$zS(?P<linestart>[\d]+)(?:[ \t]+(?P<linestep>[\d]+))?(?:[ \t]+(?P<linespecial>[\d]+))?zh(?x)
(?:
(?P<key>[a-zA-Z][a-zA-Z0-9_]*)(?:=(?P<quot>"|')(?P<value>.*?)(?P=quot))?
)
z %s[ \t]*$z^([\> ]*){}({}){}$éÿÿÿÿz([0-9]+)có—eZdZdZy)ÚSuperFencesExceptionz=Special exception to ensure one is raised when a fence fails.N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__©óúW/home/antigravity/intellecton/venv/lib/python3.12/site-packages/pymdownx/superfences.pyrrSs„ÚGrrcór—|jdd«}|jdd«}|jdd«}|S)zBasic html escaping.ú&z&amp;ú<z&lt;r z&gt;)Úreplace)Útxts rÚ_escaperWs9€ð �+‰+�c˜7Ó
#€CØ
�+‰+�c˜6Ó
"€CØ
�+‰+�c˜6Ó
"€CØ €Jrcó6—eZdZdZd„Zd„Zd d„Zd„Zd„Zd„Z y)
Ú CodeStashz 
Stash code for later retrieval.
Store original fenced code here in case we were
too greedy and need to restore in an indented code
block.
có—i|_y)ú Initialize.N©Ústash©Úselfs rÚ__init__zCodeStash.__init__ió €ðˆ�
rcó,—t|j«S)zLength of stash.)Úlenr$r%s rÚ__len__zCodeStash.__len__ns€ô�4—:‘:‹ÐrNcó>—|jj||«}|S)zGet the code from the key.)r$Úget)r&ÚkeyÚdefaultÚcodes rr-z
CodeStash.getss€ð�z‰z�~‰~˜c 7Ó+ˆØˆ rcó—|j|=y)zRemove the stashed code.Nr#)r&r.s rÚremovezCodeStash.removeys€ð
�J‰J�s‰Orcó&—||f|j|<y)zStore the code in the stash.Nr#)r&r.r0Ú indent_levels rÚstorezCodeStash.store~s€ð  Ð.ˆ�
‰
�3Šrcó—i|_y©zClear the stash.Nr#r%s rÚ clear_stashzCodeStash.clear_stashƒr(r©N)
rrrrr'r+r-r2r5r8rrrr r `s%„ñòò
ó
ò ò
/ó
rr c ó8—|d}|d}|d}|r|jd|«|rd|›d�nd}|r djd j|««nd}|r)d d jd
„|j«D««znd}d j|||t |««S) zFormat source as code blocks.ÚclassesÚid_valueÚattrsrú id="ú"Úú class="{}"r
c3ó2K—|]\}}|›d|›d�–—Œy­w©z="r?Nr©Ú.0ÚkÚvs rú <genexpr>z$fence_code_format.<locals>.<genexpr>•ó èø€ÒB©D¨A¨q˜a˜S  1 # Qœ<ÑBùó‚z <pre{}{}{}><code>{}</code></pre>©ÚinsertÚformatÚjoinÚitemsr© ÚsourceÚlanguageÚ
class_nameÚoptionsÚmdÚkwargsr;r<r=s rÚfence_code_formatrW‰s¡€ð�YÑ€GØ�jÑ!€HØ �7‰O€EáØ�‰�q˜*Ô%á&.��x�j Ñ"°B€HÙ9@ˆm×"Ñ" 3§8¡8¨GÓ#4Ô5Àb€GÙFKˆC�#—(‘(ÑB°E·K±K³MÔBÓBÒ BÐQS€Eà -× 4Ñ 4°X¸wÈÌwÐW]ËÓ _Ð_rc ó8—|d}|d}|d}|r|jd|«|rd|›d�nd}|r djd j|««nd}|r)d d jd
„|j«D««znd}d j|||t |««S) zFormat source as div.r;r<r=rr>r?r@rAr
c3ó2K—|]\}}|›d|›d�–—Œy­wrCrrDs rrHz#fence_div_format.<locals>.<genexpr>¦rIrJz<div{}{}{}>{}</div>rKrPs rÚfence_div_formatrZšs €ð�YÑ€GØ�jÑ!€HØ �7‰O€EáØ�‰�q˜*Ô%á&.��x�j Ñ"°B€HÙ9@ˆm×"Ñ" 3§8¡8¨GÓ#4Ô5Àb€GÙFKˆC�#—(‘(ÑB°E·K±K³MÔBÓBÒ BÐQS€Eà × 'Ñ '¨°'¸5Ä'È&Ã/Ó RÐRrcó,—|jdj}|j«D]h\}}d}|rW|jd«r|||<Œ!dtfdt
fdfD],\} }
|| k(sŒ |dusŒ|
�|
j
|«€Œ%|||<d}n|rŒd|||<Œjy)zHighlight validator.Úfenced_code_blockFzdata-Úhl_linesÚlinenums)ÚtitleNT)Ú
preprocessorsÚ use_pygmentsrOÚ
startswithÚ RE_HL_LINESÚ RE_LINENUMSÚmatch) rRÚinputsrTr=rUrarFrGÚmatchedÚoptÚ validators rÚhighlight_validatorrj«s¾€ð×#Ñ#Ð$7Ñ8×EÑE€Là— ‘ “ò
‰ˆˆ1؈٠Ø�|‰|˜GÔ$Ø��a‘ØØ$.´ Ð#<¸zÌ;Ð>WÐYhÐ"iò
‘��Yؘ“8Ø ’}¨)Ð*;¸y¿¹ÈqÓ?QÑ?]Ø%&˜ ™
Ø"&˜Ùð 
ò ؈E�!ŠHð
ð rcó>—|j«D]
\}}|||<Œ y)zDefault validator.T)rO)rRrfrTr=rUrFrGs rÚdefault_validatorrlÂs)€ð— ‘ “ò‰ˆˆ1؈ˆaŠðà rcóT—|jdj«||||||«S)zValidator wrapper.r\)r`Úget_hl_settings)rRrfrTr=rUris rÚ
_validatorroÊs/€ð×ÑÐ(Ñ)×9Ñ9Ô;Ù �X˜v w°°rÓ :Ð:rc ó—||||||fi|¤ŽS)zFormatter wrapper.r)ÚsrcrRrTrUrSÚ_fmtrVs rÚ
_formatterrsÑs€ñ ��X˜z¨7°BÑ A¸&Ñ AÐArcó&—|duxs |dk(xs||k(S)zTest language.NÚ*r)rRÚ
test_languages rÚ_testrw×s#€ð ˜DÐ Ò U M°SÑ$8Ò U¸HÈ
Ñ<UÐUrcó:‡—eZdZdZˆfd„Zd„Zd„Zd„Zd„ZˆxZ S)ÚSuperFencesCodeExtensionz!SuperFences code block extension.có`•—g|_ddggdgddgddgddgdœ|_t‰|� |i|¤Žy )
r"Fz-Disable indented code blocks - Default: Falsez2Specify custom fences. Default: See documentation.r@zwSet class name for wrapper element. The default of CodeHilite or Highlight will be usedif nothing is set. - Default: ''z(Preserve tabs in fences - Default: Falsez,Relaxed fenced code headers - Default: False)Údisable_indented_code_blocksÚ
custom_fencesÚ css_classÚ
preserve_tabsÚrelaxed_headersN)Ú superfencesÚconfigÚsuperr')r&ÚargsrVÚ __class__s €rr'z!SuperFencesCodeExtension.__init__às]ø€ðˆÔà-2Ð4cÐ,dØ Ð"VÐWàððð $Ð%OÐPØ %Ð'UÐVñ 
ˆŒ ô ‰Ñ˜$Ð) &Ó)rcó¤—|tjt|¬«||dœ}|dk(r||jd<y|jj |«y)z@Extend SuperFences with the given name, language, and formatter.)rv©ÚnameÚtestÚ formatterrirurN)Ú functoolsÚpartialrwr€Úappend)r&r‡r‰riÚobjs rÚextend_super_fencesz,SuperFencesCodeExtension.extend_super_fencesòsQ€ðÜ×%Ñ%¤e¸4Ô@Ø"Ø"ñ 
ˆð �3Š;Ø"%ˆD× Ñ ˜QÒ à × Ñ × #Ñ # CÕ (rc
ó|—|j|«|j«}|jjddtdt j tt¬«dœ«|jdg«}|D]œ}|jd«}|jd«}|jd t«}|jd
t«}|€ŒT|€ŒW|j|t j t||¬ «t j t|¬««Œž||_|j«t!«|_y) z7Add fenced block preprocessor to the Markdown instance.rr€N©rir†r|r‡ÚclassrMri)rSrr)ÚregisterExtensionÚ
getConfigsr€rLrwrŠr‹rorjr-rWrlrŽrsrUÚpatch_fenced_ruler r$) r&rUr�r|Úcustomr‡rSÚ fence_formatris rÚextendMarkdownz'SuperFencesCodeExtension.extendMarkdowns€ð ×јTÔ"Ø—‘Ó"ˆð
×Ñ×ÑØ
à%ÜØ!Ü&×.Ñ.¬zÔEXÔYñ 
ô
ðŸ
™
 ?°BÓ7ˆ
Ø#ò
ˆFØ—:‘:˜fÓ%ˆDØŸ™ GÓ,ˆJØ!Ÿ:™: hÔ0AÓBˆLØŸ
™
 ;Ô0AÓBˆIØÑ JÑ$:Ø×(Ñ(ØÜ×%Ñ%¤j¸ZÈlÔ[Ü×%Ñ%¤j¸IÔFõð
ðˆŒØ ×ÑÔ Ü“[ˆ�
rcóð—|j«}t|j«}||_||_|j
dddk(r|j |j
dd<|jjj|dd«t|jj«}||_||_|jjjj|dd«|d rgt|j«}||_||_|jjj|d
d «|jjd gi«|jjd
gd
ddii«y)a
Patch Python Markdown with our own fenced block extension.
We don't attempt to protect against a user loading the `fenced_code` extension with this.
Most likely they will have issues, but they shouldn't have loaded them together in the first place :).
rr‡r€r‰r\ér0éPr~Úfenced_raw_blockgÍÌÌÌÌ ?@zpymdownx._bypassnormzpymdownx.highlightÚ_enabledFN)r“ÚSuperFencesBlockPreprocessorrUr�Ú extensionr€Ú highlightr`ÚregisterÚSuperFencesCodeBlockProcessorÚparserÚblockprocessorsÚSuperFencesRawBlockPreprocessorÚregisterExtensions)r&r�ÚfencedÚ
indented_codeÚ
raw_fenceds rr”z*SuperFencesCodeExtension.patch_fenced_rule%sA€ð—‘Ó"ˆä-¨d¯g©gÓ6ˆØˆŒ
ØˆÔØ × Ñ ˜AÑ ˜vÑ &¨-Ò 7Ø/5×/?Ñ/?ˆD× Ñ ˜QÑ   Ñ ,Ø �‰×Ñ×&Ñ& vÐ/BÀBÔGä5°d·g±g·n±nÓEˆ
Ø%ˆ
ÔØ"&ˆ
ÔØ �‰�‰×&Ñ&×/Ñ/°
¸vÀrÔJà �/Ò "ä8¸¿¹ÓAˆJØ &ˆJÔ Ø#'ˆJÔ Ø �G‰G× !Ñ !× *Ñ *¨:Ð7IÈ5Ô QØ �G‰G× &Ñ &Ð(>Ð'?ÀÔ Dð
�‰×"Ñ"Ð$8Ð#9Ð<PÐS]Ð_dÐReÐ;fÕgrcó8—|jj«yr7)r$r8r%s rÚresetzSuperFencesCodeExtension.resetFs€ð
�
‰
×ÑÕ r)
rrrrr'rŽr—r”rªÚ
__classcell__©r„s@rryryÝs"ø„Ù+ô*ò$
)ò"!òHhöB!rryc󾇗eZdZdZdZˆfd„Zd„Zd„Zd„Zd„Z d„Z
d „Z d
„Z d „Z
d „Zd
„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zdd„Zd„Zd„Zd„Zd„ZˆxZS)r�zæ
Preprocessor to find fenced code blocks.
Because this is done as a preprocessor, it might be too greedy.
We will stash the blocks code and restore if we mistakenly processed
text from an indented code block.
z<pre%s><code%s>%s</code></pre>có’•—t‰|�|«|jj|_d|_i|_d|_d|_y)r"FN) r‚r'rUÚ
tab_lengthÚtab_lenÚchecked_hl_settingsÚcodehilite_confÚchecked_quotesÚ quotes_logic)r&rUr„s €rr'z%SuperFencesBlockPreprocessor.__init__WsCø€ô ‰Ñ˜ÔØ—w‘w×)Ñ)ˆŒ Ø#(ˆÔ Ø!ˆÔØ#ˆÔØ!ˆÕrcó8—|j|j«S)zNormalize whitespace.)Ú
expandtabsr°)r&Útexts rÚ normalize_wsz)SuperFencesBlockPreprocessor.normalize_wsas€ð�‰˜tŸ|™|Ó,Ð,rcód—dj|D�cgc]}||jd‘Œc}«Scc}w)zDedent the fenced block lines.ú
N)rNÚws_virtual_len)r&ÚlinesÚlines rÚ
rebuild_blockz*SuperFencesBlockPreprocessor.rebuild_blockfs/€ð�y‰yÀÖG¸˜$˜t×2Ñ2Ð3Ò4ÒGÓHÐHùÒGs�-có¾—|jsFd|_|jjD]&}t|t«sŒd|_|j
S|j
S)z2Check if we are using the Quotes blockquote logic.T)r³rUÚregisteredExtensionsÚ
isinstancer r´)r&Úexts rÚis_pymdownx_quotes_logicz5SuperFencesBlockPreprocessor.is_pymdownx_quotes_logicks]€ð×"Ò"Ø"&ˆDÔ Ø—w‘w×3Ñ3ò
�ܘc¤?Õ3Ø(,�DÔ%ØØ× Ñ Ð ð 
ð× Ñ Ð rcó�—|j�s)d|_d}d|_|jjD]0}||_ |j «}|j
«|_nd|jjv|_ |jd}|r|n|d|_ |jjdd«|_
|jdd«|_|d|_|d |_|d
|_|d |_|d |_|jd
d«|_|jdd «|_|jdd«|_|jdd«|_|jdd«|_|jdd«|_|jdi«|_|jdd«|_|jdd«|_|jdd«|_|jdd«|_|jdd«|_|jdd«|_ yy#t$rY�ŒwxYw)z8Check for Highlight extension to get its configurations.TNÚ attr_listr}rFÚextend_pygments_langÚ
guess_langÚpygments_styleraÚ noclassesr^Úlinenums_styleÚtableÚlinenums_classÚlinenums_specialrÚlanguage_prefixz language-Úcode_attr_on_preÚ
auto_titleÚauto_title_mapÚ
line_spansr@Ú line_anchorsÚanchor_linenumsÚpygments_lang_classÚstripnlÚ default_lang)!r±Ú highlighterrUrÀÚ
highlight_extÚget_pymdownx_highlight_settingsÚget_pymdownx_highlighterÚAttributeErrorÚtreeprocessorsrÅr�r}r-rrÆrÇrÈrarÉr^rÊrÌrÍrÎrÏrÐrÑrÒrÓrÔrÕrÖr×)r&r�rÂr}s rrnz,SuperFencesBlockPreprocessor.get_hl_settingsvs!€ð×'Ó'Ø'+ˆDÔ $àˆFØ#ˆDÔ Ø—w‘w×3Ñ3ò
�Ø%(�Ô"ðØ ×@Ñ@ÓB�FØ'*×'CÑ'CÓ'E�DÔ$Ùð 
ð)¨D¯G©G×,BÑ,BÐBˆDŒNàŸ ™  KÑ0ˆIÙ*3™Y¸À Ñ9LˆDŒNà#'§;¡;§?¡?Ð3DÀeÓ#LˆDÔ Ø(.¯
©
Ð3IÈ4Ó(PˆDÔ %Ø$ \Ñ2ˆDŒOØ"(Ð)9Ñ":ˆDÔ Ø & ~Ñ 6ˆDÔ Ø# KÑ0ˆDŒNØ" :Ñ.ˆDŒMØ"(§*¡*Ð-=¸wÓ"GˆDÔ Ø"(§*¡*Ð-=¸zÓ"JˆDÔ Ø$*§J¡JÐ/AÀ2Ó$FˆDÔ !Ø#)§:¡:Ð.?ÀÓ#MˆDÔ Ø$*§J¡JÐ/AÀ5Ó$IˆDÔ !Ø$Ÿj™j¨°uÓ=ˆDŒOØ"(§*¡*Ð-=¸rÓ"BˆDÔ Ø$Ÿj™j¨°rÓ:ˆDŒOØ &§
¡
¨>¸2Ó >ˆDÔ Ø#)§:¡:Ð.?ÀÓ#GˆDÔ Ø'-§z¡zÐ2GÈÓ'OˆDÔ $Ø!Ÿ:™: i°Ó6ˆDŒLØ &§
¡
¨>¸4Ó @ˆDÕ ðM(øô&òÚðús¿%H8È8 IÉIcóÈ—d|_d|_d|_d|_d|_d|_g|_d|_d|_i|_ g|_
d|_ i|_ d|_
y)zReset the class variables.Nrr@)ÚwsÚws_lenr»ÚfenceÚlangÚ quote_levelr0Ú empty_linesÚ fence_endrTr;Úidr=r‰r%s rÚclearz"SuperFencesBlockPreprocessor.clear¡si€ðˆŒØˆŒ ØˆÔØˆŒ
؈Œ ØˆÔØˆŒ ØˆÔØˆŒØˆŒ ؈Œ ؈ŒØˆŒ
؈�rcó—||zj«dk(r4|xjdz
c_|jj||z«yt |«|j
k7r|dk7r|j
«y|jj|«�'|jd«s |j||||«yd|_|jj||z«y#t$r‚t$r|j
«YywxYw)zEvaluate a normal fence.r@rN)r
rr)
Ústriprär0rŒr*r»rçrårerbÚprocess_nested_blockrÚ Exception)r&rßÚcontentÚstartÚends rÚ
eval_fencez'SuperFencesBlockPreprocessor.eval_fence³sâ€ð
�‰L× Ñ Ó ! RÒ 'à × Ò  Ñ !Õ Ø �I‰I× Ñ ˜R '™\Õ *Ü
�‹W˜×+Ñ+Ò
+°¸2²
à �J‰J�LØ
�^‰^×
!Ñ
! 'Ó
*Ð
6¸w×?QÑ?QÐR]Ô?^ð
Ø×)Ñ)¨"¨g°u¸cÕBð !ˆDÔ Ø �I‰I× Ñ ˜R '™\Õ *øô(ò
ØÜò
Ø—
‘
– ð
úsÂ&C!Ã!"DÄDcóÀ—|j«}||jkDr|j«y|r ||jk7r|j«y|dk(r4|jj ||z«|xj
dz
c_yt
|«|jkr|j«y|j
r ||jkr|j«y|jj|«� |j||||«yd|_|jj ||z«y#t$r‚t$r|j«YywxYw)z#Evaluate fence inside a blockquote.Nr@rr)
rÃrãrçr0rŒrär*ràrårerêrrë)r&rßrìrãrírîr´s rÚ eval_quotedz(SuperFencesBlockPreprocessor.eval_quotedÊs#€ð×4Ñ4Ó6ˆ à ˜×)Ñ)Ò )à �J‰JŒLØ á ˜K¨4×+;Ñ+;Ò;à �J‰JŒLØ à �bŠ=à �I‰I× Ñ ˜R '™\Ô *Ø × Ò  Ñ !Ö Ü
�‹W�t—{‘{Ò
"à �J‰J�LØ
×
Ò
 +°×0@Ñ0@Ò"@ð
�J‰J�LØ
�^‰^×
!Ñ
! 'Ó
*Ð
6ð
Ø×)Ñ)¨"¨g°u¸cÕBð !ˆDÔ Ø �I‰I× Ñ ˜R '™\Õ *øô(ò
ØÜò
Ø—
‘
– ð
úsÃ=D8Ä8"EÅEc ó—||j|«z|_d}|j�ˆ||z
dz
|_|j|j |j
«|j |j|j|j|j|jr |jni¬«}|�?|j|jdj|j
««dz|||«|j«y)ú)Process the contents of the nested block.Né)rqrRrUrTr;r<r=rº)r¸Úlastr‰Ú
line_countr¾r0rârUrTr;rærÅr=Ú_storerNrç©r&rßrìrírîr0s rrêz1SuperFencesBlockPreprocessor.process_nested_blockñsÑ€ð˜×*Ñ*¨7Ó3Ñ3ˆŒ ØˆØ �>‰>Ð %Ø! E™k¨A™oˆDŒOà—>‘>Ø×&Ñ& t§y¡yÓ1ØŸ™Ø—7‘7ØŸ ™ ØŸ ™ ØŸ™Ø$(§N¢N�d—j’j¸ð"óˆDð Ð Ø �K‰K˜×)Ñ)¨$¯)©)°D·I±IÓ*>Ó?À$ÑFÈÈeÐUXÔ YØ �
‰
� rcój—t|«}|dkrd}|S||jkDr|jdz}|S)a
Normalize highlight line number.
Clamp outrages numbers. Numbers out of range will be only one increment out range.
This prevents people from create massive buffers of line numbers that exceed real
number of code lines.
rr)Úintrö)r&Únumbers rÚnormalize_hl_linez.SuperFencesBlockPreprocessor.normalize_hl_linesA€ô�V“ˆØ �AŠ:؈Fðˆ
ð�d—o‘oÒ
%Ø—_‘_ qÑ(ˆF؈
rc
ó†—g}|r·|j«D]¤}|jd«D�cgc]}|j|«‘Œ}}t|«dkDr:|d|dksŒJ|jt t |d|ddz«««Œxd|dcxkr|j ksŒ‘nŒ”|j|«Œ¦|Scc}w)zParse the lines to highlight.ú-rr)Úsplitrür*ÚextendÚlistÚrangerö)r&r]r¼ÚentryÚeÚ
line_ranges rÚparse_hl_linesz+SuperFencesBlockPreprocessor.parse_hl_liness¸€ðˆÙ Ø!Ÿ™Ó)ò
-�ØAFÇÁÈSÓAQÖR¸A˜d×4Ñ4°QÕ7ÐR�