§
    ¬	Êj\  ã                  óž  — d Z 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ZdZ	dZ
dZdZd	Zd
ZdZ ed¦  «        dz   Z G d„ d¦  «        ZdSd„ZdTd„ZdUd„ZdZdVd„ZdWdXd „ZdYd!„ZdYd"„ZdZd#„Zd$Zd%Zd&d'ed(fd)d*ed(fd+d,d-d.d/d0 ed1¦  «        z   d2z    ed1¦  «        z   d(fd3d4d5 ed1¦  «        z   d6z    ed1¦  «        z   d(fd7d8d9ed(fd:d;d<d=                     g d>¢¦  «        d=z   d(ffZd?d'efd@dAdBefdCdDdBd=                     g dE¢¦  «        d=z   fdFdGefdHeeffZ  edIdJ¬K¦  «        Z!d[dM„Z"dWd\dP„Z#dWd[dQ„Z$e%dRk    r ej&         e$¦   «         ¦  «         dS dS )]už  The public repositories are English-only. This is the check that says so.

Why it exists, and it is not a style preference. On 2026-08-27 a whole new
subsystem - the `_juggler` client, its generators and its test files, about four
thousand lines - was written in ITALIAN and committed to a public repository.
Nothing caught it: the repo had been English since its first commit, `pytest`
was green throughout, and the pre-push hook had no opinion about the language a
file is written in. A convention that lives only in the heads of the people
writing the code is not a convention, it is a habit, and a habit skips a session.

    python -m invisible_core.english                 # 1 if Italian is found
    python -m invisible_core.english --range A..B    # only what a push adds
    python -m invisible_core.english --selftest      # the known-bad corpus

â›” IT LIVES HERE BECAUSE IT WAS COPIED, AND THE COPIES DRIFTED. The check was a
script duplicated into two consumer repositories and never into this one - which
is how `invisible_core` itself, the package both consumers pin, went a year
without ever being looked at, carrying Italian prose in 29 files and Italian in
messages a user reads. And the drift was not hypothetical: measured 2026-09-15,
FOUR of the five exclusion entries in AIHawk's copy named paths that exist only
in the wrapper (`src/invisible_playwright/_pw/`, `_driver/`,
`_juggler/injected.js`, `tests/test_fork.py`), because the copy carried the other
repository's data with it. One of them, `_driver/`, is dead in both since Node
was removed.

So the split is: the LOGIC is here, once. What is per-repository - which folders
are vendored, which marker our patches carry - is declared by each repository in
its own `pyproject.toml`, under `[tool.invisible.english]`, next to
`[tool.invisible.hooks]`. And :func:`dead_exclusions` refuses an entry that names
nothing, which is the mechanism that would have caught the drift above instead of
a person noticing.

â›” AND THE ROOT IS AN ARGUMENT, WHICH IS WHY THERE IS NO REFUSAL HERE. The script
version derived its root from `__file__`, so it could only ever judge its own
repository while looking like it judged whatever you pointed it at: run from
`invisible_core`, the wrapper's copy printed `english only: clean` about the
wrapper, and that sentence was believed for two steps while `invisible_core`
carried 32 lines of Italian docstring. The copy grew a guard that REFUSED when
the two disagreed. That guard is not ported: a module that takes the tree as a
parameter, defaulting to the git toplevel you are standing in, has nothing to
disagree with. The patch is gone because the shape that needed it is gone.

