Ë
    ýÄ®iïY  ã                  óú  — U d dl mZ d dlZd dlmZ d dlmZ ej                  dk\  rd dlm	Z	 n	 d dl
m	Z	 dd	lmZmZmZmZmZmZmZmZmZmZ dd
lmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& eez  ez  ez  ez  Z'de(d<    G d„ d«      Z)e	 G d„ de)«      «       Z*e	 G d„ de)«      «       Z+e	 G d„ de)«      «       Z,e	 G d„ de)«      «       Z-e	 G d„ de)«      «       Z.e	 G d„ de)«      «       Z/e	 G d„ de)«      «       Z0e	 G d„ de)«      «       Z1e	 G d„ d e)«      «       Z2 ed!¬"«      	 	 	 	 	 	 d)d#„«       Z3 e4d$„ e)jk                  «       D «       «      Z6d%e(d&<    ed'¬"«      	 d*	 	 	 	 	 	 	 d+d(„«       Z7y# e$ r d„ Z	Y �ŒDw xY w),é    )ÚannotationsN)Ú	lru_cache)Ú	getLogger)é   é   )Úfinalc                ó   — | S ©N© )Úclss    úH/var/www/html/venv/lib/python3.12/site-packages/charset_normalizer/md.pyr   r      s   € ØˆJó    é   )
ÚCOMMON_SAFE_ASCII_CHARACTERSÚTRACEÚUNICODE_SECONDARY_RANGE_KEYWORDÚ_ACCENTUATEDÚ_CJKÚ_HANGULÚ	_HIRAGANAÚ	_KATAKANAÚ_LATINÚ_THAI)Ú_character_flagsÚis_accentuatedÚ	is_arabicÚis_arabic_isolated_formÚis_case_variableÚis_cjkÚis_emoticonÚis_latinÚis_punctuationÚis_separatorÚ	is_symbolÚis_unprintableÚremove_accentÚunicode_rangeÚis_cjk_uncommonÚintÚ_GLYPH_MASKc                  ó>   — e Zd ZdZdZdd„Zd	d„Zd
d„Zedd„«       Z	y)ÚMessDetectorPluginzy
    Base abstract class used for mess detection plugins.
    All detectors MUST extend and implement given methods.
    r   c                ó   — t         ‚)z@
        Determine if given character should be fed in.
        ©ÚNotImplementedError©ÚselfÚ	characters     r   ÚeligiblezMessDetectorPlugin.eligible<   ó
   € ô "Ð!r   c                ó   — t         ‚)z‰
        The main routine to be executed upon character.
        Insert the logic in witch the text would be considered chaotic.
        r.   r0   s     r   ÚfeedzMessDetectorPlugin.feedB   s
   € ô
 "Ð!r   c                ó   — t         ‚)zB
        Permit to reset the plugin to the initial state.
        r.   ©r1   s    r   ÚresetzMessDetectorPlugin.resetI   r4   r   c                ó   — t         ‚)z…
        Compute the chaos ratio based on what your feed() has seen.
        Must NOT be lower than 0.; No restriction gt 0.
        r.   r8   s    r   ÚratiozMessDetectorPlugin.ratioO   s
   € ô "Ð!r   N©r2   ÚstrÚreturnÚbool©r2   r=   r>   ÚNone©r>   rA   ©r>   Úfloat)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r3   r6   r9   Úpropertyr;   r   r   r   r,   r,   4   s1   „ ñð
 €Ió"ó"ó"ð ò"ó ñ"r   r,   c                  óB   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zedd„«       Z	y)Ú TooManySymbolOrPunctuationPlugin©Ú_punctuation_countÚ_symbol_countÚ_character_countÚ_last_printable_charÚ_frenzy_symbol_in_wordc                óJ   — d| _         d| _        d| _        d | _        d| _        y ©Nr   FrM   r8   s    r   Ú__init__z)TooManySymbolOrPunctuationPlugin.__init__b   s*   € Ø'(ˆÔØ"#ˆÔØ%&ˆÔà04ˆÔ!Ø,1ˆÕ#r   c                ó"   — |j                  «       S r
   ©Úisprintabler0   s     r   r3   z)TooManySymbolOrPunctuationPlugin.eligiblej   ó   € Ø×$Ñ$Ó&Ð&r   c                ó0  — | xj                   dz  c_         || j                  k7  rk|t        vrct        |«      r| xj                  dz  c_        || _        y |j                  «       s+t        |«      r t        |«      s| xj                  dz  c_        || _        y )Nr   é   )	rP   rQ   r   r"   rN   Úisdigitr$   r    rO   r0   s     r   r6   z%TooManySymbolOrPunctuationPlugin.feedm   s†   € Ø×Ò Ñ"Õð ˜×2Ñ2Ò2ØÔ!=Ñ=ä˜iÔ(Ø×'Ò'¨1Ñ,Õ'ð %.ˆÕ!ð ×%Ñ%Ô'Ü˜iÔ(Ü# IÔ.à×"Ò" aÑ'Õ"à$-ˆÕ!r   c                ó.   — d| _         d| _        d| _        y ©Nr   )rN   rP   rO   r8   s    r   r9   z&TooManySymbolOrPunctuationPlugin.reset   s   € Ø"#ˆÔØ !ˆÔØˆÕr   c                ó€   — | j                   dk(  ry| j                  | j                  z   | j                   z  }|dk\  r|S dS )Nr   ç        ç333333Ó?)rP   rN   rO   )r1   Úratio_of_punctuations     r   r;   z&TooManySymbolOrPunctuationPlugin.ratio„   sO   € à× Ñ  AÒ%Øð ×#Ñ# d×&8Ñ&8Ñ8Ø×!Ñ!ñ'"Ðð (<¸sÒ'BÐ#ÐKÈÐKr   NrB   r<   r@   rC   ©
rE   rF   rG   rI   rU   r3   r6   r9   rJ   r;   r   r   r   rL   rL   X   s3   „ ð€Ió2ó'ó.ó$ð
 òLó ñLr   rL   c                  óB   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zedd„«       Z	y)ÚTooManyAccentuatedPlugin©rP   Ú_accentuated_countc                ó    — d| _         d| _        y r^   rf   r8   s    r   rU   z!TooManyAccentuatedPlugin.__init__”   s   € Ø%&ˆÔØ'(ˆÕr   c                ó"   — |j                  «       S r
   )Úisalphar0   s     r   r3   z!TooManyAccentuatedPlugin.eligible˜   s   € Ø× Ñ Ó"Ð"r   c                óp   — | xj                   dz  c_         t        |«      r| xj                  dz  c_        y y ©Nr   )rP   r   rg   r0   s     r   r6   zTooManyAccentuatedPlugin.feed›   s1   € Ø×Ò Ñ"Õä˜)Ô$Ø×#Ò# qÑ(Ö#ð %r   c                ó    — d| _         d| _        y r^   rf   r8   s    r   r9   zTooManyAccentuatedPlugin.reset¡   s   € Ø !ˆÔØ"#ˆÕr   c                óf   — | j                   dk  ry| j                  | j                   z  }|dk\  r|S dS )Nr   r`   gffffffÖ?rf   )r1   Úratio_of_accentuations     r   r;   zTooManyAccentuatedPlugin.ratio¥   s=   € à× Ñ  1Ò$Øà'+×'>Ñ'>À×AVÑAVÑ'VÐØ(=ÀÒ(EÐ$ÐNÈ3ÐNr   NrB   r<   r@   rC   rc   r   r   r   re   re   �   s1   „ à:€Ió)ó#ó)ó$ð òOó ñOr   re   c                  óB   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zedd„«       Z	y)ÚUnprintablePlugin©Ú_unprintable_countrP   c                ó    — d| _         d| _        y r^   rr   r8   s    r   rU   zUnprintablePlugin.__init__²   s   € Ø'(ˆÔØ%&ˆÕr   c                 ó   — y©NTr   r0   s     r   r3   zUnprintablePlugin.eligible¶   ó   € Ør   c                ón   — t        |«      r| xj                  dz  c_        | xj                  dz  c_        y rl   )r%   rs   rP   r0   s     r   r6   zUnprintablePlugin.feed¹   s,   € Ü˜)Ô$Ø×#Ò# qÑ(Õ#Ø×Ò Ñ"Ör   c                ó   — d| _         y r^   )rs   r8   s    r   r9   zUnprintablePlugin.reset¾   s
   € Ø"#ˆÕr   c                óZ   — | j                   dk(  ry| j                  dz  | j                   z  S )Nr   r`   r   )rP   rs   r8   s    r   r;   zUnprintablePlugin.ratioÁ   s/   € à× Ñ  AÒ%Øà×'Ñ'¨!Ñ+¨t×/DÑ/DÑDÐDr   NrB   r<   r@   rC   rc   r   r   r   rq   rq   ®   s1   „ à:€Ió'óó#ó
$ð òEó ñEr   rq   c                  óB   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zedd„«       Z	y)ÚSuspiciousDuplicateAccentPlugin©Ú_successive_countrP   Ú_last_latin_characterÚ_last_was_accentuatedc                ó<   — d| _         d| _        d | _        d| _        y rT   r}   r8   s    r   rU   z(SuspiciousDuplicateAccentPlugin.__init__Ò   s"   € Ø&'ˆÔØ%&ˆÔà15ˆÔ"Ø+0ˆÕ"r   c                ó<   — |j                  «       xr t        |«      S r
   )rj   r!   r0   s     r   r3   z(SuspiciousDuplicateAccentPlugin.eligibleÙ   s   € Ø× Ñ Ó"Ò:¤x°	Ó':Ð:r   c                ó~  — | xj                   dz  c_         t        |«      }| j                  �ƒ|r�| j                  ru|j	                  «       r/| j                  j	                  «       r| xj
                  dz  c_        t        |«      t        | j                  «      k(  r| xj
                  dz  c_        || _        || _        y rl   )rP   r   r   r€   Úisupperr~   r&   )r1   r2   Úcurrent_accentuateds      r   r6   z$SuspiciousDuplicateAccentPlugin.feedÜ   s�   € Ø×Ò Ñ"ÕÜ$2°9Ó$=Ðà×&Ñ&Ð2Ù#Ø×*Ò*à× Ñ Ô" t×'AÑ'A×'IÑ'IÔ'KØ×&Ò&¨!Ñ+Õ&ä˜YÓ'¬=¸×9SÑ9SÓ+TÒTØ×&Ò&¨!Ñ+Õ&Ø%.ˆÔ"Ø%8ˆÕ"r   c                ó<   — d| _         d| _        d | _        d| _        y rT   r}   r8   s    r   r9   z%SuspiciousDuplicateAccentPlugin.resetì   s"   € Ø!"ˆÔØ !ˆÔØ%)ˆÔ"Ø%*ˆÕ"r   c                óZ   — | j                   dk(  ry| j                  dz  | j                   z  S )Nr   r`   r[   )rP   r~   r8   s    r   r;   z%SuspiciousDuplicateAccentPlugin.ratioò   s/   € à× Ñ  AÒ%Øà×&Ñ&¨Ñ*¨d×.CÑ.CÑCÐCr   NrB   r<   r@   rC   rc   r   r   r   r|   r|   É   s3   „ ð€Ió1ó;ó9ó +ð òDó ñDr   r|   c                  óB   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zedd„«       Z	y)ÚSuspiciousRange©Ú"_suspicious_successive_range_countrP   Ú_last_printable_seenÚ_last_printable_rangec                ó<   — d| _         d| _        d | _        d | _        y r^   rŠ   r8   s    r   rU   zSuspiciousRange.__init__  s"   € Ø78ˆÔ/Ø%&ˆÔØ04ˆÔ!Ø15ˆÕ"r   c                ó"   — |j                  «       S r
   rW   r0   s     r   r3   zSuspiciousRange.eligible	  rY   r   c                óf  — | xj                   dz  c_         |j                  «       st        |«      s|t        v rd | _        d | _        y | j                  €|| _        t        |«      | _        y | j
                  }t        |«      }t        ||«      r| xj                  dz  c_        || _        || _        y rl   )	rP   Úisspacer"   r   rŒ   r�   r'   Ú is_suspiciously_successive_ranger‹   )r1   r2   Úunicode_range_aÚunicode_range_bs       r   r6   zSuspiciousRange.feed  s©   € Ø×Ò Ñ"Õð ×ÑÔÜ˜iÔ(ØÔ8Ñ8à(,ˆDÔ%Ø)-ˆDÔ&Øà×$Ñ$Ð,Ø(1ˆDÔ%Ü)6°yÓ)AˆDÔ&Øà&*×&@Ñ&@ˆÜ&3°IÓ&>ˆä+¨O¸_ÔMØ×3Ò3°qÑ8Õ3à$-ˆÔ!Ø%4ˆÕ"r   c                ó<   — d| _         d| _        d | _        d | _        y r^   )rP   r‹   rŒ   r�   r8   s    r   r9   zSuspiciousRange.reset&  s"   € Ø !ˆÔØ23ˆÔ/Ø$(ˆÔ!Ø%)ˆÕ"r   c                ó^   — | j                   dk  ry| j                  dz  | j                   z  }|S )Né   r`   r[   )rP   r‹   )r1   Úratio_of_suspicious_range_usages     r   r;   zSuspiciousRange.ratio,  s<   € à× Ñ  BÒ&Øð ×3Ñ3°aÑ7Ø×!Ñ!ñ2"Ð'ð /Ð.r   NrB   r<   r@   rC   rc   r   r   r   r‰   r‰   ú   s1   „ ð€Ió6ó'ó5ó4*ð ò/ó ñ/r   r‰   c                  óB   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zedd„«       Z	y)ÚSuperWeirdWordPlugin©Ú_word_countÚ_bad_word_countÚ_foreign_long_countÚ_is_current_word_badÚ_foreign_long_watchrP   Ú_bad_character_countÚ_buffer_lengthÚ_buffer_last_charÚ_buffer_last_char_accentuatedÚ_buffer_accent_countÚ_buffer_glyph_countÚ_buffer_upper_countc                óº   — d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d | _        d| _	        d| _
        d| _        d| _        y rT   r›   r8   s    r   rU   zSuperWeirdWordPlugin.__init__J  sj   € Ø !ˆÔØ$%ˆÔØ()ˆÔ à*/ˆÔ!Ø).ˆÔ à%&ˆÔØ)*ˆÔ!à#$ˆÔØ-1ˆÔØ38ˆÔ*Ø)*ˆÔ!Ø()ˆÔ Ø()ˆÕ r   c                 ó   — yrv   r   r0   s     r   r3   zSuperWeirdWordPlugin.eligible\  rw   r   c                óè  — |j                  «       rÂ| xj                  dz  c_        || _        |j                  «       r| xj                  dz  c_        t        |«      }t        |t        z  «      }|| _        |r| xj                  dz  c_	        | j                  s|t        z  r|r|t        z  sd| _
        |t        z  r| xj                  dz  c_        y | j                  sy |j                  «       st        |«      st!        |«      �r | j                  �r“| xj"                  dz  c_        | j                  }| xj$                  |z  c_        |dk\  r—| j                  |z  dk\  rd| _        n}| j                  rF| j                  j                  «       r,| j                  |k7  r| xj(                  dz  c_        d| _        n+| j                  dk(  rd| _        | xj(                  dz  c_        |dk\  rM| j                  rA| j                  dkD  xr | j                  |z  dk  }|s| xj(                  dz  c_        d| _        | j&                  r1| xj*                  dz  c_        | xj,                  |z  c_        d| _        d| _
        d| _        d | _        d| _        d| _	        d| _        d| _        y |d	vrH|j/                  «       s7t1        |«      r+d| _        | xj                  dz  c_        || _        d| _        y y y y )
Nr   Té   ç      à?é   r   ra   F>   Ú-Ú<Ú=Ú>Ú_Ú|Ú~)rj   r¢   r£   r„   r§   r   r?   r   r¤   r¥   r    r   r*   r¦   r‘   r"   r#   rœ   rP   rŸ   rž   r�   r¡   r\   r$   )r1   r2   ÚflagsÚchar_accentuatedÚbuffer_lengthÚprobable_camel_caseds         r   r6   zSuperWeirdWordPlugin.feed_  s¾  € Ø×ÑÔØ×Ò 1Ñ$ÕØ%.ˆDÔ"à× Ñ Ô"Ø×(Ò(¨AÑ-Õ(ä)¨)Ó4ˆEÜ%)¨%´,Ñ*>Ó%?ÐØ1AˆDÔ.áØ×)Ò)¨QÑ.Õ)à×,Ò,Ø¤&š.Ñ-=Ø¤Ò,à+/�Ô(Ø”{Ò"Ø×(Ò(¨AÑ-Õ(ØØ×"Ò"Øà×ÑÔ¤>°)Ô#<ÄÈYÕ@WØ×!Ó!Ø×Ò Ñ!ÕØ!%×!4Ñ!4ˆMà×!Ò! ]Ñ2Õ!à Ò!Ø×,Ñ,¨}Ñ<ÀÒCØ04�DÕ-ð ×6Ò6Ø×.Ñ.×6Ñ6Ô8Ø×0Ñ0°MÒAà×,Ò,°Ñ1Õ,Ø04�DÕ-Ø×-Ñ-°Ò2Ø04�DÔ-Ø×,Ò,°Ñ1Õ,Ø Ò" t×'?Ò'?à×,Ñ,¨qÑ0ò HØ×0Ñ0°=Ñ@ÀCÑGð %ñ
 ,Ø×,Ò,°Ñ1Õ,Ø04�DÔ-à×(Ò(Ø×$Ò$¨Ñ)Õ$Ø×)Ò)¨]Ñ:Õ)Ø,1�Ô)à',ˆDÔ$Ø"#ˆDÔØ%)ˆDÔ"Ø16ˆDÔ.Ø()ˆDÔ%Ø'(ˆDÔ$Ø'(ˆDÕ$àÐ@Ñ@Ø×%Ñ%Ô'Ü˜)Ô$à(,ˆDÔ%Ø×Ò 1Ñ$ÕØ%.ˆDÔ"Ø16ˆDÕ.ð %ð (ð Ar   c                óº   — d| _         d | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        y rT   )r¢   r£   r¤   rŸ   r    r�   rœ   rP   r¡   rž   r¥   r¦   r§   r8   s    r   r9   zSuperWeirdWordPlugin.reset¯  sj   € ØˆÔØ!%ˆÔØ-2ˆÔ*Ø$)ˆÔ!Ø#(ˆÔ Ø ˆÔØˆÔØ !ˆÔØ$%ˆÔ!Ø#$ˆÔ Ø$%ˆÔ!Ø#$ˆÔ Ø#$ˆÕ r   c                ór   — | j                   dk  r| j                  dk(  ry| j                  | j                  z  S )Né
   r   r`   )rœ   rž   r¡   rP   r8   s    r   r;   zSuperWeirdWordPlugin.ratio¾  s7   € à×Ñ˜rÒ! d×&>Ñ&>À!Ò&CØà×(Ñ(¨4×+@Ñ+@Ñ@Ð@r   NrB   r<   r@   rC   rc   r   r   r   rš   rš   8  s5   „ ð€Ió *ó$óN7ó`%ð òAó ñAr   rš   c                  óF   — e Zd ZdZdZd	d„Zd
d„Zdd„Zd	d„Ze	dd„«       Z
y)ÚCjkUncommonPluginz<
    Detect messy CJK text that probably means nothing.
    ©rP   Ú_uncommon_countc                ó    — d| _         d| _        y r^   r¾   r8   s    r   rU   zCjkUncommonPlugin.__init__Î  s   € Ø%&ˆÔØ$%ˆÕr   c                ó   — t        |«      S r
   )r   r0   s     r   r3   zCjkUncommonPlugin.eligibleÒ  s   € Ü�iÓ Ð r   c                óp   — | xj                   dz  c_         t        |«      r| xj                  dz  c_        y y rl   )rP   r(   r¿   r0   s     r   r6   zCjkUncommonPlugin.feedÕ  s4   € Ø×Ò Ñ"Õä˜9Ô%Ø× Ò  AÑ%Õ Øð &r   c                ó    — d| _         d| _        y r^   r¾   r8   s    r   r9   zCjkUncommonPlugin.resetÜ  s   € Ø !ˆÔØ ˆÕr   c                ól   — | j                   dk  ry| j                  | j                   z  }|dkD  r|dz  S dS )Nr   r`   r¬   r»   r¾   )r1   Úuncommon_form_usages     r   r;   zCjkUncommonPlugin.ratioà  sD   € à× Ñ  1Ò$Øà%)×%9Ñ%9¸D×<QÑ<QÑ%QÐð ,?ÀÒ+DÐ" RÑ'ÐMÈ#ÐMr   NrB   r<   r@   rC   )rE   rF   rG   rH   rI   rU   r3   r6   r9   rJ   r;   r   r   r   r½   r½   Æ  s8   „ ñð 8€Ió&ó!óó!ð òNó ñNr   r½   c                  óB   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zedd„«       Z	y)ÚArchaicUpperLowerPlugin©Ú_bufÚ_character_count_since_last_sepÚ_successive_upper_lower_countÚ#_successive_upper_lower_count_finalrP   Ú_last_alpha_seenÚ_current_ascii_onlyc                óf   — d| _         d| _        d| _        d| _        d| _        d | _        d| _        y )NFr   TrÈ   r8   s    r   rU   z ArchaicUpperLowerPlugin.__init__ø  s9   € ØˆŒ	à45ˆÔ,à23ˆÔ*Ø89ˆÔ0à%&ˆÔà,0ˆÔØ)-ˆÕ r   c                 ó   — yrv   r   r0   s     r   r3   z ArchaicUpperLowerPlugin.eligible  rw   r   c                óD  — |j                  «       xr t        |«      }| }|r’| j                  dkD  rƒ| j                  dk  r;|j                  «       s+| j                  s| xj
                  | j                  z  c_        d| _        d| _        d | _        d| _        | xj                  dz  c_	        d| _        y | j                  r|j                  «       sd| _        | j                  �Œ|j                  «       r| j                  j                  «       s*|j                  «       rK| j                  j                  «       r1| j                  r| xj                  dz  c_        d| _        nd| _        nd| _        | xj                  dz  c_	        | xj                  dz  c_        || _        y )Nr   é@   Fr   Tr[   )rj   r   rÊ   r\   rÎ   rÌ   rË   rÍ   rÉ   rP   Úisasciir„   Úislower)r1   r2   Úis_concernedÚ	chunk_seps       r   r6   zArchaicUpperLowerPlugin.feed  sf  € Ø&×.Ñ.Ó0ÒPÔ5EÀiÓ5PˆØ*Ð*ˆ	á˜×=Ñ=ÀÒAà×4Ñ4¸Ò:Ø!×)Ñ)Ô+Ø×0Ò0à×8Ò8Ø×6Ñ6ñÕ8ð 23ˆDÔ.Ø34ˆDÔ0Ø$(ˆDÔ!ØˆDŒIØ×!Ò! QÑ&Õ!Ø'+ˆDÔ$àà×#Ò#¨I×,=Ñ,=Ô,?Ø',ˆDÔ$à× Ñ Ð,Ø×!Ñ!Ô#¨×(=Ñ(=×(EÑ(EÔ(GØ×!Ñ!Ô#¨×(=Ñ(=×(EÑ(EÔ(Gà—9’9Ø×6Ò6¸!Ñ;Õ6Ø %�D•Ià $�D•Ià!�”	à×Ò Ñ"ÕØ×,Ò,°Ñ1Õ,Ø )ˆÕr   c                óf   — d| _         d| _        d| _        d| _        d | _        d| _        d| _        y )Nr   FT)rP   rÊ   rË   rÌ   rÍ   rÉ   rÎ   r8   s    r   r9   zArchaicUpperLowerPlugin.reset2  s9   € Ø !ˆÔØ/0ˆÔ,Ø-.ˆÔ*Ø34ˆÔ0Ø $ˆÔØˆŒ	Ø#'ˆÕ r   c                óT   — | j                   dk(  ry| j                  | j                   z  S )Nr   r`   )rP   rÌ   r8   s    r   r;   zArchaicUpperLowerPlugin.ratio;  s*   € à× Ñ  AÒ%Øà×7Ñ7¸$×:OÑ:OÑOÐOr   NrB   r<   r@   rC   rc   r   r   r   rÇ   rÇ   ì  s4   „ ð€Ió.óó(*óT(ð òPó ñPr   rÇ   c                  óB   — e Zd ZdZdd„Zdd„Zd	d„Zd
d„Zedd„«       Z	y)ÚArabicIsolatedFormPlugin©rP   Ú_isolated_form_countc                ó    — d| _         d| _        y r^   rÛ   r8   s    r   rU   z!ArabicIsolatedFormPlugin.__init__G  s   € Ø%&ˆÔØ)*ˆÕ!r   c                ó    — d| _         d| _        y r^   rÛ   r8   s    r   r9   zArabicIsolatedFormPlugin.resetK  s   € Ø !ˆÔØ$%ˆÕ!r   c                ó   — t        |«      S r
   )r   r0   s     r   r3   z!ArabicIsolatedFormPlugin.eligibleO  s   € Ü˜Ó#Ð#r   c                óp   — | xj                   dz  c_         t        |«      r| xj                  dz  c_        y y rl   )rP   r   rÜ   r0   s     r   r6   zArabicIsolatedFormPlugin.feedR  s1   € Ø×Ò Ñ"Õä" 9Ô-Ø×%Ò%¨Ñ*Ö%ð .r   c                óX   — | j                   dk  ry| j                  | j                   z  }|S )Nr   r`   rÛ   )r1   Úisolated_form_usages     r   r;   zArabicIsolatedFormPlugin.ratioX  s0   € à× Ñ  1Ò$Øà%)×%>Ñ%>À×AVÑAVÑ%VÐà"Ð"r   NrB   r<   r@   rC   )
rE   rF   rG   rI   rU   r9   r3   r6   rJ   r;   r   r   r   rÚ   rÚ   C  s/   „ à<€Ió+ó&ó$ó+ð ò#ó ñ#r   rÚ   é   )Úmaxsizec                ó–  — | �|€y| |k(  ryd| v rd|v ryd| v sd|v ryd| v sd|v r	d| v sd|v ry| j                  d«      |j                  d«      }}|D ]  }|t        v rŒ||v sŒ y | dv |dv }}|s|r	d| v sd|v ry|r|ryd	| v sd	|v rd| v sd|v ry| d
k(  s|d
k(  ryd| v sd|v s| dv r!|dv rd| v sd|v ryd| v sd|v ry| d
k(  s|d
k(  ryy)za
    Determine if two Unicode range seen next to each other can be considered as suspicious.
    TFÚLatinÚ	EmoticonsÚ	CombiningÚ )ÚHiraganaÚKatakanaÚCJKÚHangulzBasic Latin)rë   rê   ÚPunctuationÚForms)Úsplitr   )r“   r”   Úkeywords_range_aÚkeywords_range_bÚelÚrange_a_jp_charsÚrange_b_jp_charss          r   r’   r’   b  s‚  € ð Ð /Ð"9Øà˜/Ò)Øà�/Ñ! g°Ñ&@Øà�oÑ%¨¸Ñ)GØð 	�?Ñ" g°Ñ&@Ø�Ñ&¨+¸Ñ*Hàð 	×Ñ˜cÓ"Ø×Ñ˜cÓ"ð 'Ðó
 ˆØÔ0Ñ0ØØÐ!Ò!Ùð	 ð 	ð
ð	
ð
 	Ð3Ð3ð 'Ðñ 	Ñ,Ø�Ñ  E¨_Ñ$<àÙÑ,Øà�?Ñ" h°/Ñ&AØ�OÑ# u°Ñ'?ØØ˜mÒ+¨À-Ò/OØð 	�Ñ  E¨_Ñ$<ØÐ3Ñ3ØÐ7Ñ7à˜OÑ+¨}ÀÑ/OØØ�oÑ%¨°OÑ)CØØ˜mÒ+¨À-Ò/OØàr   c              #  ó    K  — | ]  }|–— Œ y ­wr
   r   )Ú.0Úmd_classs     r   Ú	<genexpr>rù   ­  s   è ø€ ð @Ù@�„HÑ@ùs   ‚z$tuple[type[MessDetectorPlugin], ...]Ú_DETECTOR_CLASSESi   c           	     ó  — t         D �cg c]	  } |«       ‘Œ }}t        | «      }|dk  rd}n
|dk  rd}nd}t        d||«      D ]R  }| |||z    D ],  }|D ]%  }	|	j                  |«      sŒ|	j	                  |«       Œ' Œ. t        d„ |D «       «      }
|
|k\  sŒR n= |D ]%  }	|	j                  d«      sŒ|	j	                  d«       Œ' t        d	„ |D «       «      }
|r�t        d
«      }|j                  t        d|› d|
› d|› �«       |dkD  r8|j                  t        d| dd › �«       |j                  t        d| dd › �«       |D ]1  }|j                  t        |j                  › d|j                  › �«       Œ3 t        |
d«      S c c}w )zw
    Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
    iÿ  é    rã   rÒ   é€   r   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr
   ©r;   ©r÷   Údts     r   rù   zmess_ratio.<locals>.<genexpr>Ì  ó   è ø€ Ð;±¨2˜bŸh�h±ùó   ‚Ú
c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr
   rÿ   r   s     r   rù   zmess_ratio.<locals>.<genexpr>Õ  r  r  Úcharset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=é   zStarting with: NzEnding with: iðÿÿÿz: r   )rú   ÚlenÚranger3   r6   Úsumr   Úlogr   Ú	__class__r;   Úround)Údecoded_sequenceÚmaximum_thresholdÚdebugrø   Ú	detectorsÚseq_lenÚstepÚblock_startr2   ÚdetectorÚmean_mess_ratioÚloggerr  s                r   Ú
mess_ratior  ²  s²  € õ GXÓ*XÑFW¸(©8­:ÐFW€IÐ*Xô Ð'Ó(€Gà�‚}Ø‰Ø	�4ŠØ‰àˆä˜Q ¨Ö.ˆØ)¨+¸ÀdÑ8JÓKˆIÛ%�Ø×$Ñ$ YÕ/Ø—M‘M )Õ,ñ &ð Lô
 Ñ;±Ó;Ó;ˆàÐ/Ó/Ùð /ó "ˆHØ× Ñ  Õ&Ø—‘˜dÕ#ð "ô Ñ;±Ó;Ó;ˆáÜÐ/Ó0ˆà�
‰
Üð1Ø15°Ð6GÈÐGXð Y!Ø!2Ð 3ð5ô	
ð �RŠ<Ø�J‰J”u Ð0@ÀÀ"Ð0EÐ/FÐGÔHØ�J‰J”u Ð.>¸s¸uÐ.EÐ-FÐGÔHãˆBØ�J‰J”u §¡ ¨b°·±°
Ð;Õ<ð ô � !Ó$Ð$ùò] +Ys   ‰E?)r“   ú
str | Noner”   r  r>   r?   )gš™™™™™É?F)r  r=   r  rD   r  r?   r>   rD   )8Ú
__future__r   ÚsysÚ	functoolsr   Úloggingr   Úversion_infoÚtypingr   Útyping_extensionsÚImportErrorÚconstantr   r   r   r   r   r   r   r   r   r   Úutilsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r*   Ú__annotations__r,   rL   re   rq   r|   r‰   rš   r½   rÇ   rÚ   r’   ÚtupleÚ__subclasses__rú   r  r   r   r   Ú<module>r'     sQ  ðÞ "ã 
Ý Ý à×Ñ�vÒÞðÝ+÷÷ ÷ ÷÷ ÷ ÷ ñ ð& ˜'‘> IÑ-°	Ñ9¸EÑA€ˆSÓ A÷!"ñ !"ðH ô4LÐ'9ó 4Ló ð4Lðn ôOÐ1ó Oó ðOð: ôEÐ*ó Eó ðEð4 ô-DÐ&8ó -Dó ð-Dð` ô:/Ð(ó :/ó ð:/ðz ôJAÐ-ó JAó ðJAðZ ô"NÐ*ó "Nó ð"NðJ ôSPÐ0ó SPó ðSPðl ô#Ð1ó #ó ð#ñ< �4ÔðFØðFØ2<ðFà	òFó ðFñT ;@ñ @Ø/×>Ñ>Ô@ó@ó ;Ð Ð7ó ñ
 �4ÔàINð5%Øð5%Ø.3ð5%ØBFð5%à
ò5%ó ñ5%øðO ò õ	ðús   ¯E. Å.E:Å9E: