§
    öyIfF@  ã                  óz  — d Z ddlmZ ddlZddlZddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ ddlmZ erdd	lmZ 	 ddlZdd
lmZmZmZmZmZmZ dZnX# e$ rP dZdZ G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z	 	 	 d=d>d„ZY nw xY wd?d „Zd@d#„ZdAd'„Z e¦   «         Z G d(„ d)e¦  «        Z  G d*„ d+e¦  «        Z! G d,„ d-e¦  «        Z" G d.„ d/e"¦  «        Z# G d0„ d1e"¦  «        Z$ G d2„ d3e¦  «        Z% ej&        d4¦  «        Z'dBd6„Z( G d7„ d8e¦  «        Z)dCd<„Z*dS )Dz7Checker for spelling errors in comments and docstrings.é    )ÚannotationsN)ÚPattern)ÚTYPE_CHECKINGÚAnyÚLiteral)Únodes)ÚBaseTokenChecker)Úonly_required_for_messages)ÚPyLinter)ÚChunkerÚEmailFilterÚFilterÚ	URLFilterÚWikiWordFilterÚget_tokenizerTFc                  ó   — e Zd ZdS )r   N©Ú__name__Ú
__module__Ú__qualname__© ó    úL/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/spelling.pyr   r   &   ó   € € € € € Øˆr   r   c                  ó   — e Zd ZdS )r   Nr   r   r   r   r   r   )   r   r   r   c                  ó   — e Zd ZdS )r   Nr   r   r   r   r   r   ,   r   r   r   c                  ó   — e Zd Zdd„ZdS )r   ÚwordÚstrÚreturnÚboolc                ó   — t           ‚©N)ÚNotImplementedError©Úselfr   s     r   Ú_skipzFilter._skip0   s   € Ý%Ð%r   N©r   r   r    r!   )r   r   r   r'   r   r   r   r   r   /   s(   € € € € € ð	&ð 	&ð 	&ð 	&ð 	&ð 	&r   r   c                  ó   — e Zd ZdS )r   Nr   r   r   r   r   r   3   s   € € € € € Øˆr   r   Útagú
str | NoneÚchunkersúlist[Chunker] | NoneÚfiltersúlist[Filter] | Noner    c                ó   — t          ¦   «         S r#   )r   )r*   r,   r.   s      r   r   r   6   s   € õ
 ‰xŒxˆr   ú&list[tuple[Any, enchant.ProviderDesc]]c                 ó^   — t           r%t          j        ¦   «                              ¦   «         ng S r#   )ÚPYENCHANT_AVAILABLEÚenchantÚBrokerÚ
list_dictsr   r   r   Ú_get_enchant_dictsr7   >   s&   € å,?ÐG�7Œ>ÑÔ×&Ò&Ñ(Ô(Ð(ÀRÐGr   Úinner_enchant_dictsú	list[str]c                ó"   — dgd„ | D ¦   «         z   S )NÚ c                ó   — g | ]
}|d          ‘ŒS )r   r   ©Ú.0Úds     r   ú
<listcomp>z-_get_enchant_dict_choices.<locals>.<listcomp>F   s   € Ð5Ð5Ð5˜A�1�Q”4Ð5Ð5Ð5r   r   )r8   s    r   Ú_get_enchant_dict_choicesrA   C   s!   € ð ˆ4Ð5Ð5Ð!4Ð5Ñ5Ô5Ñ5Ð5r   Úpyenchant_availabler!   r   c                óx   — | r%d„ | D ¦   «         }dd                      |¦  «        › �}nd}|s|dz  }|dz  }d|› d�S )	Nc                ó@   — g | ]}|d          › d|d         j         › d�‘ŒS )r   z (é   ú))Únamer=   s     r   r@   z*_get_enchant_dict_help.<locals>.<listcomp>N   s3   € ÐLÐLÐL°1˜!˜Aœ$Ð.Ð. ! A¤$¤)Ð.Ð.Ð.ÐLÐLÐLr   zAvailable dictionaries: z, z0No available dictionaries : You need to install zboth the python package and z)the system dependency for enchant to workzSpelling dictionary name. ú.)Újoin)r8   rB   Údict_as_strÚenchant_helps       r   Ú_get_enchant_dict_helprL   I   sp   € ð ð DØLÐLÐ8KÐLÑLÔLˆØJ°$·)²)¸KÑ2HÔ2HÐJÐJˆˆàIˆØ"ð 	;ØÐ:Ñ:ˆLØÐCÑCˆØ7¨Ð7Ð7Ð7Ð7r   c                  ó   — e Zd ZdZdd„ZdS )	ÚWordsWithDigitsFilterzSkips words with digits.r   r   r    r!   c                ó4   — t          d„ |D ¦   «         ¦  «        S )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r#   )Úisdigit)r>   Úchars     r   ú	<genexpr>z.WordsWithDigitsFilter._skip.<locals>.<genexpr>_   s*   è è € Ð3Ð3 d�4—<’<‘>”>Ð3Ð3Ð3Ð3Ð3Ð3r   )Úanyr%   s     r   r'   zWordsWithDigitsFilter._skip^   s   € ÝÐ3Ð3¨dÐ3Ñ3Ô3Ñ3Ô3Ð3r   Nr(   ©r   r   r   Ú__doc__r'   r   r   r   rN   rN   [   s.   € € € € € Ø"Ð"ð4ð 4ð 4ð 4ð 4ð 4r   rN   c                  ó   — e Zd ZdZdd„ZdS )	ÚWordsWithUnderscoreszSSkips words with underscores.

    They are probably function parameter names.
    r   r   r    r!   c                ó
   — d|v S )NÚ_r   r%   s     r   r'   zWordsWithUnderscores._skiph   s   € Ø�dˆ{Ðr   Nr(   rU   r   r   r   rX   rX   b   s2   € € € € € ðð ð
ð ð ð ð ð r   rX   c                  ó&   — e Zd ZU dZded<   d
d„Zd	S )ÚRegExFilterz¤Parent class for filters using regular expressions.

    This filter skips any words the match the expression
    assigned to the class attribute ``_pattern``.
    zPattern[str]Ú_patternr   r   r    r!   c                óP   — t          | j                             |¦  «        ¦  «        S r#   )r!   r]   Úmatchr%   s     r   r'   zRegExFilter._skipu   s    € Ý�D”M×'Ò'¨Ñ-Ô-Ñ.Ô.Ð.r   Nr(   )r   r   r   rV   Ú__annotations__r'   r   r   r   r\   r\   l   sB   € € € € € € ðð ð ÐÐÑð/ð /ð /ð /ð /ð /r   r\   c                  ó2   — e Zd ZdZ ej        d¦  «        ZdS )ÚCamelCasedWordzÈFilter skipping over camelCasedWords.
    This filter skips any words matching the following regular expression:

           ^([a-z]\w+[A-Z]+\w+)

    That is, any words that are camelCasedWords.
    z^([a-z]+(\d|[A-Z])(?:\w+)?)N©r   r   r   rV   ÚreÚcompiler]   r   r   r   rb   rb   y   s,   € € € € € ðð ð ˆrŒzÐ8Ñ9Ô9€H€H€Hr   rb   c                  ó2   — e Zd ZdZ ej        d¦  «        ZdS )ÚSphinxDirectiveszÐFilter skipping over Sphinx Directives.
    This filter skips any words matching the following regular expression:

           ^(:([a-z]+)){1,2}:`([^`]+)(`)?

    That is, for example, :class:`BaseQuery`
    z^(:([a-z]+)){1,2}:`([^`]+)(`)?Nrc   r   r   r   rg   rg   …   s,   € € € € € ðð ð ˆrŒzÐ;Ñ<Ô<€H€H€Hr   rg   c                  ó.   — e Zd ZU dZded<   d
d„Zdd„Zd	S )ÚForwardSlashChunkerz[This chunker allows splitting words like 'before/after' into 'before' and
    'after'.
    r   Ú_textr    útuple[str, int]c                óp  — 	 | j         st          ¦   «         ‚d| j         vr| j         }d| _        d| _         |dfS | j                              dd¦  «        \  }}|| _         d| _        |r6|r4|d                              ¦   «         r|d                              ¦   «         sd| _         d| _        |› d|› �dfS |dfS )NTú/r   r;   rE   éÿÿÿÿ)rj   ÚStopIterationÚ_offsetÚsplitÚisalpha)r&   ÚtextÚpre_textÚ	post_texts       r   ÚnextzForwardSlashChunker.next™   sç   € ð	Ø”:ð &Ý#‘o”oÐ%Ø˜$œ*Ð$Ð$Ø”z�Ø �”Ø�”
Ø˜Q�w�Ø"&¤*×"2Ò"2°3¸Ñ":Ô":ÑˆH�iØ"ˆDŒJØˆDŒLàð4à ð4ð   ”|×+Ò+Ñ-Ô-ð4ð ! ”|×+Ò+Ñ-Ô-ð	4ð  �”
Ø �”Ø"Ð0Ð0 YÐ0Ð0°!Ð3Ð3Ø˜Q�;Ðr   útuple[str, Literal[0]]c                ó*  — 	 d| j         vr	| j         dfS | j                              dd¦  «        \  }}|r|snP|d                              ¦   «         r|d                              ¦   «         st          ¦   «         ‚|dz   |z   | _         Œ…t          ¦   «         ‚)NTrm   r   rE   rn   ú )rj   rq   rr   ro   )r&   rt   ru   s      r   Ú_nextzForwardSlashChunker._next°   s¨   € ð	4Ø˜$œ*Ð$Ð$Ø”z 1�}Ð$Ø"&¤*×"2Ò"2°3¸Ñ":Ô":ÑˆH�iØð  9ð ØØ˜B”<×'Ò'Ñ)Ô)ð &°¸1´×1EÒ1EÑ1GÔ1Gð &Ý#‘o”oÐ%Ø! C™¨)Ñ3ˆDŒJð	4õ ‰oŒoÐr   N)r    rk   )r    rw   )r   r   r   rV   r`   rv   rz   r   r   r   ri   ri   ’   sS   € € € € € € ðð ð €J€J�Jðð ð ð ð.
ð 
ð 
ð 
ð 
ð 
r   ri   z!(\s|^)(`{1,2})([^`]+)(\2)([^`]|$)Úlinec                ó@   — dd„}t                                || ¦  «        S )z¸Alter line so code flanked in back-ticks is ignored.

    Pyenchant automatically strips back-ticks when parsing tokens,
    so this cannot be done at the individual filter level.
    Ú	match_objúre.Match[str]r    r   c                óX   — |                       d¦  «        |                       d¦  «        z   S )NrE   é   )Úgroup)r}   s    r   Ú-replace_code_but_leave_surrounding_characterszW_strip_code_flanked_in_backticks.<locals>.replace_code_but_leave_surrounding_charactersÇ   s%   € Ø�Š˜qÑ!Ô! I§O¢O°AÑ$6Ô$6Ñ6Ð6r   )r}   r~   r    r   )ÚCODE_FLANKED_IN_BACKTICK_REGEXÚsub)r{   r‚   s     r   Ú _strip_code_flanked_in_backticksr…   À   s5   € ð7ð 7ð 7ð 7õ *×-Ò-Ø5°tñô ð r   c                  óP  — e Zd ZdZdZddddœZddd	d
 ee¦  «         eee	¦  «        dœfddddddœfddddddœfddddddœfddddddœfdd ddd!dœffZ
d8d$„Zd9d)„Zd:d,„Z ed-¦  «        d;d0„¦   «         Z ed-¦  «        d<d2„¦   «         Z ed-¦  «        d=d4„¦   «         ZeZd>d6„Zd7S )?ÚSpellingCheckerz*Check spelling in comments and docstrings.Úspelling)zEWrong spelling of a word '%s' in a comment:
%s
%s
Did you mean: '%s'?úwrong-spelling-in-commentz5Used when a word in comment is not spelled correctly.)zGWrong spelling of a word '%s' in a docstring:
%s
%s
Did you mean: '%s'?úwrong-spelling-in-docstringz7Used when a word in docstring is not spelled correctly.)z$Invalid characters %r in a docstringúinvalid-characters-in-docstringz;Used when a word in docstring cannot be checked by enchant.)ÚC0401ÚC0402ÚC0403zspelling-dictr;   Úchoicez<dict name>)ÚdefaultÚtypeÚmetavarÚchoicesÚhelpzspelling-ignore-wordsÚstringz<comma separated words>z9List of comma separated words that should not be checked.)r�   r‘   r’   r”   zspelling-private-dict-fileÚpathz<path to file>zIA path to a file that contains the private dictionary; one word per line.zspelling-store-unknown-wordsÚnÚynz<y or n>zŠTells whether to store unknown words to the private dictionary (see the --spelling-private-dict-file option) instead of raising a message.zmax-spelling-suggestionsé   ÚintÚNz:Limits count of emitted suggestions for spelling mistakes.z"spelling-ignore-comment-directivesz2fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:zŠList of comma separated words that should be considered directives if they appear at the beginning of a comment and should not be checked.r    ÚNonec                óà  — d| _         t          sd S | j        j        j        }|sd S d„ | j        j        j                             d¦  «        D ¦   «         | _        | j                             ddg¦  «         d„ | j        j        j	                             d¦  «        D ¦   «         | _
        | j        j        j        r*t          j        || j        j        j        ¦  «        | _        nt          j        |¦  «        | _        | j        j        j        rt!          ¦   «         | _        t%          |t&          gt(          t*          t,          t.          t0          t2          t4          g¬¦  «        | _        d| _         d S )	NFc                ó6   — g | ]}|                      ¦   «         ‘ŒS r   ©Ústrip©r>   Úws     r   r@   z(SpellingChecker.open.<locals>.<listcomp>.  s-   € ð 
ð 
ð 
ØˆA�GŠG‰IŒIð
ð 
ð 
r   ú,ÚparamÚpylintc                ó6   — g | ]}|                      ¦   «         ‘ŒS r   rŸ   r¡   s     r   r@   z(SpellingChecker.open.<locals>.<listcomp>5  s0   € ð .
ð .
ð .
àð �GŠG‰IŒIð.
ð .
ð .
r   )r,   r.   T)Úinitializedr3   ÚlinterÚconfigÚspelling_dictÚspelling_ignore_wordsrq   Úignore_listÚextendÚ"spelling_ignore_comment_directivesÚignore_comment_directive_listÚspelling_private_dict_filer4   ÚDictWithPWLÚDictÚspelling_store_unknown_wordsÚsetÚunknown_wordsr   ri   r   r   r   rN   rX   rb   rg   Ú	tokenizer)r&   Ú	dict_names     r   ÚopenzSpellingChecker.open&  sn  € Ø ˆÔÝ"ð 	ØˆFØ”KÔ&Ô4ˆ	Øð 	ØˆFð
ð 
Ø#œ{Ô1ÔG×MÒMÈcÑRÔRð
ñ 
ô 
ˆÔð
 	Ô×Ò ¨(Ð 3Ñ4Ô4Ð4ð.
ð .
à”[Ô'ÔJ×PÒPÐQTÑUÔUð.
ñ .
ô .
ˆÔ*ð
 Œ;ÔÔ8ð 	9Ý!(Ô!4Ø˜4œ;Ô-ÔHñ"ô "ˆDÔÐõ ")¤¨iÑ!8Ô!8ˆDÔàŒ;ÔÔ:ð 	1Ý+.©5¬5ˆDÔå&ØÝ)Ð*åÝÝÝ%Ý$ÝÝ ðð
ñ 
ô 
ˆŒð  ˆÔÐÐr   Úmsgidr   r{   Úline_numc                ó~  — |}	 t          j        d|¦  «        j        d         d         }n# t          t          f$ r d}Y nw xY w|                     ¦   «                              d¦  «        rad|vr]|                     ¦   «         dd …         }| j        D ]6}|                     d|z   ¦  «        r|t          |¦  «        dz   d …         } nŒ7d}nd}t          |¦  «        }|  
                    |                     ¦   «         ¦  «        D �]7\  }}	|	|z  }	|                     ¦   «         }
|| j        v s	|
| j        v rŒ2|                     d	¦  «        r't          |¦  «        d
k    r|d
d …         }|
d
d …         }
	 | j                             |
¦  «        rŒŠ| j                             |¦  «        rŒ¥n3# t          j        j        $ r |                      d||f¬¦  «         Y ŒÕw xY w| j        j        j        rv|
| j        vrkt/          | j        j        j        dd¬¦  «        5 }|                     |
› d�¦  «         d d d ¦  «         n# 1 swxY w Y   | j                             |
¦  «         �Œ`| j                             |¦  «        }|| j        j        j        d …= ||	d …         }t          j        d|› d�|¦  «        }|r|j        d
         d         }n|                     |¦  «        }||	z  }|r|dz  }d|z  dt          |¦  «        z  z   }d                     |¦  «        }|||d|› d�f}|                      |||¬¦  «         �Œ9d S )Nz^\s+r   rE   ú#Ú	docstringry   TF)zu'zu"zr'zr"é   r‹   )r{   ÚargsÚazutf-8)Úencodingú
z(\W|^)(z)(\W|$)ú^z' or 'ú')rd   ÚsearchÚregsÚ
IndexErrorÚAttributeErrorr    Ú
startswithr¯   Úlenr…   r¶   Úcasefoldr¬   rª   Úcheckr4   ÚerrorsÚErrorÚadd_messager¨   r©   r³   rµ   r¸   r°   ÚwriteÚaddÚsuggestÚmax_spelling_suggestionsÚindexrI   )r&   r¹   r{   rº   Úoriginal_lineÚinitial_spaceÚiter_directiveÚstarts_with_commentr   Úword_start_atÚlower_cased_wordÚfÚsuggestionsÚline_segmentr_   ÚcolÚ	indicatorÚall_suggestionr¿   s                      r   Ú_check_spellingzSpellingChecker._check_spellingT  s  € Øˆð	åœI g¨tÑ4Ô4Ô9¸!Ô<¸QÔ?ˆMˆMøÝ�NÐ+ð 	ð 	ð 	ØˆMˆMˆMð	øøøà�:Š:‰<Œ<×"Ò" 3Ñ'Ô'ð 	(¨K¸uÐ,DÐ,DØ—:’:‘<”<   Ô#ˆDð #'Ô"Dð ð �Ø—?’? 3¨Ñ#7Ñ8Ô8ð Ø¥ ^Ñ!4Ô!4°qÑ!8Ð ;Ð ;Ô<�DØ�Eðð #'ÐÐà"'Ðå/°Ñ5Ô5ˆà#'§>¢>°$·*²*±,´,Ñ#?Ô#?ð 9	Bñ 9	BÑˆD�-Ø˜]Ñ*ˆMØ#Ÿ}š}™œÐð �tÔ'Ð'Ð'Ð+;¸tÔ?OÐ+OÐ+OØð �ŠÐ7Ñ8Ô8ð 8½SÀ¹Y¼YÈº]¸]Ø˜A˜B˜B”x�Ø#3°A°B°BÔ#7Ð ðØÔ%×+Ò+Ð,<Ñ=Ô=ð àð
 Ô%×+Ò+¨DÑ1Ô1ð Øðøå”>Ô'ð ð ð Ø× Ò Ø5¸HÈDÈ7ð !ñ ô ð ð �ð	øøøð Œ{Ô!Ô>ð BØ#¨4Ô+=Ð=Ð=ÝØœÔ*ÔEØØ!(ðñ ô ð 9ð ØŸšÐ#3Ð 7Ð 7Ð 7Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð Ô&×*Ò*Ð+;Ñ<Ô<Ð<ùð #Ô0×8Ò8¸Ñ>Ô>�Ø ¤Ô 2Ô KÐ MÐ MÐNØ# M N NÔ3�Ýœ	Ð":¨TÐ":Ð":Ð":¸LÑIÔI�Øð 3àœ* Qœ-¨Ô*�C�Cà&×,Ò,¨TÑ2Ô2�CØ�}Ñ$�Ø&ð Ø˜1‘H�CØ  3™Y¨3µ°T±´©?Ñ;�	Ø!)§¢¨{Ñ!;Ô!;�Ø˜m¨YÐ8M¸NÐ8MÐ8MÐ8MÐN�Ø× Ò  ¨X¸DÐ ÑAÔAÐAÑAðs9	Bð 9	Bs9   „&+ «AÁ AÅ3F*ÆF*Æ*-GÇGÈH=È=I	ÉI	Útokensúlist[tokenize.TokenInfo]c                ó  — | j         sd S |D ]z\  }}\  }}}}|t          j        k    r_|dk    r|                     d¦  «        rŒ7|                     d¦  «        rŒM|                     d¦  «        rŒc|                      d||¦  «         Œ{d S )NrE   z#!/z	# pylint:z# type: r‰   )r§   ÚtokenizeÚCOMMENTrÉ   rá   )r&   râ   Útok_typeÚtokenÚ	start_rowrZ   s         r   Úprocess_tokenszSpellingChecker.process_tokens¥  sº   € ØÔð 	ØˆFð 6<ð 	Tð 	TÑ1ˆH�e™^˜i¨¨Q°Ø�8Ô+Ò+Ð+Ø ’>�> e×&6Ò&6°uÑ&=Ô&=�>àØ×#Ò# KÑ0Ô0ð àØ×#Ò# JÑ/Ô/ð ð Ø×$Ò$Ð%@À%ÈÑSÔSÐSøð	Tð 	Tr   rŠ   Únodeúnodes.Modulec                ó0   — |                       |¦  «         d S r#   ©Ú_check_docstring©r&   rë   s     r   Úvisit_modulezSpellingChecker.visit_module¸  ó   € à×Ò˜dÑ#Ô#Ð#Ð#Ð#r   únodes.ClassDefc                ó0   — |                       |¦  «         d S r#   rî   rð   s     r   Úvisit_classdefzSpellingChecker.visit_classdef¼  rò   r   ú*nodes.FunctionDef | nodes.AsyncFunctionDefc                ó0   — |                       |¦  «         d S r#   rî   rð   s     r   Úvisit_functiondefz!SpellingChecker.visit_functiondefÀ  s   € ð 	×Ò˜dÑ#Ô#Ð#Ð#Ð#r   úJnodes.FunctionDef | nodes.AsyncFunctionDef | nodes.ClassDef | nodes.Modulec                óÔ   — | j         sdS |j        sdS |j        dz   }t          |j        j                             ¦   «         ¦  «        D ]\  }}|                      d|||z   ¦  «         Œ dS )z*Check if the node has any spelling errors.NrE   rŠ   )r§   Údoc_nodeÚlinenoÚ	enumerateÚvalueÚ
splitlinesrá   )r&   rë   Ú
start_lineÚidxr{   s        r   rï   z SpellingChecker._check_docstringÈ  sŠ   € ð Ôð 	ØˆFØŒ}ð 	ØˆFØ”[ 1‘_ˆ
å" 4¤=Ô#6×#AÒ#AÑ#CÔ#CÑDÔDð 	Xð 	X‰IˆC�Ø× Ò Ð!>ÀÀjÐSVÑFVÑWÔWÐWÐWð	Xð 	Xr   N)r    rœ   )r¹   r   r{   r   rº   rš   r    rœ   )râ   rã   r    rœ   )rë   rì   r    rœ   )rë   ró   r    rœ   )rë   rö   r    rœ   )rë   rù   r    rœ   )r   r   r   rV   rG   ÚmsgsrA   Úenchant_dictsrL   r3   Úoptionsr¸   rá   rê   r
   rñ   rõ   rø   Úvisit_asyncfunctiondefrï   r   r   r   r‡   r‡   Ï   s  € € € € € Ø4Ð4à€Dð
ð
ð
ðð €Dð* àØ Ø(Ø4Ð4°]ÑCÔCØ.Ð.¨}Ð>QÑRÔRðð ð		
ð $àØ Ø4ØSð	ð ð	
ð )àØØ+ð1ð	ð ð		
ð +àØØ%ð%ð	ð ð	
ð 'àØØØTð	ð ð	
ð 1àOØ Ø4ð-ð	ð ð
	
ðg>€Gð@+ ð + ð + ð + ð\OBð OBð OBð OBðbTð Tð Tð Tð&  ÐÐ =Ñ>Ô>ð$ð $ð $ñ ?Ô>ð$ð  ÐÐ =Ñ>Ô>ð$ð $ð $ñ ?Ô>ð$ð  ÐÐ =Ñ>Ô>ð$ð $ð $ñ ?Ô>ð$ð
 /ÐðXð Xð Xð Xð Xð Xr   r‡   r¨   r   rœ   c                óJ   — |                       t          | ¦  «        ¦  «         d S r#   )Úregister_checkerr‡   )r¨   s    r   Úregisterr  Ù  s$   € Ø
×Ò�O¨FÑ3Ô3Ñ4Ô4Ð4Ð4Ð4r   )NNN)r*   r+   r,   r-   r.   r/   r    r   )r    r1   )r8   r1   r    r9   )r8   r1   rB   r!   r    r   )r{   r   r    r   )r¨   r   r    rœ   )+rV   Ú
__future__r   rd   rå   r   Útypingr   r   r   Úastroidr   Úpylint.checkersr	   Úpylint.checkers.utilsr
   Úpylint.lintr   r4   Úenchant.tokenizer   r   r   r   r   r   r3   ÚImportErrorr7   rA   rL   r  rN   rX   r\   rb   rg   ri   re   rƒ   r…   r‡   r  r   r   r   ú<module>r     s  ðð
 >Ð =à "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à Ð Ð Ð Ð Ð à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø <Ð <Ð <Ð <Ð <Ð <àð %Ø$Ð$Ð$Ð$Ð$Ð$ð%Ø€N€N€Nðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ÐÐøØð ð ð Ø€GØÐðð ð ð ð ñ ô ð ðð ð ð ð ñ ô ð ðð ð ð ð ñ ô ð ð&ð &ð &ð &ð &ñ &ô &ð &ðð ð ð ð ñ ô ð ð Ø)-Ø'+ðð ð ð ð ð ð ð)øøøð8Hð Hð Hð Hð
6ð 6ð 6ð 6ð8ð 8ð 8ð 8ð #Ð"Ñ$Ô$€ð4ð 4ð 4ð 4ð 4˜Fñ 4ô 4ð 4ðð ð ð ð ˜6ñ ô ð ð
/ð 
/ð 
/ð 
/ð 
/�&ñ 
/ô 
/ð 
/ð	:ð 	:ð 	:ð 	:ð 	:�[ñ 	:ô 	:ð 	:ð
=ð 
=ð 
=ð 
=ð 
=�{ñ 
=ô 
=ð 
=ð(ð (ð (ð (ð (˜'ñ (ô (ð (ðV ", ¤Ð,PÑ!QÔ!QÐ ðð ð ð ðGXð GXð GXð GXð GXÐ&ñ GXô GXð GXðT5ð 5ð 5ð 5ð 5ð 5s   ¼A ÁAB(Â'B(