WHAT IT DOES NOT DO, said out loud because a gate whose limits are unstated gets
trusted too far. It does not detect Spanish, French or Portuguese. It does not
judge prose quality. It cannot see a single Italian noun with no Italian function
word near it: `def calcola(x)` on its own passes, and so does an error message of
four words - measured, `_headless.py` refused a Mac in Italian for weeks under
this threshold. What it catches is Italian PROSE, which is what comments and
docstrings are made of, and prose is what actually happened.
é    )ÚannotationsN)`ÚpercheÚquindiÚquestoÚquestaÚquesteÚquestiÚquelloÚquellaÚquelleÚquelliÚdellaÚdelleÚdegliÚdelloÚnellaÚnelleÚnegliÚdallaÚdalleÚdagliÚsullaÚsulleÚallaÚalleÚagliÚsonoÚessereÚvieneÚvengonoÚinveceÚancheÚsenzaÚogniÚtuttoÚtuttiÚtuttaÚtutteÚcosaÚdoveÚquandoÚsempreÚcioeÚpiuÚgiaÚadessoÚalloraÚprimaÚdopoÚsottoÚsopraÚdentroÚfuoriÚversoÚnienteÚnessunoÚnessunaÚqualcosaÚqualcunoÚmoltoÚpocoÚtroppoÚ
abbastanzaÚsoltantoÚoppureÚmentreÚfincheÚaffincheÚbencheÚsebbeneÚpoicheÚsiccomeÚqualeÚqualiÚchiunqueÚovunqueÚcomunqueÚdunqueÚinfattiÚinoltreÚtuttaviaÚeppureÚancoraÚappenaÚsubitoÚspessoÚ	raramenteÚdavveroÚproprioÚstessoÚstessaÚstesseÚstessiÚaltroÚaltraÚaltreÚaltrié   )	z.pyz.mdz.tomlz.cfgz.ymlz.yamlz.jsz.cssz.html)z//ú#éP   iÐ  i¼  éÈ   é\   Únc                  ó(   — e Zd ZdZddefd„Zdd„ZdS )	ÚConfigus  What one repository declares about itself.

    â›” THIS IS THE HALF THAT MUST NOT BE SHARED, and copying it is what broke the
    old arrangement. `excluded` and `marker` describe a tree; the word list and
    the thresholds describe the Italian language. Putting both in one file and
    duplicating the file gave every repository the other one's vendored folders.
    © Nc                ód   — t          |¦  «        | _        || _        t          |¦  «        | _        d S ©N)ÚtupleÚexcludedÚmarkerÚ
extensions)Úselfrp   rq   rr   s       úFC:\Projects\Muse2API\.venv\Lib\site-packages\invisible_core/english.pyÚ__init__zConfig.__init__Š   s)   € Ý˜h™œˆŒØˆŒÝ 
Ñ+Ô+ˆŒˆˆó    ÚreturnÚstrc                ó(   — d| j         ›d| j        ›d�S )NzConfig(excluded=z	, marker=ú)©rp   rq   )rs   s    rt   Ú__repr__zConfig.__repr__�   s   € € Ø48´M°M°MÀ4Ä;À;À;ÐOÐPrv   )rw   rx   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
EXTENSIONSru   r|   rl   rv   rt   rk   rk   �   sU   € € € € € ðð ð !#¨4¸Jð ,ð ,ð ,ð ,ð
Qð Qð Qð Qð Qð Qrv   rk   Úrootúpathlib.Pathrw   c                ó   — ddl }t          j        | ¦  «        dz  }|                     ¦   «         st	          ¦   «         S |                     d¦  «        5 }|                     |¦  «        }ddd¦  «         n# 1 swxY w Y   |                     di ¦  «                             di ¦  «                             di ¦  «        }t	          |                     dd	¦  «        |                     d
¦  «        |                     dt          ¦  «        ¬¦  «        S )zëRead `[tool.invisible.english]` out of a repository's `pyproject.toml`.

    A repository that declares nothing gets the defaults, which exclude nothing:
    an absent declaration must mean "scan everything", never "scan nothing".
    r   Núpyproject.tomlÚrbÚtoolÚ	invisibleÚenglishrp   rl   rq   rr   )rp   rq   rr   )	ÚtomllibÚpathlibÚPathÚis_filerk   ÚopenÚloadÚgetr�   )r‚   rŠ   ÚpathÚfhÚdataÚsections         rt   Ú
config_forr•   “   s)  € ð €N€N€NåŒ<˜ÑÔÐ 0Ñ0€DØ�<Š<‰>Œ>ð Ý‰xŒxˆØ	�Š�4‰Œð  ˜BØ�|Š|˜BÑÔˆð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  à�xŠx˜ Ñ#Ô#×'Ò'¨°RÑ8Ô8×<Ò<¸YÈÑKÔK€GÝØ—’˜Z¨Ñ,Ô,Ø�{Š{˜8Ñ$Ô$Ø—;’;˜|­ZÑ8Ô8ðñ ô ð s   ÁA5Á5A9Á<A9Útextrx   Úsetc                óR   ‡— |                       ¦   «         Šˆfd„t          D ¦   «         S )z-The Italian function words present, as a set.c                óD   •— h | ]}t          j        d |z  ‰¦  «        ¯|’ŒS )z(?<![a-z0-9_])%s(?![a-z0-9_]))ÚreÚsearch)Ú.0ÚwÚlowereds     €rt   ú	<setcomp>z italian_words.<locals>.<setcomp>«   sF   ø€ ð Ið Ið I�!ÝŒyÐ9¸AÑ=¸wÑGÔGðIˆAð Ið Ið Irv   )ÚlowerÚITALIAN)r–   rž   s    @rt   Úitalian_wordsr¢   ¨   sB   ø€ à�jŠj‰lŒl€GðIð Ið Ið I•wð Iñ Iô Ið Irv   rq   c           	     óÔ  — |                       ¦   «         }g }t          |¦  «        D �]-\  }}||vrŒt          |¦  «        t          k    �rt|}|dk    r‘||dz
                                ¦   «                              t          ¦  «        r\||z
  t          k     rN|dz  }|dk    rC||dz
                                ¦   «                              t          ¦  «        r||z
  t          k     °N|}|dz   t          |¦  «        k     r¡||dz                                 ¦   «                              t          ¦  «        rl||z
  t          k     r^|dz  }|dz   t          |¦  «        k     rC||dz                                 ¦   «                              t          ¦  «        r||z
  t          k     °^|                     |||dz   …         ¦  «         �Œ˜d}	 | 	                    ||¦  «        }	|	dk     rnu| 	                    t          |	¦  «        }d||	z
  cxk     rt          k     sn |	t          z   }|                     |t          d|	t          z
  ¦  «        |…         ¦  «         |	dz   }Œ’�Œ/d                     |¦  «        S )u&  Only the parts of a vendored file that OUR patches wrote.

    â›” VENDORED IS NOT A BLANKET EXEMPTION, and that was the hole the first
    version had. Upstream folders are code we do not own, so scanning them whole
    would be noise - but they contain OUR patches, and on 2026-08-27 seven of
    those blocks were in Italian and completely invisible, the biggest of them in
    a file every user imports. The exclusion is by FOLDER; what is ours is
    identified by the marker, so inside an excluded path only the marked blocks
    are read.
    r   é   Tú
)Ú
splitlinesÚ	enumerateÚlenÚ	LONG_LINEÚstripÚ
startswithÚCOMMENT_STARTSÚ	MAX_BLOCKÚextendÚfindÚ
NL_LITERALÚWINDOWÚappendÚmaxÚBEFOREÚjoin)
r–   rq   ÚlinesÚkeptÚiÚlineÚstartÚendÚposÚjs
             rt   Ú
our_blocksr¾   ¯   sm  € ð �OŠOÑÔ€EØ€DÝ˜UÑ#Ô#ð ñ ‰ˆˆ4Ø˜ÐÐØÝˆt‰9Œ9�	Ò!Ñ!ØˆEØ˜1’9�9Ø˜U Q™YÔ'×-Ò-Ñ/Ô/×:Ò:½>ÑJÔJð à˜5‘y¥9Ò,Ð,Ø˜‘
�ð ˜1’9�9Ø˜U Q™YÔ'×-Ò-Ñ/Ô/×:Ò:½>ÑJÔJð à˜5‘y¥9Ò,Ð,àˆCØ˜‘7�S ™ZœZÒ'Ð'Ø˜S 1™W”~×+Ò+Ñ-Ô-×8Ò8½ÑHÔHð (à˜Q‘w¥Ò*Ð*Ø�q‘�ð ˜‘7�S ™ZœZÒ'Ð'Ø˜S 1™W”~×+Ò+Ñ-Ô-×8Ò8½ÑHÔHð (à˜Q‘w¥Ò*Ð*à�KŠK˜˜e C¨!¡G˜mÔ,Ñ-Ô-Ð-ÙØˆð	Ø—	’	˜& #Ñ&Ô&ˆAØ�1ŠuˆuØØ—)’)�J¨Ñ*Ô*ˆCØ�s˜Q‘wÐ'Ð'Ò'Ð'¥Ò'Ð'Ð'Ð'Ø�&‘j�Ø�KŠK˜�S  A­¡JÑ/Ô/°Ð3Ô4Ñ5Ô5Ð5Ø�a‘%ˆCð	ñ ð �9Š9�T‰?Œ?Ðrv   zsrc/invisible_core/english.pyr‘   Úconfigro   c                ó>  ‡— |                       t          d¦  «        d¦  «        Š‰t          k    rdt          ¦   «         fS ‰|j        v rdt          ¦   «         fS t          ˆfd„|j        D ¦   «         ¦  «        rS|j        sdt          ¦   «         fS t          t          ||j        ¦  «        ¦  «        }t          |¦  «        t          k    |fS ‰                     |j        ¦  «        sdt          ¦   «         fS t          |¦  «        }t          |¦  «        t          k    |fS )zÅ(is_italian, words) for one file.

    A pure function on (path, text, config): the selftest mutates here and never
    touches the disk, which is what makes the mutations cost nothing to run.
    rh   ú/Fc              3  ól   •K  — | ].}|                      d ¦  «        o‰                     |¦  «        V — Œ/dS )rÁ   N)Úendswithr«   )rœ   ÚeÚ
normaliseds     €rt   ú	<genexpr>zinspect.<locals>.<genexpr>í   s@   øè è € Ð
QÐ
Q¸Aˆ1�:Š:�c‰?Œ?Ð7˜z×4Ò4°QÑ7Ô7Ð
QÐ
QÐ
QÐ
QÐ
QÐ
Qrv   )ÚreplaceÚchrÚ_SELFr—   rp   Úanyrq   r¢   r¾   r¨   Ú	THRESHOLDrÃ   rr   )r‘   r–   r¿   ÚfoundrÅ   s       @rt   ÚinspectrÍ   â   s
  ø€ ð —’�c "™gœg sÑ+Ô+€JØ•UÒÐØ•s‘u”uˆ~ÐØ�V”_Ð$Ð$Ø•s‘u”uˆ~ÐÝ
Ð
QÐ
QÐ
QÐ
QÀÄÐ
QÑ
QÔ
QÑQÔQð 0àŒ}ð 	"Ø�3™5œ5�>Ð!Ý�j¨¨v¬}Ñ=Ô=Ñ>Ô>ˆÝ�E‘
”
�iÒ'¨Ð/Ð/Ø×Ò˜vÔ0Ñ1Ô1ð Ø•s‘u”uˆ~ÐÝ˜$ÑÔ€EÝ�‰JŒJ�)Ò# UÐ+Ð+rv   Úlistc                ó,  — |rt          j        dddd|g| dd¬¦  «        }nt          j        ddg| dd¬¦  «        }|j        r1t          d|j                             ¦   «         d	d
…         z  ¦  «        ‚d„ |j                             ¦   «         D ¦   «         S )u¿  The files to look at: everything tracked, or only what a range touches.

    â›” IT COMES FROM GIT, so a file you have just WRITTEN is not in it until it
    is staged. Measured 2026-09-08: this was run on a brand new script, printed
    clean, and the clean was about a set that did not contain the file. If a gate
    says clean about work you know you just wrote, the first hypothesis is not
    "I wrote it well", it is "it did not look".
    ÚgitÚdiffz--name-onlyz--diff-filter=dT©ÚcwdÚcapture_outputr–   zls-fileszgit refused: %sNrg   c                ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rl   )rª   )rœ   Úxs     rt   ú
<listcomp>ztracked.<locals>.<listcomp>  s%   € Ð:Ð:Ð:�!°·²±	´	Ð:ˆAÐ:Ð:Ð:rv   )Ú
subprocessÚrunÚ
returncodeÚRuntimeErrorÚstderrrª   Ústdoutr¦   )r‚   Ú	rev_rangeÚrs      rt   Útrackedrà   ù   s¶   € ð ð ;ÝŒNØ�F˜MÐ+<¸iÐHØ T°ð6ñ 6ô 6ˆˆõ ŒN˜E :Ð.°DØ*.°Tð;ñ ;ô ;ˆà„|ð GÝÐ,¨q¬x¯~ª~Ñ/?Ô/?ÀÀÀÔ/EÑEÑFÔFÐFØ:Ð:�q”x×*Ò*Ñ,Ô,Ð:Ñ:Ô:Ð:rv   c                ó`  — g }|D ]¨}t          j        | ¦  «        |z  }|                     ¦   «         sŒ.	 |                     ¦   «                              d¦  «        }n# t
          t          f$ r Y Œjw xY wt          |||¦  «        \  }}|r$|                     |t          |¦  «        f¦  «         Œ©|S )Nzutf-8)
r‹   rŒ   ÚexistsÚ
read_bytesÚdecodeÚUnicodeDecodeErrorÚOSErrorrÍ   r²   Úsorted)	r‚   Úpathsr¿   Úguiltyr‘   Úfr–   Ú
is_italianrÌ   s	            rt   Úscanrì     sÅ   € Ø€FØð 
1ð 
1ˆÝŒL˜ÑÔ Ñ%ˆØ�xŠx‰zŒzð 	Øð	Ø—<’<‘>”>×(Ò(¨Ñ1Ô1ˆDˆDøÝ"¥GÐ,ð 	ð 	ð 	ØˆHð	øøøå# D¨$°Ñ7Ô7Ñˆ
�EØð 	1Ø�MŠM˜4¥¨¡¤Ð/Ñ0Ô0Ð0øØ€Ms   ´'AÁA0Á/A0c                óR   ‡ — t          j        ‰ ¦  «        Š ˆ fd„|j        D ¦   «         S )u  Declared exclusions that name nothing in this repository.

    â›” THIS IS THE CHECK THE COPIES DID NOT HAVE, and it is why they drifted in
    silence. An exclusion is a hole deliberately cut in a gate; one that names
    nothing is either a hole in the wrong wall or a piece of another repository's
    configuration that came along with a copy. Measured 2026-09-15 on AIHawk's
    copy: four of five entries named paths that exist only in the wrapper.

    A dead entry never makes a gate red, which is exactly why nobody finds it.
    c                óh   •— g | ].}‰|                      d ¦  «        z                       ¦   «         °,|‘Œ/S )rÁ   )Úrstriprâ   )rœ   rÄ   r‚   s     €rt   r×   z#dead_exclusions.<locals>.<listcomp>*  s9   ø€ ÐNÐNÐN�!¨t°a·h²h¸s±m´mÑ/C×.KÒ.KÑ.MÔ.MÐNˆAÐNÐNÐNrv   )r‹   rŒ   rp   )r‚   r¿   s   ` rt   Údead_exclusionsrð     s0   ø€ õ Œ<˜ÑÔ€DØNÐNÐNÐN�v”ÐNÑNÔNÐNrv   c                ó˜   — g g }}t          | ¦  «        D ]3}|                     |j        ¦  «        r|n|                     |¦  «         Œ4||fS )u^  (covered, uncovered) tracked files, so a green can say what it looked at.

    â›” A GATE HAS A PERIMETER AND THE PERIMETER IS MEASURED. This exists because
    the extension list once missed `.js`, `.css` and `.html` while the served
    page was 67 KB of script: the check was silent and correct about a set that
    did not contain the prose.
    )rà   rÃ   rr   r²   )r‚   r¿   ÚcoveredÚ	uncoveredÚrels        rt   Úcoveragerõ   -  s^   € ð ˜RˆY€GÝ�t‰}Œ}ð Pð PˆØ—L’L Ô!2Ñ3Ô3Ð	Bˆˆ¸×JÒJÈ3ÑOÔOÐOÐOØ�IÐÐrv   z\# Questo commento e' scritto in italiano perche' nessuno controllava.
def f():
    return 1
zQ# This comment is in English, which is what the repo uses.
def f():
    return 1
zan Italian comment in a .pyúsrc/x.pyTzan Italian documentz	README.md)zItalian inside a docstringrö   z5def f():
    """Questo fa qualcosa, quindi serve."""
T)zItalian in a config filer…   z2# Questo pacchetto, quindi, dipende da
name = 'x'
T)zEnglish names, Italian commentsrö   zkdef click(selector):
    # Prima si risolve, poi si guarda dove sta, quindi si clicca.
    return selector
Tzan Italian comment in a .jszsrc/ui/js/x.jsz2/* Prima si guarda dove sta, quindi si disegna. */é
   zfunction draw(){ return 1; }zan Italian comment in a .csszsrc/ui/css/x.cssz:/* Questo pannello sta sopra, quindi non sposta niente. */z#rail{ position:absolute })zan Italian testztests/test_x.pyzhdef test_questo_funziona():
    # Questo controlla che tutto sia a posto, quindi basta.
    assert True
TzItalian in a sibling scriptzscripts/gen_x.py)zItalian in a workflowz.github/workflows/ci.ymlz;# Questo lavoro gira sempre, quindi non si salta.
name: ci
Tz"OUR patch inside a vendored folderz!vendored/_pw/_impl/_playwright.pyr¥   )zdef upstream(self):z<    # MODIFIED by us: chromium e webkit non esistono piu' inzA    # questo fork, quindi il messaggio lo dice invece di lasciarez    # un AttributeError.z    raise ValueError('x')zordinary English)z+a single Italian word (a name, a quotation)rö   zC# The vendor is called Sempre, which is a name and not a sentence.
zvendored upstream is not ourszvendored/_pw/_impl/_page.py)z a minified line around our patchzvendored/_pw/bundle.jsa»#  var a=1;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // questo e' upstream, quindi non si guarda affatto yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy // MODIFIED by us: nothing to see here zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz // e anche questo e' upstream, dunque niente
z.upstream code around our patch stays invisible)z5# questo e' upstream, quindi non lo guardiamo affattozdef upstream_thing():z    return 1za binary has no languagezassets/logo.pngz%this module, which carries the corpus)zvendored/_pw/zMODIFIED by usr{   Úintc                 ó|  ‡— dŠˆfd„} t          d¦  «         t          D ]\  }}}} | |||dt          ¦  «         Œt          d¦  «         t          D ]\  }}} | |||dt          ¦  «         Œt          d¦  «         	 t	          ¦   «         }t          |¦  «        }t          ||¦  «        }|r9t          dt          |¦  «        d	                     |¦  «        fz  ¦  «         ‰d
z  Št          |t          |¦  «        |¦  «        }|r›t          dt          |¦  «        z  ¦  «         |d d…         D ]6\  }}	t          d|d›dd	                     |	d d…         ¦  «        ›�¦  «         Œ7t          |¦  «        dk    r"t          dt          |¦  «        dz
  z  ¦  «         ‰d
z  ŠnAt          ||¦  «        \  }
}t          dt          |
¦  «        t          |¦  «        fz  ¦  «         n0# t          t          f$ r}t          d|z  ¦  «         Y d }~nd }~ww xY wt          ¦   «          t          d‰sdnd‰z  z  ¦  «         ‰rd
ndS )Nr   c           
     óÔ   •— t          |||¦  «        \  }}||k    r3t          d|rdnd›d| ›dt          |¦  «        pd›d�¦  «         ‰dz  Šd S t          d|rd	nd
›d| ›�¦  «         d S )Nz  ÚSURVIVEDzFALSE POSITIVEz: z (words seen: Únonerz   r¤   ÚkilledÚsilent)rÍ   Úprintrç   )Únamer‘   r–   Úshould_firer¿   rë   rÌ   Úbads          €rt   Úexpectzselftest.<locals>.expect�  s¥   ø€ å# D¨$°Ñ7Ô7Ñˆ
�EØ˜Ò$Ð$ÝˆEØ#.ÐD�Z�ZÐ4DÐDÐDØ�T�T�6 %™=œ=Ð2¨FÐ2Ð2ð4ñ 5ô 5ð 5ð �1‰HˆCˆCˆCåˆE¨KÐ E  ¸XÐ EÐ EÀtÀtÐLÑMÔMÐMÐMÐMrv   z --- mutations that MUST fire ---Tz --- cases that must NOT fire ---Fz--- the real repository ---z0  %d declared exclusion(s) name nothing here: %sú, r¤   z   %d files are still in Italian:é   z      Ú58ú é   z      ... and %d morezO  silent: no tracked file is in Italian (%d covered, %d outside the extensions)z  not verifiable (%s)zselftest: %szALL GOODz%d PROBLEMS)rÿ   Ú	KNOWN_BADÚCORPUS_CONFIGÚMUST_NOT_FIREÚgit_rootr•   rð   r¨   rµ   rì   rà   rõ   rÛ   Ú
SystemExit)r  r   r‘   r–   Ú_r‚   r¿   ÚdeadÚnoisyrÌ   rò   ró   Úfailurer  s                @rt   Úselftestr  �  s³  ø€ Ø
€Cð	Nð 	Nð 	Nð 	Nð 	Nõ 
Ð
,Ñ-Ô-Ð-Ý(ð 6ð 6Ñˆˆd�D˜!Øˆˆt�T˜4 ¥}Ñ5Ô5Ð5Ð5å	Ð
,Ñ-Ô-Ð-Ý)ð 7ð 7Ñˆˆd�DØˆˆt�T˜4 ­Ñ6Ô6Ð6Ð6õ
 
Ð
'Ñ(Ô(Ð(ð1Ý‰zŒzˆÝ˜DÑ!Ô!ˆÝ˜t VÑ,Ô,ˆØð 	ÝÐDÝ˜‘Y”Y §	¢	¨$¡¤Ð0ñ1ñ 2ô 2ð 2à�1‰HˆCÝ�T�7 4™=œ=¨&Ñ1Ô1ˆØð 	4ÝÐ4µs¸5±z´zÑAÑBÔBÐBØ$ S b Sœzð Gð G‘��eÝ�¨$¨$¨$¨$°·	²	¸%ÀÀÀ¼)Ñ0DÔ0DÐ0DÐEÑFÔFÐFÐFÝ�5‰zŒz˜BŠˆÝÐ-µ°U±´¸b±ÑAÑBÔBÐBØ�1‰HˆCˆCå!)¨$°Ñ!7Ô!7ÑˆG�YÝð <å˜‘\”\¥3 y¡>¤>Ð2ñ3ñ 4ô 4ð 4øøõ �*Ð%ð 1ð 1ð 1ÝÐ%¨Ñ/Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0øøøøð1øøøõ 
�G„G€GÝ	ˆ.¨cÐJ˜J˜J°}ÀsÑ7JÑ
KÑLÔLÐLØˆ?ˆ1ˆ1˜Ðs   Á<E$G! Ç!HÇ2H	È	Hrº   ú'pathlib.Path | None'c                ó0  — t          j        g d¢| rt          | ¦  «        nddd¬¦  «        }|j        s|j                             ¦   «         st          d¦  «        ‚t          j        |j                             ¦   «         ¦  «         	                    ¦   «         S )zÐThe repository you are standing in - the tree this run is about.

    There is no guessing and therefore no refusal: the subject is where the
    caller is, not where this module happens to be installed.
    )rÐ   z	rev-parsez--show-toplevelNTrÒ   zSnot inside a git repository, so there is no tree to judge. Pass --root to name one.)
rØ   rÙ   rx   rÚ   rÝ   rª   r  r‹   rŒ   Úresolve)rº   rß   s     rt   r  r  Ä  s˜   € õ 	ŒÐ>Ð>Ð>Ø).Ð8�3˜u™:œ:˜:°DØ&*°ð	7ñ 	7ô 	7€Að 	„|ð <˜1œ8Ÿ>š>Ñ+Ô+ð <Ýð ;ñ <ô <ð 	<åŒ<˜œŸšÑ(Ô(Ñ)Ô)×1Ò1Ñ3Ô3Ð3rv   c                óx  — t          j        t                               ¦   «         d         ¬¦  «        }|                     dd¬¦  «         |                     ddd¬	¦  «         |                     d
d¬¦  «         |                     | ¦  «        }|j        rt          ¦   «         S |j        r+t          j	        |j        ¦  «         
                    ¦   «         nt          ¦   «         }t          |¦  «        }t          ||¦  «        }|rWt          dt          |¦  «        |fz  ¦  «         |D ]}t          d|z  ¦  «         Œt          ¦   «          t          d¦  «         dS t!          |t#          ||j        ¦  «        |¦  «        }|sDt'          ||¦  «        \  }}	t          d|t          |¦  «        t          |	¦  «        fz  ¦  «         dS t          dt          |¦  «        z  ¦  «         |D ]6\  }
}t          d|
d›dd                     |d d…         ¦  «        ›�¦  «         Œ7t          ¦   «          t          d¦  «         dS )Nr   )Údescriptionz--rootz>the repository to judge (default: the one you are standing in))Úhelpz--rangerÞ   z6only the files a range touches, e.g. origin/main..HEAD)Údestr  z
--selftestÚ
store_true)Úactionz5REFUSED: %d declared exclusion(s) name nothing in %s:z   %sz²An exclusion is a hole cut in this gate on purpose. One that names nothing is either aimed at the wrong wall or came from another repository's configuration. Remove it or fix it.r¤   zDenglish only: clean (%s: %d file(s) read, %d outside the extensions)z%d file(s) are not in English:z   r  r  r  é   zBThis repository is public and English-only. Translate these files.)ÚargparseÚArgumentParserr€   r¦   Úadd_argumentÚ
parse_argsr  r‚   r‹   rŒ   r  r  r•   rð   rÿ   r¨   rì   rà   rÞ   rõ   rµ   )ÚargvÚpÚar‚   r¿   r  rÄ   ré   rò   ró   r‘   rÌ   s               rt   Úmainr$  Ó  sf  € ÝÔ­G×,>Ò,>Ñ,@Ô,@ÀÔ,CÐDÑDÔD€AØ‡N‚N�8ð #K€Nñ Lô Lð Là‡N‚N�9 ;ØPð ñ Rô Rð Rà‡N‚N�<¨€NÑ5Ô5Ð5Ø	�Š�TÑÔ€AØ„zð Ý‰zŒzÐà-.¬VÐC�7Œ<˜œÑÔ×'Ò'Ñ)Ô)Ð)½¹¼€DÝ˜ÑÔ€Få˜4 Ñ(Ô(€DØð 	ÝÐEÝ�T‘”˜DÐ!ñ"ñ 	#ô 	#ð 	#àð 	ð 	ˆAÝ�'˜A‘+ÑÔÐÐÝ‰ŒˆÝð Iñ 	Jô 	Jð 	Jð ˆqå�$�  a¤kÑ2Ô2°FÑ;Ô;€FØð õ & d¨FÑ3Ô3Ñˆ�Ýð Ø#¥S¨¡\¤\µ3°y±>´>ÐBñCñ 	Dô 	Dð 	DàˆqÝ	Ð
*­S°©[¬[Ñ
8Ñ9Ô9Ð9Øð <ð <‰ˆˆeÝˆ˜t˜t˜t˜t T§Y¢Y¨u°R°a°R¬yÑ%9Ô%9Ð%9Ð:Ñ;Ô;Ð;Ð;Ý	�G„G€GÝ	Ð
NÑOÔOÐOØˆ1rv   Ú__main__)r‚   rƒ   rw   rk   )r–   rx   rw   r—   )r–   rx   rq   rx   rw   rx   )r‘   rx   r–   rx   r¿   rk   rw   ro   rn   )r‚   rƒ   rw   rÎ   )r‚   rƒ   r¿   rk   rw   rÎ   )r‚   rƒ   r¿   rk   rw   ro   )rw   rø   )rº   r  rw   rƒ   )'r€   Ú
__future__r   r  r‹   rš   rØ   Úsysr¡   rË   r�   r¬   r­   r©   r±   r´   rÈ   r°   rk   r•   r¢   r¾   rÉ   rÍ   rà   rì   rð   rõ   Ú_ITAÚ_ENGrµ   r	  r  r
  r  r  r$  r}   Úexitrl   rv   rt   ú<module>r+     s�  ðð1ð 1ðd #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
ð"€ð& €	ð&€
ð €Ø€	ð €	ð 
€Ø	€ØˆS�‰WŒW�s‰]€
ðQð Qð Qð Qð Qñ Qô Qð Qð$ð ð ð ð*Ið Ið Ið Ið'ð 'ð 'ð 'ð` 	(€ð,ð ,ð ,ð ,ð.;ð ;ð ;ð ;ð ;ð*ð ð ð ð Oð Oð Oð Oðð ð ð ð,	1€ð	#€ð # J°°dÐ;Ø˜K¨¨tÐ4ðFðCð
$ð #Ð$4Ø9¸C¸CÀ¹G¼GÑCØ%ñ&Ø(+¨¨B©¬ñ0Ø15ð7ð $Ð%7ØAÀCÀCÈÁGÄGÑKØ#ñ$Ø&) c¨"¡g¤gñ.Ø/3ð5ð ð #Ð$6¸¸dÐCðLà)Ð+NØ	‡Y‚Yð ð ð ñ ô ð ñð ðð7#€	ðN ˜ TÐ*ðMà$Ð&CÀTÐJð?ð
 6Ø"Ø	‡Y‚Yð  ð  ð  ñ !ô !à#'ñ(ð)ð
  Ð!2°DÐ9ð -¨e°TÐ:ð-€ð4 �Ð 2Ð;KÐLÑLÔL€ð4ð 4ð 4ð 4ðn4ð 4ð 4ð 4ð 4ð(ð (ð (ð (ð (ðV ˆzÒÐØ€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðrv   