403Webshell
Server IP : 178.105.222.151  /  Your IP : 216.73.216.38
Web Server : nginx/1.28.3
System : Linux MNK 7.0.0-15-generic #15-Ubuntu SMP PREEMPT_DYNAMIC Wed Apr 22 16:06:43 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.5.4
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /usr/lib/python3/dist-packages/inflect/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3/dist-packages/inflect/__pycache__/__init__.cpython-314.pyc
+
G�Ci����(a�0t$Rt^RIHt^RIt^RIt^RIt^RIt^RIt^RI	t	^RI
Ht^RIH
t
HtHtHtHtHtHtHtHtHtHtHtHt^RIHt^RIHt^RIHt!RR	] 4t!!R
R] 4t"!RR
] 4t#!RR] 4t$!RR] 4t%!RR] 4t&!RR] 4t'RRlt(ERcRRllt)RRlt*ERdRRllt+RR R!R"R#R$R%R&R'R(R)R*R+R,R-R./t,/R/R0bR1R2bR3R4bR5R6bR7R8bR9R:bR;R<bR=R>bR?R@bRARBbRCRDbRERFbRGRHbRIRJbRKRLbRMRNbRORPb/RQRRbRSRTbRURVbRWRXbRYRZbR[R\bR]R^bR_R`bRaRbbRcRdbReRfbRgRhbRiRjbRkRlbRmRnbRoRpbCt-]-P]],4RqRrRsRtRuRvRwRx/t/RyRz/t0]-Pc4UUu/uFwrWbK		uppt2]3!]24F4t4R{]49gK]4PkR{4wt6t7]2]4,;]2]6&]2]7&]2]4K6	]/Pc4UUu/uFwrWbK		uppt8]0Pc4UUu/uFwrWbK		uppt9]3!]94F4t4R{]49gK]4PkR{4wt6t7]9]4,;]9]6&]9]7&]9]4K6	ERet:]*!]:4t;ERft<]*!]<4t=.ERgOt>R|.t?])!ERh]>]?Uu.uFpR}V2NK
	up,4t@]>]?,tA]+!]AR~^RR�7wtBtCtDERitE]+!]ER�^4wtFtGtHtIERjtJ]+!]JR�R4wtKtLtMtNERktO]+!]OR�R4wtPtQtRtSERltT]+!]TR�^4wtUtVtWtXERmtY]+!]YR�^4wtZt[t\t]ERnt^]+!]^R�^4wt_t`tatbERotc]+!]cR�^4wtdtetftgERpth]+!]hR�^4wtitjtktlERqtm]*!]m4tnERrto]+!]oR�^4wtptqtrtsERstt]+!]tR�^4wtutvtwtx.ERtOty]*!]y4tz]*!]yUu.uFq"RERuR�2NK
	up4t{])!ERu]y4t|0ERvmt}]}Uu0uFq"R�2kK		upt~.R�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NR�NERNERNERNERNERNERNERNERNERNER	NER
NERNERNER
NERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER NER!NER"NER#NER$NER%NER&NER'NER(NER)NER*NER+NER,NER-NER.NER/NER0NER1NER2NER3NER4NER5NER6NER7NER8NER9NER:NER;NER<NER=NER>NER?NER@NERANERBNERCNERDNERENERFNERGNERHNERIN]y,t]*!]4t�]*!]Uu.uFq"R�2NK		up4t�ERwt�]+!]�R�R4wt�t�t�t�ERxt�]+!]�ERJ^4wt�t�t�t�ERyt�]+!]�ERJ^4wt�t�t�t�ERzt�]+!]�ERJ^4wt�t�t�t�ER{t�]+!]�ERJ^4wt�t�t�t�ER|t�]+!]�R�R4wt�t�t�t�ER}t�]+!]�ERKR4wt�t�t�t�ERLPk4t�ERMPk4t�]+!]�R�RRR�7wt�t�t�]+!]�R�RRR�7wt�t�t�ER~t�]+!]�ERN^RR�7wt�t�t�.ERONERPNERQNERRNERSNERTNERUNERVNERWNERXNR*NERYNERZNER[NER\NER]NER^NER_NER`NERaNERbNERcNERdNEReNERfNERgNERhNERiNERjNERkNERlNERmNERnNERoNERpNt�ERqERr.t�]�]�Uu.uFpR}V2NK
	up,t�ERt�.ER�O]�,t�.ER�Ot�.ER�O]�,t�]*!]�4t�.ERtNERuNERvNERwNERxNERyNERzNER{NER|NER}NER~NERNER�NER�NER�NER�NER�NER�NER�NER�NER�NER�NER�NER�NER�NER�NER�NER�NER�NERsNER�NER�N]>,t�ER�ER�.]?,t�]*!]�4t�]�Uu.uFq"ER�2NK
	upt�]�Uu.uFq"ER�2NK
	upt�]*!]�4t�ER�.t�](!R{EP�]�]�Uu.uFpR}V2NK
	up,]�,44t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�ER�t�](!R{EP�]�.]�,]3!],4,.ER�O,44t�ER�](!ER�43ER�](!ER�43ER�](!ER�433t�ER�]�4t�ER�]�ER�&ER�R{EP�]�4ER�2t�ER�t�ER�Pk4t�]�.ER�O,t�]*!]�4t�](!R{EP�]�44t�ER�]�ER�2t�0ER�mt�/R�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�/Ct�ER�]�Pc4UUu/uFwrWbK		upp/t�ER�]�ER�&ER�]�ER�,ER�&ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�/t�](!R{EP�]�44t�]*!]�4t�]�Pc4UUu/uFwrWbK		upp]�ER�&ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�/3ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�/3ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�/3ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�/3ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�/33Fwt�t�t�]�]�]�,]�&K	](!R{EP�]�ER�,44t�]*!]�ER�,4t�ER�ER�lt�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�/	t�/ER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�bER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�ER�/Ct�]	EP�!ER�](!R{EP�]�44ER�2]	EP�4t�ER�t�]	EP�!ER�]	EP�4t�ER�t�ER�t�ER�t�ER�t�ER�t�R�ERERERERERERER/t�]	EP�!ER�](!R{EP�]�44ER2]	EP�4t�ERERER	ER	ER�ER
ER�ER
ER�ER
ER
ER
/t�]	EP�!ER�](!R{EP�]�44ER2]	EP�4t�]	EP�!ER]	EP�4t�]	EP�!ER]	EP�4t�]	EP�!ER
]	EP�4t�]	EP�!ER]	EP�4t�]	EP�!ER]	EP�4t�]	EP�!ER]	EP�4t�^ER^ER^ER^ER^ER^ER^ER^ER^ER^	ER^ER^ER^
ER/
EtE]!E]EP44EtE]!ERERERERERERERERER7Et]	EP�!ER�R{EP�E]4ER24Et.ER�OEt.ER�OEt.ER�OEt	.ER�OEt
E]!RRRRRRER 7EtE]Uu/uFqRbK	upEtE]Uu/uFqRbK	upEt
ER!RER"RER#R/Et]	EP�!ER$4Et]	EP�!ER%]	EP�4Et]	EP�!ER&4Et]	EP�!ER']�ER2]	EP�4Et]	EP�!ER']�ER2]	EP�4Et]	EP�!ER(4Et]	EP�!ER�]�ER24Et]	EP�!ER)4Et]	EP�!ER*]	EP�4Et]	EP�!ER+4Et]	EP�!ER,]	EP�4Et]	EP�!ER-]	EP�4Et]	EP�!ER.]	EP�4Et]	EP�!ER/]	EP�4Et]	EP�!ER0]	EP�4Et]	EP�!ER1]	EP�4Et]	EP�!ER2]	EP�4Et]	EP�!ER3]	EP�4Et ]	EP�!ER4]	EP�4Et!]	EP�!ER5]	EP�4Et"]	EP�!ER6]	EP�4Et#]	EP�!ER7]	EP�4Et$]	EP�!ER84Et%]	EP�!ER9]	EP�4Et&]	EP�!ER:4Et']	EP�!ER;4Et(]	EP�!ER<4Et)]	EP�!ER=4Et*]	EP�!ER>4Et+]	EP�!ER?4Et,]	EP�!ER@4Et-]	EP�!ERA4Et.]	EP�!ERB4Et/]	EP�!ERC4Et0]	EP�!ERD4Et1]	EP�!ERE4ERF3]	EP�!ERG4ERH3]	EP�!ERI4ERJ3]	EP�!ERK4ERL3]	EP�!ERM4ER3]	EP�!ERN4ERO3]	EP�!ERP4ERQ3]	EP�!ERR4ERJ3]	EP�!ERS4ERJ3]	EP�!ERT4ERU3]	EP�!ERV4ERW33Et2]	EP�!ERX4Et3!ERYERZE]44Et5]Et6]
Et7E]7'd]E]4ER[3,Et8M !ER\ER]E]94Et:!ER^ER_E]:ER`7Et8!ERaERb4Et;R#uuppiuuppiuuppiuupiuupiuupiuupiuupiuupiuupiuupiuuppiuuppiuupiuupi(�a�
inflect: english language inflection
 - correctly generate plurals, ordinals, indefinite articles
 - convert numbers to words

Copyright (C) 2010 Paul Dyson

Based upon the Perl module
`Lingua::EN::Inflect <https://metacpan.org/pod/Lingua::EN::Inflect>`_.

methods:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun no num a an
    compare compare_nouns compare_verbs compare_adjs
    present_participle
    ordinal
    number_to_words
    join
    defnoun defverb defadj defa defan

INFLECTIONS:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun compare
    no num a an present_participle

PLURALS:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun no num
    compare compare_nouns compare_verbs compare_adjs

COMPARISONS:
    classical
    compare compare_nouns compare_verbs compare_adjs

ARTICLES:
    classical inflect num a an

NUMERICAL:
    ordinal number_to_words

USER_DEFINED:
    defnoun defverb defadj defa defan

Exceptions:
 UnknownClassicalModeError
 BadNumValueError
 BadChunkingOptionError
 NumOutOfRangeError
 BadUserDefinedPatternError
 BadRcFileError
 BadGenderError

)�annotationsN)�Number)
�
TYPE_CHECKING�Any�Callable�Dict�Iterable�List�Literal�Match�Optional�Sequence�Tuple�Union�cast)�windowed_complete)�typechecked)�	Annotatedc��]tRt^VtRtR#)�UnknownClassicalModeError�N��__name__�
__module__�__qualname__�__firstlineno__�__static_attributes__r��2/usr/lib/python3/dist-packages/inflect/__init__.pyrrV���rrc��]tRt^ZtRtR#)�BadNumValueErrorrNrrrrr!r!Zrrr!c��]tRt^^tRtR#)�BadChunkingOptionErrorrNrrrrr#r#^rrr#c��]tRt^btRtR#)�NumOutOfRangeErrorrNrrrrr%r%brrr%c��]tRt^ftRtR#)�BadUserDefinedPatternErrorrNrrrrr'r'frrr'c��]tRt^jtRtR#)�BadRcFileErrorrNrrrrr)r)jrrr)c��]tRt^ntRtR#)�BadGenderErrorrNrrrrr+r+nrrr+c� �V^8�dQhRRRR/#)��s�str�returnr)�formats"r�__annotate__r2rs����s��s�rc��RVR2#)z(?:�)r)r.s&r�encloser5rs��
���1�:�rc�$�V^8�dQhRRRRRR/#)r-�cutpoint�
Optional[int]�wordszOptional[Iterable[str]]r0r/r)r1s"rr2r2vs(��@�@�}�@�1H�@�TW�@rc�`a�\RPV3RlT;'g.444#)a]
Join stem of each word in words into a string for regex.

Each word is truncated at cutpoint.

Cutpoint is usually negative indicating the number of letters to remove
from the end of each word.

>>> joinstem(-2, ["ephemeris", "iris", ".*itis"])
'(?:ephemer|ir|.*it)'

>>> joinstem(None, ["ephemeris"])
'(?:ephemeris)'

>>> joinstem(5, None)
'(?:)'
�|c3�,<"�TF	qRSx�K	R#5i�Nr)�.0�wr7s& �r�	<genexpr>�joinstem.<locals>.<genexpr>�s����>�+�Q�i�x�L�+�s�)r5�join)r7r9sf&r�joinstemrCvs'���$�3�8�8�>�%�+�+�2�+�>�>�?�?rc� �V^8�dQhRRRR/#)r-r9�
Iterable[str]r0zDict[int, set]r)r1s"rr2r2�s����-��N�rc��\P!\4pVF$pV\V4,P	V4K&	V#)z�
From a list of words, return a dict of sets sorted by word length.

>>> words = ['ant', 'cat', 'dog', 'pig', 'frog', 'goat', 'horse', 'elephant']
>>> ret = bysize(words)
>>> sorted(ret[3])
['ant', 'cat', 'dog', 'pig']
>>> ret[5]
{'horse'}
)�collections�defaultdict�set�len�add)r9�resr?s&  r�bysizerM�s7��&�1�1�#�6�C�
���C��F��������JrTc�(�V^8�dQhRRRRRRRR/#)	r-�lstrE�plendingr/�siendingsizer8�
dojoinstem�boolr)r1s"rr2r2�s0��!-�!-�	�!-��!-� �!-��	!-rc��VeV)pVUu.uFqDRVV,NK	pp\V4p\V4pV'd\W 4pWWWh3#WWV3#uupi)a=
given a list of singular words: lst

an ending to append to make the plural: plending

the number of characters to remove from the singular
before appending plending: siendingsize

a flag whether to create a joinstem: dojoinstem

return:
a list of pluralised words: si_list (called si because this is what you need to
look for to make the singular)

the pluralised words as a dict of sets sorted by word length: si_bysize
the singular words as a dict of sets sorted by word length: pl_bysize
if dojoinstem is True: a regular expression that matches any of the stems: stem
N)rMrC)	rOrPrQrRr?�si_list�	pl_bysize�	si_bysize�stems	&&&&     r�make_pl_si_listsrY�sl��0��$�}��47�8�C�q��,��(�*�*�C�G�8��s��I��w��I����*���9�2�2��9�,�,��9s�A�corpuszcorpuses|corpora�opuszopuses|opera�genus�genera�mythos�mythoi�penisz
penises|penes�testis�testes�atlaszatlases|atlantes�yes�yeses�child�children�chilizchilis|chilies�brotherzbrothers|brethren�infinityzinfinities|infinity�loaf�loaves�lorez
lores|lore�hoofzhoofs|hooves�beefzbeefs|beeves�thiefzthiefs|thieves�money�monies�mongoose�	mongooses�ox�oxen�cowz	cows|kine�graffito�graffiti�octopuszoctopuses|octopodes�geniezgenies|genii�ganglionzganglions|ganglia�trilby�trilbys�turfzturfs|turves�numen�numina�atman�atmas�occiputzocciputs|occipita�
sabretooth�sabretooths�
sabertooth�sabertooths�lowlife�lowlifes�flatfoot�	flatfoots�
tenderfoot�tenderfoots�romany�romanies�jerry�jerries�mary�maries�talouse�talouses�rom�roma�carmen�carmina�Romany�Romanies�Jerry�Jerrys�Mary�Marys�Rom�Romazprima donnazprima donnas|prime donner;�itisz.*�idesF)rR�ata�e�ina�a�ir.�
aficionado�aggro�albino�allegro�ammo�Antananarivo�archipelago�	armadillo�auto�avocado�Bamako�Barquisimeto�bimbo�bingo�Biro�bolero�Bolzano�bongo�Boto�burro�Cairo�canto�
cappuccino�casino�cello�Chicago�Chimango�cilantro�cochito�coco�Colombo�Colorado�commando�
concertino�contango�credo�	crescendo�cyano�demo�ditto�Draco�dynamo�embryo�	Esperanto�espresso�euro�falsetto�Faro�fiasco�Filipino�flamenco�furioso�
generalissimo�Gestapo�ghetto�gigolo�gizmo�
Greensboro�gringo�	Guaiabero�guano�gumbo�gyro�hairdo�hippo�Idaho�impetigo�inferno�info�
intermezzo�
intertrigo�Iquico�jumbo�junto�Kakapo�kilo�	Kinkimavo�Kokako�Kosovo�Lesotho�libero�libido�libretto�lido�Lilo�limbo�limo�lineno�lingo�lino�livedo�loco�logo�lumbago�macho�macro�mafioso�magneto�	magnifico�Majuro�Malabo�	manifesto�Maputo�	Maracaibo�medico�memo�metro�Mexico�micro�Milano�Monaco�mono�
Montenegro�Morocco�Muqdisho�myo�neutrino�Ningbo�octavo�oregano�Orinoco�Orlando�Oslo�panto�
Paramaribo�Pardusco�pedalo�photo�pimento�pinto�pleco�Pluto�pogo�polo�ponchoz
Porto-Novo�Porto�pro�psycho�pueblo�quarto�Quito�repo�rhino�risotto�rococo�rondo�
Sacramento�saddo�sago�salvo�Santiago�Sapporo�Sarajevo�
scherzando�scherzo�silo�sirocco�sombrero�staccato�sterno�stucco�stylo�sumo�Taiko�techno�terrazzo�testudo�timpano�tiro�tobacco�Togo�Tokyo�torero�Torino�Toronto�torso�tremolo�typo�tyro�ufo�UNESCO�vaquero�
vermicello�verso�vibrato�violoncello�Virgo�weirdo�WHO�WTO�Yamoussoukrozyo-yo�zero�Zibo�ices�imzq
    ataman caiman cayman ceriman
    desman dolman farman harman hetman
    human leman ottoman shaman talisman
z�
    Alabaman Bahaman Burman German
    Hiroshiman Liman Nakayaman Norman Oklahoman
    Panaman Roman Selman Sonaman Tacoman Yakiman
    Yokohaman Yuman
�lice�breeches�britches�pajamas�pyjamas�clippers�gallows�hijinks�headquarters�pliers�scissors�herpes�pincers�shears�proceedings�trousers�cantus�coitus�nexus�contretemps�corps�debris�siemens�mumps�diabetes�
jackanapes�series�species�
subspecies�rabies�chassis�innings�news�mews�haggis�ois�measles�
rhinoceros�	acropolis�aegis�alias�asbestos�bathos�bias�
bronchitis�bursitis�caddis�cannabis�canvas�chaos�cosmos�dais�	digitalis�	epidermis�ethos�eyas�gas�glottis�hubris�ibis�lens�mantis�marquis�
metropolis�pathos�pelvis�polis�	sassafras�trellis�ss�us�esz	[A-Z].*es�does�generalz1(?!major|lieutenant|brigadier|adjutant|.*star)\S+�martial�court�force�poundc#�R"�TFwr\VRVR2,4x�K	R#5i)z(?=(?:-|\s+)r4N)r5)r>�key�vals&  rr@r@�s,���$�:Q�h�c�G�C�M�#��a�(�(�)�)�:Q�s�%'rE�pl_sb_postfix_adj�(z)(.*)z�
    about above across after among around at athwart before behind
    below beneath beside besides between betwixt beyond but by
    during except for from in into near of off on onto out over
    since till to under until unto upon withz(.*?)((?:-|\s+)(?:z)(?:-|\s+))a(?:-|\s+)(.*)�neuter�feminine�	masculine�gender-neutral�feminine or masculine�masculine or feminine�we�myself�	ourselves�you�yourself�
yourselves�she�they�herself�
themselves�he�himself�it�itself�themself�mine�ours�yours�hers�theirs�his�its�nomz0Dict[str, Dict[str, Union[str, Dict[str, str]]]]�si_pron�I�me�her�them�him�accz	she or hez	he or shezherself or himselfzhimself or herselfzhers or hiszhis or hersz
her or himz
him or herc��V^8�dQhRR/#�r-r0r/r)r1s"rr2r2�s����#�rc��\V,V,pY2,# \dhi;i \d\\T4u#i;ir=)r��KeyError�	TypeErrorrr/)�thecase�word�gender�sings&&& r�get_si_pronr��sS����w���%����|�����
������C�����s��/�
,�A
�A
�am�are�is�was�were�have�has�do�act�acts�blame�blames�can�must�fly�flies�copy�copies�drink�drinks�fight�fights�fire�fires�like�likes�look�looks�make�makes�reach�reaches�run�runs�sink�sinks�sleep�sleeps�view�viewsz^(z)((\s.*)?)$z0^((?:thought|saw|bent|will|might|cut))((\s.*)?)$�an�this�that�some�these�thosez)$�my�our�your�theirz~
^(?! FJO | [HLMNS]Y.  | RY[EO] | SQU
  | ( F[LR]? | [HL] | MN? | N | RH? | S[CHKLMNPTVW]? | X(YL)?) [AEIOU])
[FHLMNRSX][A-Z]
z)^(y(b[lor]|cl[ea]|fere|gg|p[ios]|rou|tt))z^((?:unabomber|unanimous|US))z0^((?:euler|hour(?!i)|heir|honest|hono[ur]|mpeg))z^([aefhilmnorsx]-?th)z^([bcdgjkpqtuvwyz]-?th)�th�st�nd�rd�tieth�first�second�third�fifth�eighth�ninth�twelfth)�ty�one�two�three�five�eight�nine�twelvez)\Z�)�allri�herd�names�persons�ancient�True�False�Nonez\$(\d+)z((\w+)\([^)]*\)*)z\A(\s*)(.+?)(\s*)\Zz^(?:z (?P<denominator>.+)( (per|a) .+)z\sz^(.*[^s])s$z	^(.+)'s?$z\A(\s*)(?:an?\s+)?(.+?)(\s*)\Zz^[aefhilmnorsx]$z^[bcdgjkpqtuvwyz]$z^[aefhilmnorsx][.-]z
^[a-z][.-]z
^[^aeiouy]z^e[uw]z^onc?e\bz
^onetime\bz^uni([^nmd]|mo)z^u[bcfghjkqrst][aeiou]z^ukrz
^U[NK][AIEO]?z^[aeiou]z(\d)z(\d)(\d)z(\d)(\d)(\d)z(\d)(\d)(\d)(?=\D*\Z)z(\d)(\d)(?=\D*\Z)z
(\d)(?=\D*\Z)z(\d)(\d{3}(?:,|\Z))z\Dz\s+,z, (\S+)\s+\Zz\s+zie$�yzue$�uz	([auy])e$z\g<1>zski$�skiz[^b]i$z^(are|were)$�bez^(had)$�havz^(hoe)$z([^e])e$zer$�erz ([^aeiou][aeiouy]([bdgmnprst]))$z
\g<1>\g<2>z\dc�L�]tRtRt$R]R&R]R&R]R&R]R&RR	ltR
tR#)�Wordsi�r/�loweredz	List[str]�split_r%�lastc��V^8�dQhRR/#�r-r0r<r)r1s"rr2�Words.__annotate__�s��$�$��$rc	��VP4VnVP4VnVP^,VnVPR,VnR#)�N���)�lowerrE�splitrFr%rG)�self�origs&&r�__init__�Words.__init__�s:���z�z�|����j�j�l����[�[��^��
��K�K��O��	r)r%rGrErFN)rrrr�__annotations__rRrrrrrDrD�s!��
�L����J�

�I�$�$rrD� String with at least 1 characterc�"�]tRtRtRRltRtR#)�	_WordMetaic� �V^8�dQhRRRR/#)r-�instancerr0rSr)r1s"rr2�_WordMeta.__annotate__s��	D�	D�c�	D�d�	Drc	�N�\V\4;'d\V4^8�#��)�
isinstancer/rJ)rPrYs&&r�__instancecheck__�_WordMeta.__instancecheck__s ���h��,�C�C��X��!�1C�CrrN)rrrrr_rrrrrWrWs��	D�	DrrWc��]tRtRtRtRtR#)�WordirUrN)rrrr�__doc__rrrrrbrbs��.rrb)�	metaclassc��]tRtRtRRlt]R4t]PR4t]RRl4t	]RR	l4t
]R
Rl4t]RR
l4t]RRl4t
RRltRRlt]RRl4tRRltR~RRlltRRltRtRRlt]R R!l4tR"R#ltR$R%lt]RR&R'll4t]RR(R)ll4t]RR*R+ll4t]RR,R-ll4t]R.R/l4t]R0R1l4t]R2R3l4t]R4R5l4t ]R~R6R7ll4t!R8R9lt"R:R;lt#R<R=lt$R>R?lt%RR@RAllt&RRBRCllt'](RD4t)RERFlt*]+RG4t,RRHRIllt-RRJRKllt.RRLRMllt/R~RNROllt0]R�RPRQll4t1]1t2]3RR3]4RS3]5RS3]6RS3]7RR3]8RS3]9RS3]:RR3];RR3]<RR3]=RR3]>RR3]?RR3]@RR3]ARR3]BRR3]CRR3]DRS3]ERS33tFRTRUltG]RRVRWll4tH]RXRYl4tI]RZR[l4tJR�R\R]lltKR�R^R_lltLR�R`RalltMRbRcltNRdReltORfRgltPRhRiltQRjRkltRRlRmltSRnRoltTRpRqltURrRsltV]+Rt4tW](Ru4tX]+Rv4tY]+Rw4tZ]R�RxRyll4t[]+Rz4t\]R�R{R|ll4t]R}t^R#)��engineic��V^8�dQhRR/#rIr)r1s"rr2�engine.__annotate__s��
<�
<�$�
<rc	��\P4VnRVn^Vn.Vn.Vn.Vn.Vn.Vn	RVn
RVnR#)Nr�)�
def_classicalr��classical_dict�persistent_count�
mill_count�pl_sb_user_defined�pl_v_user_defined�pl_adj_user_defined�si_sb_user_defined�A_a_user_defined�	thegender�_engine__number_args�rPs&rrR�engine.__init__sY��+�0�0�2���/3������8:���79���9;�� �8:���68���!���7;��rc	�X�\\\\3,VP4#r=)rrr/rtrus&r�_number_args�engine._number_args$s���D��c��N�D�$6�$6�7�7rc	��WnR#r=)rt)rPr�s&&rrxry(s�� �rc�$�V^8�dQhRRRRRR/#�r-�singular�Optional[Word]�pluralr0�intr)r1s"rr2rh-s!��	�	��	��	�3�	rc
��VPV4VPV4VPPW34VPPW!34^#)z-
Set the noun plural of singular to plural.

)�checkpat�checkpatpluralrn�extendrq�rPr}rs&&&r�defnoun�engine.defnoun,sO��	
�
�
�h�����F�#����&�&��'9�:����&�&��'9�:�rc�4�V^8�dQhRRRRRRRRRRRRRR	/#)
r-�s1r~�p1�s2�p2�s3�p3r0r�r)r1s"rr2rh9sP������
��
�	�

��
�
�
��

�rc
��VPV4VPV4VPV4VPV4VPV4VPV4VPPWW4WV34^#)z�
Set the verb plurals for s1, s2 and s3 to p1, p2 and p3 respectively.

Where 1, 2 and 3 represent the 1st, 2nd and 3rd person forms of the verb.

)r�r�ror�)rPr�r�r�r�r�r�s&&&&&&&r�defverb�engine.defverb8sp�� 	
�
�
�b���
�
�b���
�
�b�����B�����B�����B�����%�%�r�r�r�&>�?�rc�$�V^8�dQhRRRRRR/#r|r)r1s"rr2rhRs!����~��~��#�rc
��VPV4VPV4VPPW34^#)z2
Set the adjective plural of singular to plural.

)r�r�rpr�r�s&&&r�defadj�
engine.defadjQs8��	
�
�
�h�����F�#�� � �'�'��(:�;�rc� �V^8�dQhRRRR/#�r-�patternr~r0r�r)r1s"rr2rh]s����N��s�rc
�b�VPV4VPPVR34^#)zC
Define the indefinite article as 'a' for words matching pattern.

r��r�rrr��rPr�s&&r�defa�engine.defa\s+��	
�
�
�g�����$�$�g�s�^�4�rc� �V^8�dQhRRRR/#r�r)r1s"rr2rhgs����^���rc
�b�VPV4VPPVR34^#)zD
Define the indefinite article as 'an' for words matching pattern.

rr�r�s&&r�defan�engine.defanfs+��	
�
�
�g�����$�$�g�t�_�5�rc� �V^8�dQhRRRR/#�r-r�r~r0r<r)r1s"rr2rhps��	?�	?��	?�4�	?rc
��VfR#\P!VR4R# \Pdp\T4ThRp?ii;i)z%
check for errors in a regex pattern
Nr4)�re�match�errorr')rPr��errs&& rr��engine.checkpatps@���?��	?��H�H�W�b�!���x�x�	?�,�W�5�3�>��	?�s�!�A�A�Ac� �V^8�dQhRRRR/#r�r)r1s"rr2rh{s����n���rc
��R#)z-
check for errors in a regex replace pattern
Nrr�s&&rr��engine.checkpatplural{s��	rc�$�V^8�dQhRRRRRR/#)r-r�rb�wordlistzSequence[Optional[Word]]r0�
Optional[str]r)r1s"rr2rh�s"��
�
�T�
�-E�
�-�
rc
	�n�\\V4^,
RR4F�p\P!RW#,R2V\P4pV'gK=W#^,,fR#\
P
R\\W#^,,44pVPV4u#	R#)r-�^�$Nz\\1���)
�rangerJr��search�
IGNORECASE�
DOLLAR_DIGITS�subrrb�expand)rPr�r�r��mo�pls&&&   r�ud_match�engine.ud_match�s����s�8�}�q�(�"�b�1�A����a���}�A�.��b�m�m�D�B��r���E�?�*��"�&�&��D��x�A���7����y�y��}�$�2�rc��V^8�dQhRR/#rIr)r1s"rr2rh�s�� 0� 0�T� 0rc
�N�V'g\P4VnR#RV9dCVR,'d\P4VnM\P4VnVP	4F$wr#V\
9dW0PV&K \h	R#)a[
turn classical mode on and off for various categories

turn on all classical modes:
classical()
classical(all=True)

turn on or off specific claassical modes:
e.g.
classical(herd=True)
classical(names=False)

By default all classical modes are off except names.

unknown value in args or key in kwargs raises
exception: UnknownClasicalModeError

Nr5)�
all_classicalr�rk�no_classical�itemsrjr)rP�kwargs�k�vs&,  r�	classical�engine.classical�s{��&�"/�"4�"4�"6�D����F�?��e�}�}�&3�&8�&8�&:��#�&2�&7�&7�&9��#��L�L�N�D�A��M�!�)*�#�#�A�&�/�/�	#rNc�$�V^8�dQhRRRRRR/#)r-�countr8�showr0r/r)r1s"rr2rh�s$����"��1>��	�rc
��Ve,\V4VnTe	T'd\	T4#R#RVnR# \d
p\ThRp?ii;i)zl
Set the number to be used in other method calls.

Returns count.

Set show to False to return '' instead.

Nr4)r�rl�
ValueErrorr!r/)rPr�r�r�s&&& r�num�
engine.num�s_����
0�(+�E�
��%�����5�z�!�"&��%)�D�!���
�
0�&�C�/��
0�s�9�A�A�Ac� �V^8�dQhRRRR/#)r-r�r/r0r<r)r1s"rr2rh�s��!�!�S�!�T�!rc
�4�V\9d	WnR#\h)aK
set the gender for the singular of plural pronouns

can be one of:
'neuter'                ('they' -> 'it')
'feminine'              ('they' -> 'she')
'masculine'             ('they' -> 'he')
'gender-neutral'        ('they' -> 'they')
'feminine or masculine' ('they' -> 'she or he')
'masculine or feminine' ('they' -> 'he or she')
N)�singular_pronoun_gendersrsr+)rPr�s&&rr��
engine.gender�s���-�-�#�N� � rc
���\V\P4'd
VP#\V\P4'd+VP
Uu.uFq P
V4NK	up#\V\P4'd4\VP
Uu.uFq P
V4NK	up4#\RVPR24huupiuupi)z%
Return the value of the ast object.
zname 'z' is not defined)r^�ast�Constant�valuer	�elts�_get_value_from_astr�tuple�	NameError�id)rP�objr�s&& rr��engine._get_value_from_ast�s����c�3�<�<�(�(��9�9��
��S�X�X�
&�
&�9<���B��A�,�,�Q�/��B�B�
��S�Y�Y�
'�
'��s�x�x�H�x�!�2�2�1�5�x�H�I�I�
�&�����(8�9�:�:��C��Hs�C#�*C(c�$�V^8�dQhRRRRRR/#)r-r�r�methods_dictzDict[str, Callable]r0r/r)r1s"rr2rh�s$��?�?��?�':�?�	�?rc
���VP4wr4WB9dV#\P!V4pVP^,PP
Uu.uFpVP
V4NK	ppVP^,PPUu/uF)pVPVP
VP4bK+	p	pW$,!V/V	B#uupiuupi)z4
Return the string to be substituted for the match.
)	�groupsr��parse�bodyr��argsr��keywords�arg)
rPr�r��matched_text�f_name�a_treer��	args_list�kw�kwargs_lists
&&&       r�_string_to_substitute�engine._string_to_substitute�s��� "�y�y�{���
�%������<�(��
�[�[��^�)�)�.�.�
�.��
�$�$�Q�'�.�	�
��k�k�!�n�*�*�3�3�
�3��
�F�F�D�,�,�R�X�X�6�6�3�	�
��#�Y�>�+�>�>��
��
s�C�/C#c� �V^8�dQhRRRR/#)r-�textrbr0r/r)r1s"rr2rh	s��#�#�D�#�S�#rc
�aa�SPpRSPRSPRSPRSPRSP
RSPRSPRSPR	SPR
SPRSPRSP/o\PVV3R
lV4pVSnV#)z�
Perform inflections in a string.

e.g. inflect('The plural of cat is plural(cat)') returns
'The plural of cat is cats'

can use plural, plural_noun, plural_verb, plural_adj,
singular_noun, a, an, no, ordinal, number_to_words,
and prespart

r�
plural_adj�plural_noun�plural_verb�
singular_nounr�r�no�ordinal�number_to_words�present_participler�c�(<�SPVS4#r=)r�)r�r�rPs&��r�<lambda>� engine.inflect.<locals>.<lambda>(	s���t�1�1�"�l�Cr)rlrr�r�r�r�r�r�r�r�r�r��
FUNCTION_CALLr�)rPr��save_persistent_count�outputr�sf&  @r�inflect�engine.inflect	s����!%� 5� 5��
�d�k�k��$�/�/��4�+�+��4�+�+��T�/�/������$�&�&��$�'�'��t�|�|��t�3�3� �$�"9�"9��4�8�8�
-
�� �"�"�C�T�
��!6����
rc� �V^8�dQhRRRR/#)r-rQr/r0r)r1s"rr2rh/	s�� � �� �3� rc	�J�\V4pRV9d�VPR4p\V^,PR44\V^,PR448Xd:VPR4VPR,,PR4pMkVPR4p\	V4F9wrVRV9gKVPR4VPR,,WE&K;	MVPR4p\	VPR44FiwrVVR8XdKVP4V8XdWE,P4WE&WfP
48XgKQWE,P
4WE&Kk	RPV4#)r;� r5r�)r/rOrJrk�	enumerate�
capitalize�upperrB)rPrQ�	inflected�word_options�result�indexr�s&&&    r�postprocess�engine.postprocess/	sI���	�N�	��)��$�?�?�3�/�L��<��?�(�(��-�.�#�l�1�o�6K�6K�C�6P�2Q�Q�"����-�d�.A�.A�%�.H�I�O�O�PS�T��#����-��#,�V�#4�K�E��d�{�(,�
�
�3���8K�8K�E�8R�(S��
�$5��_�_�S�)�F�%�T�Z�Z��_�5�K�E��s�{�
���� �D�(� &�
� 8� 8� :��
��z�z�|�#� &�
� 3� 3� 5��
�6��x�x���rc� �V^8�dQhRRRR/#)r-r�r/r0zTuple[str, str, str]r)r1s"rr2rhM	s����3��+?�rc	��\PV4pV'd3VP^4VP^4VP^43#R#)r])r4r4r4)�PARTITION_WORDr��group)rPr�r�s&& r�partition_word�engine.partition_wordM	s@��
�
"�
"�4�
(��
��8�8�A�;������R�X�X�a�[�8�8��rc�$�V^8�dQhRRRRRR/#�r-r�rbr�zOptional[Union[str, int, Any]]r0r/r)r1s"rr2rhU	s#��&�&�4�&�(F�&�RU�&rc
���VPV4wr4pV'gV#TPTVPWB4;'g+VPWB4;'gVP	WB44pVVV2#)z�
Return the plural of text.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)rr�_pl_special_adjective�_pl_special_verb�_plnoun�rPr�r��prer��postrs&&&    rr�
engine.pluralT	s����-�-�d�3���4���K��!�!���&�&�t�3�
)�
)��$�$�T�1�
)�
)��|�|�D�(�	
����v�h�t�f�%�%rc�$�V^8�dQhRRRRRR/#rr)r1s"rr2rhm	�$��&�&��&�!?�&�	�&rc
��VPV4wr4pV'gV#VPW@PWB44pVVV2#)z�
Return the plural of text, where text is a noun.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)rrrrs&&&    rr��engine.plural_nounl	sL���-�-�d�3���4���K��!�!�$���T�(A�B����v�h�t�f�%�%rc�$�V^8�dQhRRRRRR/#rr)r1s"rr2rh�	s$��&�&��&�!?�&�	�&rc
���VPV4wr4pV'gV#TPTVPWB4;'gVPWB44pVVV2#)z�
Return the plural of text, where text is a verb.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)rrr�_pl_general_verbrs&&&    rr��engine.plural_verb�	si���-�-�d�3���4���K��!�!���!�!�$�.�T�T�$�2G�2G��2T�
����v�h�t�f�%�%rc�$�V^8�dQhRRRRRR/#rr)r1s"rr2rh�	rrc
��VPV4wr4pV'gV#TPY@PWB4;'gT4pVVV2#)z�
Return the plural of text, where text is an adjective.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)rrrrs&&&    rr��engine.plural_adj�	sW���-�-�d�3���4���K��!�!�$�(B�(B�4�(O�(W�(W�SW�X����v�h�t�f�%�%rc�$�V^8�dQhRRRRRR/#�r-�word1rb�word2r0�Union[str, bool]r)r1s"rr2rh�	s"��2�2�T�2�$�2�3C�2rc
�aaa�SPSPSP3pVVV3RlV4p\\	RV4R4#)a
compare word1 and word2 for equality regardless of plurality

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

>>> compare = engine().compare
>>> compare("egg", "eggs")
's:p'
>>> compare('egg', 'egg')
'eq'

Words should not be empty.

>>> compare('egg', '')
Traceback (most recent call last):
...
typeguard.TypeCheckError:...is not an instance of inflect.Word
c3�J<"�TFpSPSSV4x�K	R#5ir=)�_plequal)r>�normrPr+r,s& ���rr@�!engine.compare.<locals>.<genexpr>�	s!����G���4�=�=���t�4�4��s� #NF)r�r�r��next�filter)rPr+r,�norms�resultssfff  r�compare�engine.compare�	s?���2� � �$�"2�"2�D�O�O�C��G��G���F�4��)�5�1�1rc�$�V^8�dQhRRRRRR/#r*r)r1s"rr2rh�	�"��
=�
=�4�
=��
=�9I�
=rc
�:�VPWVP4#)a2
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as nouns

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r0r��rPr+r,s&&&r�
compare_nouns�engine.compare_nouns�	����}�}�U�4�+;�+;�<�<rc�$�V^8�dQhRRRRRR/#r*r)r1s"rr2rh�	r:rc
�:�VPWVP4#)a2
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as verbs

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r0r�r<s&&&r�
compare_verbs�engine.compare_verbs�	r?rc�$�V^8�dQhRRRRRR/#r*r)r1s"rr2rh�	s"��
<�
<�$�
<�t�
<�8H�
<rc
�:�VPWVP4#)a7
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as adjectives

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r0r�r<s&&&r�compare_adjs�engine.compare_adjs�	s���}�}�U�4�?�?�;�;rc�(�V^8�dQhRRRRRRRR/#)	r-r�rbr��Optional[Union[int, str, Any]]r�r�r0zUnion[str, Literal[False]]r)r1s"rr2rh�	s2��'�'��'�.�'��	'�

$�'rc
��VPV4wrEpV'gV#VPWRVR7pVRJdVPWW4pVVV2#R#)a	
Return the singular of text, where text is a plural noun.

If count supplied, then return the singular if count is one of:
    1, a, an, one, each, every, this, that or if count is None

otherwise return text unchanged.

Whitespace at the start and end is preserved.

>>> p = engine()
>>> p.singular_noun('horses')
'horse'
>>> p.singular_noun('knights')
'knight'

Returns False when a singular noun is passed.

>>> p.singular_noun('horse')
False
>>> p.singular_noun('knight')
False
>>> p.singular_noun('soldier')
False

�r�r�F)r�_sinounr)	rPr�r�r�rr�rr�rs	&&&&     rr��engine.singular_noun�	sa��B�-�-�d�3���4���K��|�|�D�f�|�=���u���%�%�d�1�F��U�6�(�4�&�)�)�rc�$�V^8�dQhRRRRRR/#)r-r+r/r,r0r-r)r1s"rr2rh%
s"����c��#��6F�rc	��VPP4p\\3F@pVP4VnW8XdR#W!V48XdR#V!V4V8XgK?R#	VP4VnW0P8XgW0P
8Xd3VP
W4'dR#VP
W!4'dR#W0P8XgW0P8XdVPW4'dR#R#)�eqzp:szs:pzp:pF)	rkr�r�r�rr��_pl_check_plurals_Nr��_pl_check_plurals_adj)rPr+r,r��classval�
dictionarys&&&&  rr0�engine._plequal%
s����&�&�+�+�-��(�,�7�J�",�/�/�"3�D���~����5�	�!���%�y�E�!��8�'�m�m�o���
�����&6�&6� 6��'�'��5�5���'�'��5�5��
�����o�o� 5��)�)�%�7�7��rc
�,�V^8�dQhRRRRRRRRRR/#)r-�pairr/�stems�end1�end2r0rSr)r1s"rr2rh;
s/��.�.�C�.��.�3�.�c�.�d�.rc	�d�RVRVRVRVRVR2p\\P!WQ44#)r�z)(z\|\1r;r4)rSr�r�)rPrWrXrYrZr�s&&&&& r�_pl_reg_plurals�engine._pl_reg_plurals;
s<���u�g�R��v�T�$��q���d�4�&��B���B�I�I�g�,�-�-rc�$�V^8�dQhRRRRRR/#�r-r+r/r,r0rSr)r1s"rr2rh?
s!��
�
��
�S�
�T�
rc	�Vaa�\RR3\RR3\RR3\RR3\RR	3\
R
R3\RR	3\R
R3\RR3\RR3\RR3\RR3RRRR3p\\W34pRPRV44oS\P!49;'g{S\"P!49;'g\S\$P!49;'g=\&;QJd VV3RlV4F'gKR#	R#!VV3RlV44#)�asr�r�r�r.r��ensr��umsr��usesr��ons�os�exesrk�ixesrlr;c3�8"�TFqPx�K	R#5ir=)rG)r>r�s& rr@�-engine._pl_check_plurals_N.<locals>.<genexpr>T
s���4�e�d�	�	�e�s�c3�P<"�TFwrpSPSWV4x�K	R#5ir=)r\)r>rXrYrZrWrPs&   ��rr@rjZ
s/�����)5�%�E���$�$�T�5��=�=�)5�s�#&TF)z.*eaur.�x)z.*ieur.rl)z.*tri�xes�ces)z.{2,}[yia]nrm�ges)�
pl_sb_C_a_ata�pl_sb_C_is_ides�pl_sb_C_a_ae�pl_sb_C_en_ina�pl_sb_C_um_a�pl_sb_C_us_i�pl_sb_C_on_a�pl_sb_C_o_i_stems�pl_sb_C_ex_ices�pl_sb_C_ix_ices�	pl_sb_C_i�
pl_sb_C_im�maprDrB�pl_sb_irregular_s�values�pl_sb_irregular�pl_sb_irregular_caps�any)rPr+r,�stem_endingsr9rWsf&&  @rrQ�engine._pl_check_plurals_N?
sJ���
�D�%�(�
�d�F�+�
�3��$�
�U�E�*�
�5�#�&�
�6�3�'�
�5�#�&�
��c�*�
�f�f�-�
�f�f�-�
��S�!�
��d�#���#�)�!
��&�E�E�>�*���x�x�4�e�4�4��
�%�,�,�.�.�
�
���-�-�/�/�
�
��+�2�2�4�4�
�
��s��)5��s�s�		
��		
���)5���		
rc�$�V^8�dQhRRRRRR/#r_r)r1s"rr2rh`
s!��
�
�3�
�s�
�t�
rc	�V�VPR4'dVRVPR4MRpVPR4'dVRVPR4MRp\V4;'d>\V4;'d+VPW44;'gVPWC4#)�'s�'Nr4)r�r�)�endswith�rfindrSrQ)rPr+r,�word1a�word2as&&&  rrR�engine._pl_check_plurals_adj`
s���.3�n�n�[�.I�.I��)����S�)�*�r��.3�n�n�[�.I�.I��)����S�)�*�r��
��L�
�
��V��
�
��(�(��8�<�<��+�+�F�;�	
rc� �V^8�dQhRRRR/#)r-r��Optional[Union[str, int]]r0zUnion[str, int]r)r1s"rr2rhm
s����8��O�rc	��VfVPe
VPpVeX\V4\9g<VPR,'d'\V4P	4\
9d^pV#^pV#RpV#)Nrir4)rlr/�pl_count_onerkrN�
pl_count_zero)rPr�s&&r�	get_count�engine.get_countm
s����=�T�2�2�>��)�)�E�����Z�<�/��+�+�F�3�3���J�,�,�.�-�?��
���	�
����E��rc�$�V^8�dQhRRRRRR/#�r-r�r/r�r�r0r)r1s"rr2rh�
s)��_�_��_� 9�_�	�_rc	�2�VPV4pV^8XdV#VPWP4pVeV#VR8XdV#\V4pVPP4\9d:\VP4^8�dVPV^R7;'gT#V#V\9dV#\P4FwrEVPV)RV9gKVu#	VPR,'d&VPP4\9dV#\ P#V4pV'dKVP%^4R8wd5VP'VP%^4^4VP%^42#RVP9gRVP9d�\(P#V4pV'd�VP%^4R8wdkVP%^4R8wdUVP'VP%^4^4VP%^4VP'VP%^442#\VP4^8�dVPV^R7pVeV#\*P#VP4pV'd5\VP%R44pVP'VRV4WR2#\VP4^8�d\VPR@,R8XdDR	P-VP'VP.4.VPR
,,4#\0P2!\44;_uu_4VP7VP\8P:!VP&^R7R4uuRRR4# +'giM;i\<P4F�wrETPT)RT9gK\>P4F�wr�TPRT	T
9gKTPPA4TPRT	TPT)R.8XgKYTPRT)\BTPT)R,,uu#	K�	\DTP,# \FdMi;i\BTP,# \FdMi;iTP\H9d5\TP4pTRT)\HTP,2#TPP4pT\J9d!\T4pTRT)\JT,2#TPPAR4p
R	P-T
R@R4P4\L9dS\R	P-T
R@R44pTRT)\LR	P-T
R@R4P4,2#TPRARR8Xd	TRRBR
2#TPRCRR8Xd'TPR,'dTR2#TRRDR2#TPRARR8Xdp\NP4F!wrETPT)RT9gKTR2u#	\PP4FwrEY)RT9gKTR2u#	TRRAR2#TPRERR8Xd	TRRER2#TPRERR8XdE\RPU\T44pT'dTPT9d	TRRER2#TR2#TPRERR8Xd	TRRER2#TPRERR8Xd	TRRER2#TPRDRR8Xd	TRRDR2#TPRDRR8Xd	TRRER2#TPR 8XdR!#TPRDRR"8XdT#TPRDRR#8Xd	TRR@R$2#TPRARRF9d	TRR@R%2#R&\VRR3R'\XR@R(3R'\ZR@R(3R)\\R@R$3R\^R@R*3R+\`R@R$3R$\bRR,33F_wr�ppTPRB,T8XgK!TP4F*wrETPT)RT9gKTRTT,uu#	Ka	TPR-,'Ed�TPRDRR.8Xd	TRRBR/2#TPRARRG9dTR'2#TPRARRH9d\T4^8�d	TRRBR02#R+\dR@R13R'\fR@R(3R'\hR@R(3R)\jR@R$3R\lR@R*3R\nRR3R$\pRR,3R$\rRR23R\tRBR33R4\vRBR*3R+\xR@R$33F_wr�ppTPRB,T8XgK!TP4F*wrETPT)RT9gKTRTT,uu#	Ka	\zRR*3\|RR533FEwpppTP4F*wrETPT)RT9gKTRTT,uu#	KG	T\~9dTR%2#\�P4F!wrETPT)RT9gKTR%2u#	TPR@RR%8Xd)T^,T^,P�48XdTR%2#TPRB,R68XdS\�P4F!wrETPT)RT9gKTR%2u#	TPR@RBR68wdTR72#TPR@RR88Xd:\�P4F!wrETPT)RT9gKTR2u#	TPR@RRI9gTPRB,R'8XdTR%2#TPRARRJ9d	TRRBR92#TPRARR:8XdTPRDRAR;8wd	TRRBR92#TPRDRRK9d	TRR@R92#TPRARR<8Xd	TRRBR92#TPRB,R=8Xd�TPR@RBR>9g\T4^8XdTR2#TPR?,'dATPRB,R=8Xd)T^,T^,P�48XdTR2#TRRBR
2#T\�9dTR2#\�P4F!wrETPT)RT9gKTR2u#	TPR@RRL9dTR2#TPRB,R48XdTR%2#TR2#)Mr]Nr4�r�r6z a z-a-�denominator�degreer�r]NN�-�quy�ies�personr8r.�ople�man�men�mouse�mice�louserm�goose�geese�tooth�teeth�foot�feet�taco�tacos�die�dice�ceps�zoonr�r��hrlrk�mr��nr�r9�trixrnror��ta�des�orl�z�zes�ze�ves�eaf�d�arfr=�aeiour7r����rM���������)�cis�sis�xis)�eau�ieu)�ynx�inx�anx)�ch�sh�zzr�)�elf�alf�olf)�nife�life�wife)�ao�eo�io�oo�uo)Fr�r�rnrDrGrN�pl_sb_uninflected_completerJrF�_handle_long_compounds�pl_sb_uninflected_caps�pl_sb_uninflected_bysizer�rErk�pl_sb_uninflected_herd�PL_SB_POSTFIX_ADJ_STEMS_REr�rr�PL_SB_PREP_DUAL_COMPOUND_RE�DENOMINATORrBr%�
contextlib�suppressr��_handle_prepositional_phrase�	functools�partial�pl_pron_acc_keys_bysize�pl_prep_bysizerO�pl_pron_acc�pl_pron_nomr�r�r�pl_sb_irregular_compound�pl_sb_U_man_mans_bysize�pl_sb_U_man_mans_caps_bysize�pl_sb_U_louse_lice_bysize�get�pl_sb_U_ch_chs_bysize�pl_sb_U_ex_ices_bysize�pl_sb_U_ix_ices_bysize�pl_sb_U_um_a_bysize�pl_sb_U_us_i_bysize�pl_sb_U_on_a_bysize�pl_sb_U_a_ae_bysize�pl_sb_C_en_ina_bysize�pl_sb_C_ex_ices_bysize�pl_sb_C_ix_ices_bysize�pl_sb_C_um_a_bysize�pl_sb_C_us_i_bysize�pl_sb_C_us_us_bysize�pl_sb_C_a_ae_bysize�pl_sb_C_a_ata_bysize�pl_sb_C_is_ides_bysize�pl_sb_C_o_i_bysize�pl_sb_C_on_a_bysize�pl_sb_C_i_bysize�pl_sb_C_im_bysize�pl_sb_singular_s_complete�pl_sb_singular_s_bysizer�pl_sb_z_zes_bysize�pl_sb_ze_zes_bysize�pl_sb_U_o_os_complete�pl_sb_U_o_os_bysize)rPr�r�r�r�r�r��
handled_wordsr�pk�pv�llen�lowered_last�
dash_split�lastletr��numendrs&&&               rr�engine._plnoun�
sm
�����u�%���A�:��K��
�
�d�$;�$;�<�����L��2�:��K��T�{���9�9�?�?�� :�:��4�;�;��1�$��2�2�4�q�2�A�I�I�T�I��K��)�)��K�,�2�2�4�D�A��|�|�Q�B�C� �A�%���5����v�&�&�4�9�9�?�?�+<�@V�+V��K�(�
.�
.�t�
4��
�"�(�(�1�+��#��l�l�2�8�8�A�;��2�3�B�H�H�Q�K�=�A�A��D�L�L� �E�T�\�\�$9�,�3�3�D�9�B��b�h�h�q�k�R�'�B�H�H�Q�K�2�,=��|�|�B�H�H�Q�K��3�4��x�x��{�m��|�|�B�H�H�Q�K�0�1�3���t�{�{��q� � �7�7��A�7�F�M��(�$�$��
�
����
-��
������/�0�E��l�l�4���<�0�1�$�v�,��@�@��t�{�{��q� �T�[�[��_��%@��8�8�T�\�\�$�*�*�5�6����R��H�I�I�
�
 �
 ��
,�
,��4�4�����!�!�$�,�,�a�8���-�
,�
,�
,��,�1�1�3�D�A��|�|�Q�B�C� �A�%�,�2�2�4�F�B��|�|�C�R�(�B�.��<�<�-�-�/� �L�L��"�-� �L�L�!���-�4��
$(�<�<��!��#4�{�4�<�<�QR�PR�PS�CT�7U�#U�U�5�4�	��t�|�|�,�,���	��	��	��t�|�|�,�,���	��	��
�9�9�,�,��t�y�y�>�D��6�T�E�l�^�$8����$C�#D�E�E��y�y���(���?�*��|�$�D��6�T�E�l�^�O�L�$A�#B�C�C��\�\�'�'��,�
��H�H�Z���_�%�,�,�.�2J�J������B�C��)��D���$��<�.�+�S�X�X�j���o�-F�,M�,M�,O�P�Q�S�
�
�<�<�����%��3�B�i�[��$�$��<�<�����(��"�"�9�-�-���q�z�!��s��)��D�)�)��<�<�����%�/�5�5�7����<�<����$��)�"�V�1�:�%�8�5�:�:�<������9��>�"�V�1�:�%�=��3�B�i�[��$�$��<�<�����'��3�B�i�[��%�%��<�<�����'�)�-�-�c�$�i�8�A��T�\�\�Q�&��s��)��D�)�)��V�1�:���<�<�����'��3�B�i�[��&�&��<�<�����'��3�B�i�[��&�&��<�<�����&��3�B�i�[��%�%��<�<�����&��3�B�i�[��&�&��<�<�5� ���<�<�����&��K��<�<�����&��3�B�i�[��?�"��<�<���� 5�5��3�B�i�[��#�#��'��s�3�
�(�"�f�5�
�(�"�f�5�
�%�r�3�/�
�%�r�3�/�
�%�r�3�/�
�%�t�S�1�)
�$�G����|�|�B��7�*��G�G�I�D�A��|�|�Q�B�C�(�A�-�#�G�V�}�t�3�3�&�)
� ���y�)�)��|�|�B�C� �F�*��s��)��C�(�(��|�|�B�C� �N�2���q�z�!��|�|�B�C� �$9�9�c�$�i�!�m��s��)��C�(�(��+�R��7��,�b�&�9��,�b�&�9��)�2�s�3��)�2�s�3��*�D�"�5��)�4��5��*�D�$�7��,�b�%�8��(�"�c�2��)�2�s�3�-�(��F�D��<�<��#�w�.� !���	����<�<����,��1�#'���=�4�#7�7�!*�-�&"�4��-�"�D�$�/�$���6�4��G�G�I�D�A��|�|�Q�B�C�(�A�-�#�G�V�}�t�3�3�&�	$��4�4��V�2�;��+�1�1�3�D�A��|�|�Q�B�C� �A�%���r�{�"�4��<�<�����$��a��D��G�M�M�O�)C��V�2�;���<�<���s�"�*�0�0�2����<�<����$��)�"�V�2�;�&�3��|�|�B�r�"�c�)���s�|�#��<�<�����$�+�1�1�3����<�<����$��)�"�V�1�:�%�4��<�<���� 8�8�D�L�L��<L�PS�<S��V�2�;���<�<���� 5�5��3�B�i�[��$�$��<�<�����%�$�,�,�r�"�*=��*D��3�B�i�[��$�$��<�<���� 8�8��3�B�i�[��$�$��<�<�����%��3�B�i�[��$�$��<�<���s�"��|�|�B�r�"�g�-��T��a����q�z�!��"�"�7�+�+��<�<��#�s�*�t�A�w�$�q�'�-�-�/�/I�"�V�1�:�%��3�B�i�[��$�$��0�0��V�1�:��'�-�-�/�D�A��|�|�Q�B�C� �A�%���q�z�!�0��<�<���� >�>��V�1�:���<�<���s�"��V�2�;����q�z�s0�8=O�O	�+S�S�S�S+�+S9�8S9c
��VPV4p\V4^8d\R4hVPV\4pV!WE^,
,4;'gWE^,
,pRPVRV^,
VPWdV,R.4.,4RPWE^,R4,#)a�
Given a word or phrase possibly separated by sep, parse out
the prepositional phrase and apply the transform to the word
preceding the prepositional phrase.

Raise ValueError if the pivot is not found or if at least two
separators are not found.

>>> engine._handle_prepositional_phrase("man-of-war", str.upper, '-')
'MAN-of-war'
>>> engine._handle_prepositional_phrase("man of war", str.upper, ' ')
'MAN of war'
z2Cannot handle words with fewer than two separatorsrNr4)rOrJr��_find_pivot�pl_prep_list_darB)�cls�phrase�	transform�sep�parts�pivot�transformeds&&&&   rr��#engine._handle_prepositional_phrase�s������S�!���u�:��>��Q�R�R������7����a�i� 0�1�E�E�U�1�9�5E���x�x��+�E�A�I��#�(�(�K�u��r�+J�"K�!L�L�
��H�H�U�A�I�=�)�*�+�	+rc�$�V^8�dQhRRRRRR/#)r-r�rDr�r�r0zUnion[str, None]r)r1s"rr2rh�s"��%�%�5�%��%�AQ�%rc
�aa�S^8Xd
VPMVPoVV3Rl\VP^44p\	VR4#)a
Handles the plural and singular for compound `Words` that
have three or more words, based on the given count.

>>> engine()._handle_long_compounds(Words("pair of scissors"), 2)
'pairs of scissors'
>>> engine()._handle_long_compounds(Words("men beyond hills"), 1)
'man beyond hills'
c
3�<"�TFHwpwr#pV\9gKRP\P!VS!VS4V.V44x�KJ	R#5i�rN)rrB�	itertools�chain)r>�leader�cand�prep�trailerr��
inflections&    ��rr@�0engine._handle_long_compounds.<locals>.<genexpr>�s`����

�2S�-����g���&�
�C�H�H�������e�,�d�3���
�
�2S�s
�A�8AN)rLrrrFr3)rPr�r��	solutionsr(s&&f @rr��engine._handle_long_compounds�sG���&+�a�Z�T�\�\�T�\�\�
�

�2C�4�;�;�PQ�1R�

�	��I�t�$�$rc	�aa�VV3Rl\^\S4^,
44p\V4# \d\	R4Rhi;i)c3�H<"�TFpSV,S9gKVx�K	R#5ir=r)r>r�
candidatesr9s& ��rr@�%engine._find_pivot.<locals>.<genexpr>�s"����
�7�e�5��<�:�;U�E�E�7�s�"�
"zNo pivot foundN)r�rJr3�
StopIterationr�)r9r.�pivotssff rr�engine._find_pivot�sM���
�$�Q��E�
�Q��7�
��	9���<����	9��-�.�D�8�	9�s	�
6�Ac�$�V^8�dQhRRRRRR/#�r-r�r/r�r�r0r-r)r1s"rr2rh�s)��P�P��P� 9�P�	�Prc	��VPR,'d%\V4P4\9dR#VP	V4pV^8XdV#VPWP4pVeV#\V4pTP\9d2\TP,T\TP4R2#TP\9dT#TPPR4'dNTPRR
\9d6\TPRR
,RT\TP4R2#TPPR4'dT#\PT4pT'dR#\ PT4'dR#TP"R8XdR#TP"RRR9gTP"R
RR8XdTRR
#TP"R
RR8Xd'\T4^8�dTP"RR
R,#TP$P4\&9g1TP"RR\(9gTP"RR\*9dTRR#TP"PR	4'd \T4^8�dTP"RR
#\,PT4pT'dTP/^4#R# \dR#i;i)riFNzn't�quizzes�quizrmr�r=�oesr�r�)�ches�shes�zzes�ssesr�r�rM)rkr/rNr�r�r�rorD�
IndexErrorr%�plverb_irregular_presrJ�plverb_irregular_non_presr��PLVERB_SPECIAL_S_REr��
WHITESPACErErG�pl_v_oes_oe�pl_v_oes_oe_endings_size4�pl_v_oes_oe_endings_size5�ENDS_WITH_Sr)rPr�r�r�r9r�s&&&   rr�engine._pl_special_verb�s������v�&�&�3�u�:�+;�+;�+=��+N�����u�%���A�:��K��
�
�d�$:�$:�;�����L�	��$�K�E��;�;�/�/�+�E�K�K�8�9�%��E�K�K�@P�@R�:S�9T�U�U��;�;�3�3��K��;�;����&�&�5�;�;�s��+;�?T�+T�(����S�b�)9�:�;�3���U�[�[�)�+�,�-�/�
�
�;�;����&�&��K�!�
'�
'��
-��
�����T�"�"���=�=�I�%��

�M�M�"�#��"B�B��}�}�R�S�!�U�*���"�:���=�=�����&�3�u�:��>��=�=��"�%��+�+�
�J�J����+�-��}�}�R�S�!�%>�>��}�}�R�S�!�%>�>���"�:���=�=�!�!�%�(�(�S��Z�!�^��=�=��"�%�%�
�
�
��
&��
��8�8�A�;����y�	��	�s�:K1�1L�?Lc�$�V^8�dQhRRRRRR/#r�r)r1s"rr2rh1s$������ 9��	�rc	�,�VPV4pV^8XdV#\PV4pV'd>\VP	^4P4,VP	^42#\PV4pV'dV#V#r\)r��plverb_ambiguous_pres_keysr��plverb_ambiguous_presrrN�plverb_ambiguous_non_pres)rPr�r�r�s&&& rr$�engine._pl_general_verb1s������u�%���A�:��K�(�
.�
.�t�
4��
�+�B�H�H�Q�K�,=�,=�,?�@�A�"�(�(�1�+��O�O�'�
-�
-�d�
3��
��K��rc�$�V^8�dQhRRRRRR/#r4r)r1s"rr2rhIs$��"�"��"� 9�"�	�"rc	�D�VPV4pV^8XdV#VPWP4pVeV#\P	V4pV'd+\
VP
^4P4,#\P	V4pV'd+\VP
^4P4,#\P	V4pV'd:VPVP
^44pVR,R8XdRMRpVRV2#R#)r]r.r4r�FrM)r�r�rp�pl_adj_special_keysr��pl_adj_specialrrN�pl_adj_poss_keys�pl_adj_poss�ENDS_WITH_APOSTROPHE_Sr�)rPr�r�r�r�r��
trailing_ss&&&    rr�engine._pl_special_adjectiveIs������u�%���A�:��K��
�
�d�$<�$<�=�����L�!�
'�
'��
-��
�!�"�(�(�1�+�"3�"3�"5�6�6��
$�
$�T�
*��
��r�x�x��{�0�0�2�3�3�
#�
*�
*�4�
0��
��!�!�"�(�(�1�+�.�B�!�"�v��}��#�J��T��:�,�'�'�rc�(�V^8�dQhRRRRRRRR/#)	r-r�r/r�r�r�r�r0r-r)r1s"rr2rhns8��C�C��C�)�C��	C�

�Crc	�r�VPV4pV^8XdV#VfVPpMV\9d\hVP
WP4pVeV#VR8XdV#V\9dVRRD#\V4pVPP4\9d:\VP4^8�dVPV^R7;'gT#V#V\ 9dV#\"P%4FwrxVP&V)RV9gKVu#	VP(R,'d&VPP4\*9dV#VPP4\,9dVP(R,'dV#R#\.P1V4p	V	'dMV	P3^4R8wd7VP5V	P3^4^VR7V	P3^42#\6P8!\:4;_uu_4VP=VP&\>P@!VP4^VR7R	4uuRRR4# \\
3d
p\ThRp?ii;i +'giM;i\6P8!\:4;_uu_4TP=TP&\>P@!TP4^TR7R
4uuRRR4# +'giM;i\BP%4F�wrxTP&T)RT9gK\DP%4F�wr�TP&RT
T9gKTP&PG4TP&RT
TP&T)R.8XgKYTP&RT)\IRTP&T)RT4,uu#	K�	\IRTP&T4# \JdMi;i\IRTP&T4# \JdMi;iTP\L9d5\TP4pTRT)\LTP,2#TPP4\N9dQ\TPP44pTRT)\NTPP4,2#TP&PGR
4p
R	PQT
RER4P4\R9d_\R	PQT
RER44pR
PUTRT)\RR	PQT
RER4P4,4#TP&RFRR8Xd
TRRGR,#TP&RHRR8XdTRRD#TP&RIRR8Xd
TRRJR,#TP&RJRR8Xdh\VP%4F!wrxTP&T)RT9gKTRRDu#	\XP%4FwrxY)RT9gKTRRDu#	TP&RGRR8Xd
TRRGR,#TP&RJRR8Xd
TRRJR,#TP&RJRR8XdD\ZP]\T44pT'dTP&T9d
TRRJR,#TP&RFRR8Xd
TRRFR,#TP&RFRR8Xd
TRRFR,#TP&RJRR8Xd
TRRJR,#TP&R 8XdR!#TP&RJRR"8XdT#TP&RGRR#8Xd
TRRDR$,#R%\^RDR3R%\`RJR&3R%\bRJR'3R(\dRDR)3R*\fRDR+3R(\hRDR$3R,\jRDR33F_wr�ppTP&RD,T8XgK!TP%4F*wrxTP&T)RT9gKTRTT,uu#	Ka	TP(R,'EdDTP&RIRR-8Xd
TRRGR.,#TP&RJRRK9dTRRD#TP&RFRRL9d\T4^8�d
TRRGR.,#R(\lRGR/3R%\nRJR&3R%\pRJR'3R(\rRDR)3R*\tRDR+3R%\vRR3R,\xRDR3R(\zRER3R%\|RGR%3R*\~RDR03R(\�RDR$3R1\�RER3R*\�RDR33
F_wr�ppTP&RD,T8XgK!TP%4F*wrxTP&T)RT9gKTRTT,uu#	Ka	TP&RIRR28Xg/T\�9g$TPP4\�9dTRRD#T\�9g$TPP4\�9dTRRD#TP&RFRR38Xg/T\�9g$TPP4\�9dTRRD#T\�9g$TPP4\�9dTRRD#TPP4\�9dTRRE#\�P%4F!wrxTP&T)RT9gKTRREu#	TP&RJRR48Xd)T^,T^,P�48XdTRRE#TPP4\�9dTRRE#TPP4\�9dTRRE#TP&RJRR58XdTRRG#T\�9g$TPP4\�9dTRRD#TP&RJRRM9dTRRE#TPP4\�9dTRRD#TP&RGRR68XdTRRE#T\�9g$TPP4\�9dTRRD#TP&RGRR78Xd�TP&RFRGRN9d
TRRGR8,#TP&RFRGR98XdTRIRFR:8wd
TRRGR8,#TP&RFRGRO9d
TRRGR;,#TP&RFRGR<8Xd
TRRGR8,#TP&RERR=8Xd�\TP&4^8�dTP&RG,R>9dTRRD#TP(R?,'d=TP&RERR=8Xd)T^,T^,P�48XdTRRD#TP&RGRR@8Xd
TRRGR,#TP&RERRA8Xd{TPP4\�9dTRRD#\�P%4F!wrxTP&T)RT9gKTRRDu#	TP&RGRRP9dTRRD#TP&RGRRB8XdTRRE#T\�9d
TRRERC,#TP&RD,R%8XdTRRD#R#)Qr-Nr4r�r6r9F)r�rKrr�r�r�z{}{}�quiesr=r8�people�rson�mansr�r�r�r�rmr�r�r�r�r�r�r�r�r�r��zoa�onr.�ex�ixr��umr�r�r��tricesrl�enr�r��houses�shoes�esesr;rmr��f�ear��fe�ar�ysr�r7r�rfr8r�rMr�r�r�i����r�r�)�eaux�ieux)�ynges�inges�anges)r9r:)�el�al�ol)�ni�li�wi)�aos�eos�ios�oos�uos)Xr�rsr�r+r�r=r�rq�si_sb_ois_oi_caserDrGrNr�rJrFr�r�r�r�rErkr��
pl_sb_C_us_usr�r�rrLr�r�r�r�r�r��si_pron_acc_keys_bysizer�rOr�r��si_sb_irregular_caps�si_sb_irregularrB�si_sb_irregular_compoundr1�si_sb_U_man_mans_bysize�si_sb_U_man_mans_caps_bysize�si_sb_U_louse_lice_bysizer��si_sb_U_ch_chs_bysize�si_sb_U_ex_ices_bysize�si_sb_U_ix_ices_bysize�si_sb_U_um_a_bysize�si_sb_U_us_i_bysize�si_sb_U_on_a_bysize�si_sb_U_a_ae_bysize�si_sb_C_en_ina_bysize�si_sb_C_ex_ices_bysize�si_sb_C_ix_ices_bysize�si_sb_C_um_a_bysize�si_sb_C_us_i_bysizer��si_sb_C_a_ae_bysize�si_sb_C_a_ata_bysize�si_sb_C_is_ides_bysize�si_sb_C_o_i_bysize�si_sb_C_on_a_bysize�si_sb_C_im_bysize�si_sb_C_i_bysize�si_sb_uses_use_case�si_sb_uses_use�si_sb_ies_ie_case�si_sb_ies_ie�si_sb_oes_oe_case�si_sb_oes_oe�si_sb_sses_sse_case�si_sb_sses_sse�si_sb_singular_s_complete�si_sb_singular_s_bysizer�si_sb_z_zes�
si_sb_zzes_zz�si_sb_ches_che_case�si_sb_ches_che�si_sb_xes_xe�si_sb_ves_ve_case�si_sb_ves_ve�si_sb_U_o_os_complete�si_sb_U_o_os_bysize�si_sb_es_is)rPr�r�r�r�r�r9r�r�r�rrr
rrr��unass_numendr�class_numends&&&&               rrL�engine._sinounns�
�����u�%���A�:��K�	*��~������7�7�$�$�8��
�
�d�$;�$;�<�����L��2�:��K��$�$����9���d����:�:����!;�;��5�<�<� �A�%��2�2�5��2�B�J�J�d�J��K��)�)��K�,�2�2�4�D�A��}�}�a�R�S�!�Q�&���5����v�&�&�5�:�:�+;�+;�+=�AW�+W��K��:�:�����.��.�.�y�9�9�4�D�u�D�(�
.�
.�t�
4��
�"�(�(�1�+��#��l�l�2�8�8�A�;��&�l�A�B�2�8�8�A�;�-�P�P�
�
 �
 ��
,�
,��4�4��
�
��!�!�$�,�,�a��G���-�
,��W�:�&�	*� �c�)��	*��V-�
,���
 �
 ��
,�
,��4�4��
�
��!�!�$�,�,�a��G���-�
,�
,�
,��,�1�1�3�D�A��}�}�a�R�S�!�Q�&�,�2�2�4�F�B��}�}�S�b�)�R�/� �=�=�.�.�0�!�M�M�#�2�.�!�M�M�1�"�#�.�5��
$)�=�=��1�"�#5�� %�u�}�}�a�R�S�'9�6�9�$��5�4�	��u�e�m�m�V�<�<���	��	��	��u�e�m�m�V�<�<���	��	��
�:�:�-�-��u�z�z�?�D��6�T�E�l�^�$8����$D�#E�F�F��:�:�����0��u�z�z�'�'�)�*�D��6�T�E�l�^�O�E�J�J�4D�4D�4F�$G�#H�I�I��]�]�(�(��-�
��H�H�Z���_�%�,�,�.�2J�J������B�C��)��D��=�=��V�t�e��(�#�(�(�:�b�c�?�*C�)J�)J�)L�M��
�
�=�=�����(����9�s�?�"��=�=�����*����9���=�=�����)����9�v�%�%��=�=�����'�/�5�5�7����=�=�!���%��*����9�$�8�5�:�:�<������9��>����9�$�=��=�=�����&����9�u�$�$��=�=�����'����9�w�&�&��=�=�����'�)�-�-�c�$�i�8�A��U�]�]�a�'��C�R�y�7�*�*��=�=�����(����9�w�&�&��=�=�����(����9�w�&�&��=�=�����'����9�v�%�%��=�=�F�"���=�=�����'��K��=�=�����&����9�t�#�#��'��R�0�
�(�"�d�3�
�(�"�d�3�
�%�r�4�0�
�%�r�4�0�
�%�r�4�0�
�%�r�2�.�/
�*�G��d��}�}�R� �G�+��G�G�I�D�A��}�}�a�R�S�)�Q�.�#�M�\�2�T�9�9�&�/
� ���y�)�)��}�}�R�S�!�X�-��C�R�y�3��&��}�}�R�S�!�%5�5��C�R�y� ��}�}�R�S�!�%@�@�S��Y�QR�]��C�R�y�3��&��+�R��6��,�b�$�7��,�b�$�7��)�2�t�4��)�2�t�4��*�D�"�5��)�2�r�2��*�B��3��,�b�#�6��(�"�c�2��)�2�t�4��'��R�0��&��B�/�3�.��L�$��=�=��$��/� !���	��� �=�=�!���-��2�#'�
��#6��#=�=�!*�!3�.
�M�M�"�#��(�*��*�*��z�z���!�^�3����9���$�$��
�
�(8�(8�(:�l�(J����9��

�M�M�"�#��'�)��(�(��z�z���!�\�1����9���&�&�%�*�*�*:�*:�*<��*N����9���:�:����!:�:����9��+�1�1�3�D�A��}�}�a�R�S�!�Q�&��C�R�y� �4��=�=�����'�D��G�t�A�w�}�}��,F����9���:�:�����,����9���:�:�����.����9���=�=�����'����9���&�&�%�*�*�*:�*:�*<��*N����9���=�=����!1�1����9���:�:�����-����9���=�=�����&����9���$�$��
�
�(8�(8�(:�l�(J����9���=�=�����&��}�}�R��#�'9�9��C�R�y�3��&��}�}�R��#�t�+��R���s�0B��C�R�y�3��&��}�}�R��#�'9�9��C�R�y�4�'�'��}�}�R��#�t�+��C�R�y�3��&��=�=�����%��5�=�=�!�A�%�%�-�-��*;�w�*F��C�R�y� ��"�"�7�+�+��=�=���%��-�$�q�'�T�!�W�]�]�_�2L����9�$��=�=�����&����9�s�?�"��=�=�����%��z�z���!�%:�:��C�R�y� �+�1�1�3����=�=�!���%��*����9�$�4��}�}�R�S�!�%H�H��C�R�y� ��=�=�����&����9���;�����9�t�#�#��=�=����#����9��sX�I5�I5�,>J�5J�J
�
J�J%	�
>L�L#	�>P�P#�"P#�'P>�>Q�Qc�$�V^8�dQhRRRRRR/#)r-r�rbr�rIr0r/r)r1s"rr2rh�
s"����d��#A��#�rc
���\PV4pV'dWVP^4pV'gV#VP^4pVP^4pVPWB4pVVV2#R#)z�
Return the appropriate indefinite article followed by text.

The indefinite article is either 'a' or 'an'.

If count is not one, then return count followed by text
instead of 'a' or 'an'.

Whitespace at the start and end is preserved.

r4)�INDEFINITE_ARTICLE_TESTr�r�_indef_article)rPr�r�r�r�rrr
s&&&     rr��engine.a�
sl��%�
+�
+�D�
1��
��8�8�A�;�D�����(�(�1�+�C��8�8�A�;�D��(�(��5�F��U�6�(�4�&�)�)�rr�rc�$�V^8�dQhRRRRRR/#)r-r�r/r�zUnion[int, str, Any]r0r)r1s"rr2rh�
s"��'�'�3�'�/C�'��'rc	��a�VPV4pV^8wdVRS2#VPSVP4pVeVRS2#V3RlVP4pRS2p\	WV4#)r]rc3�h<"�TF'wrVPS4'gKVRS2x�K)	R#5ir!)r�)r>�regexen�articler�s&  �rr@�(engine._indef_article.<locals>.<genexpr>�
s4����
�$=� ���~�~�d�#�
 �w�i�q����$=�s�2�2za )r�r�rr�_indef_article_casesr3)rPr�r��mycountr��matches�fallbacks&f&    rr��engine._indef_article�
s�����.�.��'���a�<��W�A�d�V�$�$��
�
�d�D�$9�$9�:�����W�A�d�V�$�$�
�$(�$=�$=�
����v�;���G�&�&rc�$�V^8�dQhRRRRRR/#)r-r�rbr�zOptional[Union[int, str]]r0r/r)r1s"rr2rhs'��!@�!@�t�!@�$=�!@��!@rc
�t�VfVPe
VPpVf^p\PV4pV'd5VP^4pVP^4pVP^4pMRpRpRp\	V4P4\9dRpVVRVPWR4V2#)aP
If count is 0, no, zero or nil, return 'no' followed by the plural
of text.

If count is one of:
    1, a, an, one, each, every, this, that
    return count followed by text.

Otherwise return count follow by the plural of text.

In the return value count is always followed by a space.

Whitespace at the start and end is preserved.

r4r�r)rlrr�rr/rNr�r)rPr�r�r�rr�rs&&&    rr��	engine.nos���"�=�T�2�2�>��)�)�E��=��E�
�
"�
"�4�
(��
��(�(�1�+�C��8�8�A�;�D��8�8�A�;�D��C��D��D��u�:�����.��E���u�g�Q�t�{�{�4�7�8���?�?rc� �V^8�dQhRRRR/#)r-r�rbr0r/r)r1s"rr2rh-s����t���rc
��VPV^4pTp\F'wrEVPWR4wr6V'gK"VR2u#	VR2#)zQ
Return the present participle for word.

word is the 3rd person singular verb.

�ing)r��PRESENT_PARTICIPLE_REPLACEMENTS�subn)rPr��plv�ansr��replr�s&&     rr��engine.present_participle,sV�����t�Q�'����<�M�G��|�|�D�.�H�C��s���c�{�"�=���c�{�rc� �V^8�dQhRRRR/#)r-r��Union[Number, Word]r0r/r)r1s"rr2rh@s��&�&�.�&�3�&rc
��\P\V44'd�\V\\
34'd\V4V8Xd
\V4pM8R\V49d\\V4R,4pM\V4p\V^d,,pVV2#VPV4# \d\\T4RR4pLPi;i \d\T^
,,pL`i;i)zl
Return the ordinal of num.

>>> ordinal = engine().ordinal
>>> ordinal(1)
'1st'
>>> ordinal('one')
'first'
�.NrM)
�DIGITr�r/r^�floatr�r��nthr��_sub_ord)rPr�r�rs&&  rr��engine.ordinal?s����;�;�s�3�x� � ��#��s�|�,�,��S��S����H���#�c�(�?�/� ��C����-���C��A�
#��1�s�7�|���U�4�&�>�!��=�=��%�%��&�/���C���"�
�.��/���
#��1�r�6�{��
#�s$�.C�C)�"C&�%C&�)D�
Dc� �V^8�dQhRRRR/#)r-�indr�r0r/r)r1s"rr2rhas����#��c�rc	�^�V\\4^,
8�d\h\V,#r\)rJ�millr%)rPr�s&&r�millfn�
engine.millfnas"����T��Q���$�$��C�y�rc�$�V^8�dQhRRRRRR/#)r-�unitsr��mindexr0r/r)r1s"rr2rhfs!��5�5�C�5��5�S�5rc	�B�\V,VPV42#r=)�unitr�)rPr�r�s&&&r�unitfn�
engine.unitfnfs���u�+��t�{�{�6�2�3�4�4rc��V^8�dQhRR/#r�r)r1s"rr2rhis��
.�
.�c�
.rc	���V^8wdK\V,pV'dV'dRpMRp\V,pVPV4pVVVV2#\V,\V,2#)r]r�r4)�tenr�r��teenr�)rP�tensr�r��	tens_part�hyphen�	unit_part�	mill_parts&&&&    r�tenfn�engine.tenfnisf���1�9��D�	�I��������U��I����F�+�I��[�����I�;�?�?��u�+��t�F�|�n�-�-rc
�,�V^8�dQhRRRRRRRRRR/#)r-�hundredsr�r�r�r�r0r/r)r1s"rr2rhus/��
�
�s�
�#�
�c�
�3�
�3�
rc	�<�V'd_V'g	V'dRVPR,R2MRp\V,RVVPW#4VPV4R2#V'g	V'd&VPW#4VPV4R2#R#)r�andwordr4z hundred�, )rxr�r�r�)rPr�r�r�r�r�s&&&&& r�hundfn�
engine.hundfnus����=A�U��$�+�+�I�6�7�q�9�PR�G���>�"�(�7�)��:�:�d�*�+�D�K�K��,?�+@��D�
��5��j�j��-�.�t�{�{�6�/B�.C�2�F�F�rc� �V^8�dQhRRRR/#�r-r�rr0r/r)r1s"rr2rh�s��5�5�E�5�c�5rc	���\VP^44pV^8XdRVPR,R2#V'd\V,R2#RVPR,R2#)r]rr-r�ri)r�rrxr��rPr�r�s&& r�	group1sub�engine.group1sub�se���B�H�H�Q�K� ���A�:��t�(�(��/�0��3�3�
��5�k�]�"�%�%��t�(�(��0�1��4�4rc� �V^8�dQhRRRR/#r�r)r1s"rr2rh�s��5�5�U�5�s�5rc	��\VP^44pV'd\V,R2#RVPR,R2#�r]r�rri)r�rr�rxr�s&& r�
group1bsub�engine.group1bsub�sC���B�H�H�Q�K� ����5�k�]�"�%�%��t�(�(��0�1��4�4rc� �V^8�dQhRRRR/#r�r)r1s"rr2rh�s��M�M�E�M�c�Mrc	�R�\VP^44p\VP^44pV'dVPW#4R2#V'd&RVPR,R\V,R2#RVPR,RVPR,R2#r�)r�rr�rxr�)rPr�r�r�s&&  r�	group2sub�engine.group2sub�s����2�8�8�A�;����B�H�H�Q�K� ����j�j��-�.�b�1�1���t�(�(��0�1��4��;�-�r�B�B��4�$�$�V�,�-�Q�t�/@�/@��/H�.I��L�Lrc� �V^8�dQhRRRR/#r�r)r1s"rr2rh�s��(�(�E�(�c�(rc	�6�\VP^44p\VP^44p\VP^44pV^8XdRVPR,2pM5V'd\\V,4pMRVPR,2pV'dVPW44pMWV'd&RVPR,R\V,2pM*RVPR,RVPR,2pVRVR2#)r]rr-rir�)r�rrxr/r�r�)rPr�r�r�r��hunword�tenwords&&     r�	group3sub�engine.group3sub�s����r�x�x��{�#���2�8�8�A�;����B�H�H�Q�K� ���q�=��$�+�+�E�2�3�4�G�
��$�x�.�)�G��$�+�+�F�3�4�5�G���j�j��-�G�
��$�+�+�F�3�4�A�d�5�k�]�C�G��$�+�+�F�3�4�A�d�6G�6G��6O�5P�Q�G���!�G�9�B�'�'rc� �V^8�dQhRRRR/#r�r)r1s"rr2rh�s����%��C�rc		��VP\VP^44\VP^44\VP^44VP4pV;P^,
unV#r\)r�r�rrm)rPr��rets&& r�hundsub�engine.hundsub�sY���k�k��������c�"�(�(�1�+�.��B�H�H�Q�K�0@�$�/�/�
��	
���1����
rc� �V^8�dQhRRRR/#r�r)r1s"rr2rh�s��V�V��V�3�Vrc	��VP\VP^44\VP^44VP4R2#�r]r�)r�r�rrm�rPr�s&&r�tensub�
engine.tensub�s<���*�*�S����!��-�s�2�8�8�A�;�/?����Q�R�RT�U�Urc� �V^8�dQhRRRR/#r�r)r1s"rr2rh�s��E�E�%�E�C�Erc	�p�VP\VP^44VP4R2#r)r�r�rrmrs&&r�unitsub�engine.unitsub�s,���+�+�c�"�(�(�1�+�.����@�A��D�Drc�$�V^8�dQhRRRRRR/#)r-r�r/rr�r0r)r1s"rr2rh�s!����#��c��c�rc	���V^8Xd#\PVPV4pV#V^8XdD\PVPV4p\PVP
V^4pV#V^8Xde\PVPV4p\PVPV^4p\PVPV^4pV#\V4^8XdVPR,pV#\V4^8XdVPR,pV#VP4PR4p^Vn\PV4pV'd9\PVPV^4p\PV4pK@\PVP V^4p\"PVP$V^4pV#)r]rir-�0)�DIGIT_GROUPr�r��
TWO_DIGITSr�r��THREE_DIGITSrr�rx�lstriprm�THREE_DIGITS_WORDr�r
�TWO_DIGITS_WORDr�ONE_DIGIT_WORDr)rPr�rr�s&&& r�enword�
engine.enword�s����A�:��/�/�$�.�.�#�6�C�,�
�+�a�Z��.�.�����5�C��/�/�$�/�/�3��:�C�&�
�%�a�Z��"�"�4�>�>�3�7�C��.�.�����a�8�C��/�/�$�.�.�#�q�9�C��
���X��]��#�#�F�+�C��
���X��]��#�#�E�*�C��
��*�*�,�%�%�c�*�C��D�O�"�)�)�#�.�B��'�+�+�D�L�L�#�q�A��&�-�-�c�2��!�%�%�d�k�k�3��:�C� �$�$�T�\�\�3��:�C��
rc	�T�\PRV4pVRW8H,,#)c�:�\VP^4,#r\)r�r)r�s&rr��!engine._sub_ord.<locals>.<lambda>�s��W�U�[�[��^�-Drr )�ordinal_suffr�)r��news& rr��engine._sub_ord�s'�����D�c�J���T�S�Z�(�(�(rc	�v�V'dV^8wdRM^pVPRV4pMV.pVPV4#)rLr�rM)rO�_remove_last_blank)rr��decimalr�	max_split�chunkss&&&&  r�
_chunk_num�engine._chunk_num�s:���#�q�j��a�I��Y�Y�s�I�.�F��U�F��%�%�f�-�-rc
�>�VR,R8HpV'dVRRMTpW!3#)z~
Remove the last item from chunks if it's a blank string.

Return the resultant chunks and whether the last item was removed.
r4NrMr)r,�removedr
s&  rr)�engine._remove_last_blank�s)����*��"�� '�����V����rc	�X�RRRR/PVP4^,R4#)�+�plusr��minusr4)r�r)r�s&r�	_get_sign�engine._get_sign�s(���V�S�'�*�.�.�s�z�z�|�A���C�Crc�@�V^8�dQhRRRRRRRRR	R
RR
RR
R
RRRRR/
#)r-r�r��wantlistrSrr��commazUnion[Falsish, str]r�r/rir-r*�	thresholdr8r0zUnion[str, List[str]]r)r1s"rr2rh�sz��p �p �
 �p ��p ��	p �
#�p ��
p ��p ��p �%�p �!�p �
�p rc

�aaaa�RSRVRV/Sn\V4pV	en\V4V	8�d^VPR^4p
V'd.\PRV
^,4wV
^&pV^8XgK4V
^,RV
^,2#S^8gS^8�d\hSPV4pV\9dTpVRR\9p
V
'dVRRpSPWS4wr�V^,R8HpV'*oVVVV3Rlp\VVVR4VVR%.pS^8wdV^,PVR	24pV
'd$V'dSPVR
,4VR
&VR
,F7pVPV4VPVPVR	244K9	V'dVPV4V'dV.\V4,V,#V'dVR	2MRpS'dRP!V4M RP!SP#VW�44pVV,# \d\T
^,4u#i;i)a�
Return a number in words.

group = 1, 2 or 3 to group numbers before turning into words
comma: define comma

andword:
    word for 'and'. Can be set to ''.
    e.g. "one hundred and one" vs "one hundred one"

zero: word for '0'
one: word for '1'
decimal: word for decimal point
threshold: numbers above threshold not turned into words

parameters not remembered from last call. Departure from Perl version.
r�rir-Nr�z\1,\2r4c�<�\PRV4pVR8XdRpS^8XdS'gSPV^4pMSPVS4pVRRR8XdVRRp\PRV4pS^8Xd#S'd\PRSR2V4p\
PRV4pVP
4pS'dRoV#)r4rNr��,rz \1r�)�	NON_DIGITr�r �WHITESPACES_COMMA�
COMMA_WORD�WHITESPACES�strip)�chunkr�r%rrPs&����r�
_handle_chunk�-engine.number_to_words.<locals>._handle_chunk1s�����M�M�"�e�,�E���{�����z�%����E�1�-�����E�5�1���R�S�z�T�!��c�r�
��%�)�)�#�u�5�E���z�e�"����7�)�4�'8�%�@���O�O�C��/�E��K�K�M�E�����Lrrr�r�r�rM)rxr/r�rO�FOUR_DIGIT_COMMAr�r=r#r6�nth_suffr-r|r��appendr�rSrB�_render)rPr�r9rr:r�rir-r*r;�spnumr��sign�myordr,�
finalpoint�	loopstartrE�	numchunksrD�signout�valoutr%sf&&f&f&&&&            @rr��engine.number_to_words�s:���<'����u�c�J����#�h��� �U�3�Z�)�%;��I�I�c�1�%�E�� 0� 5� 5�h��a�� I�
��q��1���6��
%���(��1�U�1�X�J�/�/��1�9���	�(�(��~�~�c�"���(�?��C��B�C��H�$����c�r�(�C�!�_�_�S�5�A����1�I��O�	�!*�]��	�	�4!���y�z�0B�C��y�z���	��A�:��q�	���5�'���4�I��Y� �M�M�)�B�-�8�I�b�M��B�Z�Z�E����W�%����U�[�[�E�7�!��5�6� �����W�%���6�D��J�&��2�2� $�T�F�!�*�"���
�I�I�i� �������i��@�A�	�
�����O�
%��5��8�}�$�
%�s�9H;�;I�Ic#	��"�VP^4pVx�VRJ;'gVPV4'*pVFpWQ8XdRpMV'dVx�RV2x�K!	R#5i)rLNFr)�popr�)r,r*r:�
first_itemr%�ncs&&&   rrJ�engine._renderfs^����Z�Z��]�
����4��C�C�z�':�':�7�'C�#C���B��}�������b�T�(�N��s�A
A!�A!c�4�V^8�dQhRRRRRRRRRR	R
RRR	/#)r-r9zOptional[Sequence[Word]]rr��
sep_spacedrS�	final_sep�conjr/�conj_spacedr0r)r1s"rr2rhssY��0@�0@�'�0@��0@��	0@�
!�0@��
0@��0@�

�0@rc
�~�V'gR#\V4^8Xd
V^,#V'dVR8XdRpMRVR2p\V4^8XdV^,VV^,2#VfRRPV49dRpMRpVfTpVV2pV'd
VR,
pVPV^R4VVR,2#)aB
Join words into a list.

e.g. join(['ant', 'bee', 'fly']) returns 'ant, bee, and fly'

options:
conj: replacement for 'and'
sep: separator. default ',', unless ',' is in the list then ';'
final_sep: final separator. default ',', unless ',' is in the list then ';'
conj_spaced: boolean. Should conj have spaces around it

r4rr>�;rM)rJrB)rPr9rrZr[r\r]s&&&&&&&rrB�engine.joinrs���,���u�:��?���8�O���r�z����4�&��{���u�:��?��A�h�Z��v�e�A�h�Z�0�0��;��b�g�g�e�n�$��������I� �k�$��(�	���3�J�C��(�(�5��2�;�'�(���E�"�I�;�?�?r)rr�
__number_argsrxrkrmrlrprnrorqrs)NNr=r\)rL)FrLr>�andrir-�pointN)NTNrbT)_rrrrrR�propertyrx�setterrr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�r�r�r7r=rBrFr�r0r\rQrRr�r�classmethodr�r��staticmethodrrr$rrLr�r�A_ordinal_a�A_ordinal_an�
A_explicit_an�
SPECIAL_AN�	SPECIAL_A�A_abbrev�SPECIAL_ABBREV_AN�SPECIAL_ABBREV_A�
CONSONANTS�ARTICLE_SPECIAL_EU�ARTICLE_SPECIAL_ONCE�ARTICLE_SPECIAL_ONETIME�ARTICLE_SPECIAL_UNIT�ARTICLE_SPECIAL_UBA�ARTICLE_SPECIAL_UKR�A_explicit_a�SPECIAL_CAPITALS�VOWELS�A_y_consr�r�r�r�r�r�r�r�r�r�r�r�rr
rrr r�r-r)r6r�rJrBrrrrrfrfs���
<��8��8����!��!��	��	�����0������������	?���
��
� 0�D�,!�";� ?�@�#��#�N �<��&��&�.�&��&�(�&��&�.�&��&�(�2��2�8�
=��
=��
=��
=��
<��
<��'��'�R�,.�
�B
��*_�B	�+��+�2%�0�9��9�P�d�0"�JC�N
����.
�B�
�c��	�t��	���	�T��	�C��	�4��	�D�!�	�3��	�S��	�S�!�	�s�#�	 �#�&�	�s�#�	�c�"�	�c�"�	�s��	�3��	���
�4��9��>'�0�!@��!@�J����$�&��&�B�
5�
.�
�5�5�M�(�$�V�E��:�)��)��.��.������D��D��p ��p �d�	��	��0@��0@rrf)rLN)T)�quartz�topaz)�snooze)�	ephemeris�iris�clitoris�	chrysalis�
epididymisr�)�anathema�bema�	carcinoma�charisma�diploma�dogma�drama�edema�enema�enigma�lemma�lymphoma�magma�melisma�miasma�oedema�sarcoma�schema�soma�stigma�stoma�trauma�gumma�pragma)�alumna�alga�vertebra�persona�vita)�amoeba�antenna�formula�	hyperbola�medusa�nebula�parabola�abscissa�hydra�nova�lacuna�aurora�umbra�flora�fauna)�stamen�foramen�lumen)	�	bacterium�agendum�desideratum�erratum�stratum�datum�ovum�extremum�candelabrum)�maximum�minimum�momentum�optimum�quantum�cranium�
curriculum�dictum�phylum�aquarium�
compendium�emporium�encomium�	gymnasium�
honorarium�interregnum�lustrum�
memorandum�
millennium�rostrum�spectrum�speculum�stadium�	trapezium�	ultimatum�medium�vacuum�velum�
consortium�	arboretum)	�alumnus�alveolus�bacillus�bronchus�locus�nucleus�stimulus�meniscus�sarcophagus)�focus�radius�genius�incubus�succubus�nimbus�fungus�	nucleolus�stylus�torus�	umbilicus�uterus�hippopotamus�cactus)�status�	apparatus�
prospectus�sinus�hiatus�impetus�plexus)	�	criterion�
perihelion�aphelion�
phenomenon�prolegomenon�noumenon�organon�	asyndeton�
hyperbaton)�oxymoron)�solo�soprano�basso�alto�	contralto�tempo�piano�virtuosorM>�ISO�NCO�NGO�ado�oto�NATO)�czech�eunuch�stomach)�codex�murex�silex)�radix�helix)�vortex�vertex�cortex�latex�pontifex�apexr�simplex)�appendix)�afrit�afreet�efreet)�goy�seraph�cherub)�	booklouse�
grapelouser��	woodlouse)�
wildebeest�swine�eland�bison�buffalo�cattle�elkr��zucchini�caribou�dace�grousezguinea fowlzguinea-fowl�haddock�hake�halibut�herring�mackerel�pickerel�pike�roe�seed�shad�snipe�teal�turbotz
water fowlz
water-fowl)�tuna�salmonr7�trout�breamzsea-basszsea bass�carp�cod�flounder�whiting�moosery�djinn�samuri�	offspring�pence�quid�hertz)�
Portuguese�Amoyese�Borghese�Congoese�Faroese�
Foochowese�Genevese�Genoese�
Gilbertese�Hottentotese�
Kiplingese�Kongoese�Lucchese�Maltese�
Nankingese�Niasese�	Pekingese�Piedmontese�	Pistoiese�
Sarawakese�Shavese�
Vermontese�
Wenchowese�Yengeese)
�butter�cash�	furniture�information�fish�deer�sheep�nese�rese�lese�mese�pox�craft)�Bolshois�Hanois)�Betelgeuses�Duses�Meuses�	Syracuses�	Toulouses)�abuses�	applauses�blouses�carouses�causes�chartreuses�clauses�contuses�douses�excuses�fuses�grouses�hypotenuses�	masseuses�
menopauses�misuses�muses�overuses�pauses�peruses�profuses�recluses�reuses�ruses�souses�spouses�suffuses�
transfusesrd)��Addies�Aggies�Allies�Amies�Angies�Annies�	Annmaries�Archies�Arties�Aussies�Barbies�Barries�Basies�Bennies�Bernies�Berties�Bessies�Betties�Billies�Blondies�Bobbies�Bonnies�Bowies�Brandies�Bries�Brownies�Callies�	Carnegies�Carries�Cassies�Charlies�Cheries�	Christies�Connies�Curies�Dannies�Debbies�Dixies�Dollies�Donnies�	Drambuies�Eddies�Effies�Ellies�Elsies�Eries�Ernies�Essies�Eugenies�Fannies�Flossies�Frankies�Freddies�
Gillespies�Goldies�Gracies�Guthries�Hallies�Hatties�Hetties�Hollies�Jackies�Jamies�Janies�Jannies�Jeanies�Jeannies�Jennies�Jessies�Jimmies�Jodies�Johnies�Johnnies�Josies�Julies�Kalgoorlies�Kathies�Katies�Kellies�Kewpies�Kristies�Laramies�Lassies�Lauries�Leslies�Lessies�Lillies�Lizzies�Lonnies�Lories�Lorries�Lotties�Louies�
Mackenzies�Maggies�Maisies�Mamies�Marcies�Margies�Maries�	Marjories�Matties�	McKenzies�Melanies�Mickies�Millies�Minnies�Mollies�Mounties�Nannies�Natalies�Nellies�Netties�Ollies�Ozzies�Pearlies�
Pottawatomies�Reggies�Richies�Rickies�Robbies�Ronnies�Rosalies�
Rosemaries�Rosies�Roxies�Rushdies�Ruthies�Sadies�Sallies�Sammies�Scotties�	Selassies�Sherries�Sophies�Stacies�	Stefanies�
Stephanies�Stevies�Susies�Sylvies�Tammies�Terries�Tessies�Tommies�Tracies�Trekkies�Valaries�Valeries�	Valkyries�Vickies�Virgies�Willies�Winnies�Wylies�Yorkies)G�aeries�baggies�belies�biggies�birdies�bogies�bonnies�boogies�bookies�bourgeoisies�brownies�budgies�caddies�calories�camaraderies�cockamamies�collies�cookies�coolies�cooties�coteries�crappies�curies�cutesies�dogies�eyries�floozies�footsies�freebies�genies�goalies�groupies�hies�	jalousies�junkies�kiddies�laddies�lassies�lies�	lingeries�magpies�
menageries�mommies�movies�neckties�newbies�nighties�oldies�	organdies�overlies�pies�pinkies�pixies�potpies�prairies�quickies�reveries�rookies�rotisseries�softies�sortiesr��stymies�sweeties�ties�	underlies�unties�veggies�vies�yuppies�zombies)�Chloes�Crusoes�Defoes�Faeroes�Ivanhoes�Joes�McEnroes�Moes�Monroes�Noes�Poes�Roscoes�Tahoes�Tippecanoes�Zoes)�aloes�backhoes�canoesr��floes�foes�hoes�
mistletoes�oboes�pekoes�roes�sloes�throes�tiptoes�toes�woes)�quartzes�topazes)�buzzes�fizzes�frizzes�razzes)�Andromaches�Apaches�Blanches�	Comanches�
Nietzsches�Porsches�Roches)�aches�
avalanches�	backaches�
bellyaches�caches�cloches�creches�douches�earaches�fiches�	headaches�
heartaches�microfiches�niches�	pastiches�psyches�quiches�stomachaches�
toothaches�tranches)�annexes�axes�deluxes�pickaxes)�Hesses�Jesses�	Larousses�Matisses)�bouillabaisses�	crevasses�
demitasses�impasses�mousses�posses)�Clives�
Palmolives)	�interweaves�weaves�olives�bivalves�	dissolves�resolves�salves�twelves�valves)z(.*[csx])isz(.*)cepsz[A-Z].*s)A�
amanuenses�
amniocenteses�analyses�
antitheses�
apotheoses�arterioscleroses�atherosclerosesr��	catalyses�	catharses�chasses�	cirrhoses�cocces�crises�	diagnoses�dialyses�diereses�electrolyses�emphases�exegeses�geneses�	halitoses�
hydrolyses�hypnoses�
hypotheses�
hystereses�
metamorphoses�
metastases�misdiagnoses�mitoses�
mononucleoses�narcoses�necroses�nemeses�neuroses�oases�osmoses�osteoporoses�	paralyses�parentheses�parthenogeneses�periphrases�photosyntheses�	probosces�	prognoses�prophylaxes�
prostheses�preces�	psoriases�psychoanalyses�
psychokineses�	psychoses�	scleroses�	scolioses�sepses�	silicoses�	symbioses�synopses�	syntheses�taxes�telekineses�theses�
thromboses�tuberculoses�
urinalyses)�de�du�da>r�r�r�r�r�r�)�did�had�ate�made�put�spent�fought�sank�gave�sought�shall�could�ought�should)r�r�r�r�r�r�)r�r�)rd)rr�ri�nil)�1r�rr-�each�everyrr)
r4r-r.r/�fourr0�six�sevenr1r2)
r��elevenr3�thirteen�fourteen�fifteen�sixteen�	seventeen�eighteen�nineteen)
r4r4�twenty�thirty�forty�fifty�sixty�seventy�eighty�ninety)rz	 thousandz millionz billionz	 trillionz quadrillionz quintillionz sextillionz septillionz
 octillionz
 nonillionz
 decillion(<�__conditional_annotations__rc�
__future__rr�rGr�r�r"r��numbersr�typingrrrrrr	r
rrr
rrr�more_itertoolsr�	typeguardr�compat.py38r�	Exceptionrr!r#r%r'r)r+r5rCrMrYr}r�updater�r�r�r�listr�rO�k1�k2r~r��pl_sb_z_zes_listr�pl_sb_ze_zes_listr�pl_sb_C_is_ides_complete�pl_sb_C_is_ides_endingsrq�pl_sb_C_is_ides_list�si_sb_C_is_ides_listr�r��pl_sb_C_a_ata_list�si_sb_C_a_ata_listr�r�rp�pl_sb_U_a_ae_list�si_sb_U_a_ae_listr�r��pl_sb_U_a_ae�pl_sb_C_a_ae_list�si_sb_C_a_ae_listr�r�rr�pl_sb_C_en_ina_list�si_sb_C_en_ina_listr�r�rs�pl_sb_U_um_a_list�si_sb_U_um_a_listr�r��pl_sb_U_um_a�pl_sb_C_um_a_list�si_sb_C_um_a_listr�r�rt�pl_sb_U_us_i_list�si_sb_U_us_i_listr�r��pl_sb_U_us_i�pl_sb_C_us_i_list�si_sb_C_us_i_listr�r�rur|r��pl_sb_U_on_a_list�si_sb_U_on_a_listr�r��pl_sb_U_on_a�pl_sb_C_on_a_list�si_sb_C_on_a_listr�rrv�pl_sb_C_o_irr�rwrr��pl_sb_U_o_os_endingsr	r��pl_sb_U_ch_chs_list�si_sb_U_ch_chs_listr�r��pl_sb_U_ch_chs�pl_sb_U_ex_ices_list�si_sb_U_ex_ices_listr�r��pl_sb_U_ex_ices�pl_sb_U_ix_ices_list�si_sb_U_ix_ices_listr�r��pl_sb_U_ix_ices�pl_sb_C_ex_ices_list�si_sb_C_ex_ices_listr�r�rx�pl_sb_C_ix_ices_list�si_sb_C_ix_ices_listr�r�ry�pl_sb_C_i_list�si_sb_C_i_listr�rrz�pl_sb_C_im_list�si_sb_C_im_listr�rr{�pl_sb_U_man_mans_list�pl_sb_U_man_mans_caps_list�si_sb_U_man_mans_listr�r��si_sb_U_man_mans_caps_listr�r��pl_sb_U_louse_lice_list�si_sb_U_louse_lice_listr�r��pl_sb_uninflected_s_complete�pl_sb_uninflected_s_endings�pl_sb_uninflected_sr�r�r��pl_sb_uninflected_endingsr�r�pl_sb_singular_s_endingsrr��si_sb_singular_s_endingsr��pl_sb_singular_s_esrB�pl_sb_singular_sr{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��plverb_special_s�_pl_sb_postfix_adj_defnr�rT�pl_sb_postfix_adj_stemsr��pl_prep_listrr��pl_prep�pl_sb_prep_dual_compoundr�r�r�r��pl_pron_acc_keysr��_thecase�_plur�
_gend_sing�si_pron_acc_keysr}r�r>rJ�compiler�rIr?rKrBrCrDr�r�rPrOrRrQ�VERBOSErmrzrwrjrirhr�rIr~rH�dictr�r%r�r�r�r�rjr�r��string_to_constantr�r�rr�r�r�r@rArErSr�rkrlrnrorprqrrrsrtrurvrxryrrrrrrrGr?r@rArBr�r�r/rD�Falsish�_STATIC_TYPE_CHECKINGrb�typerWrf)r�r�r?r9s000@r�<module>r�s�"���4�l#�
�����	������ -�!�"�	�	�	�	�y�	�	�Y�	�	��	�	��	�	�Y�	�	�Y�	��@�@�*�"!-�!-�N
� �
�N��X��h��_��h��
�	�7�	��"��Z�"��
�"��"�"��%�	"�
�H�"��L�
"��N�"��N�"��
�"��X�"���"�	�&�"�
�;�"��
�"��$�"� �^�!"�"�#�#"�$
�i�%"�&�N�'"�(�X�)"�*�W�+"�,�"�-"�.�-�/"�0�-�1"�2�z�3"�4��5"�6�-�7"�8
�j�9"�:�Y�;"�<�H�="�>�z�?"�@
�6�A"�B
�i�C"��H���(�)�
�j��X�
�G�	�6�	��*�+E�F��&5�&;�&;�&=�>�&=�F�Q�1�4�&=�>��	
�o�	�A�
�a�x��������B�4C�A�4F�F����o�b�1��A��	
�
,@�+E�+E�+G�H�+G��!���+G�H��/G�/M�/M�/O�P�/O�V�a�A�D�/O�P��	
�&�	'�A�
�a�x��������B�$�Q�'�	
� ��$�'?��'C�
%�Q�'�

(�'���,�-�����.�/��
�����
�� �6M�#N�6M��b���H�6M�#N�N���0�2I�I���)�6�1��G�	������@�'���2������
���&��T�2������
��,�&��T�2������5���(�%��3������
�� �&��Q�/������
��L�&��Q�/������
�� �&��Q�/������
��,�&��Q�/�������
��m�,��
�� �&��Q�/������
"���&��Q�/������	���K�(���;�?�;�a�#�2��x�q�\�;�?�@���R��-��D��*?�@�*?�Q�3�a��*?�@��D��D��D�
�D��	D�
�D��
D��D��D��D��D�
�D��D��D��D��D� 
�!D�"�#D�$�%D�&�'D�(�)D�*�+D�,�-D�.�/D�0
�1D�2�3D�4�5D�6�7D�8�9D�:�;D�<�=D�>�?D�@�AD�B�CD�D�ED�F�GD�H�ID�J�KD�L�MD�N�OD�P�QD�R�SD�T
�UD�V
�WD�X�YD�Z�[D�\�]D�^�_D�`�aD�b
�cD�d�eD�f�gD�h�iD�j�kD�l�mD�n
�oD�p
�qD�r�sD�t�uD�v
�wD�x�yD�z�{D�|�}D�~�D�@
�AD�B�CD�D�ED�F�GD�H�ID�J�KD�L�MD�N�OD�P
�QD�R�SD�T�UD�V
�WD�X�YD�Z�[D�\
�]D�^
�_D�`�aD�b
�cD�d
�eD�f�gD�h�iD�j�kD�l�mD�n�oD�p
�qD�r�sD�t�uD�v
�wD�x�yD�z�{D�|�}D�~�D�@�AD�B�CD�D�ED�F�GD�H
�ID�J
�KD�L�MD�N
�OD�P�QD�R
�SD�T�UD�V�WD�X
�YD�Z�[D�\
�]D�^
�_D�`�aD�b�cD�d�eD�f�gD�h
�iD�j�kD�l
�mD�n
�oD�p�qD�r�sD�t�uD�v�wD�x�yD�z�{D�|�}D�~
�D�@�AD�B�CD�D�ED�F�GD�H�ID�J�KD�L�MD�N
�OD�P�QD�R�SD�T
�UD�V
�WD�X
�YD�Z
�[D�\�]D�^�_D�`�aD�b�cD�d
�eD�f�gD�h�iD�j�kD�l�mD�n�oD�p�qD�r�sD�t�uD�v�wD�x�yD�z�{D�|�}D�~�D�@�AD�B
�CD�D
�ED�F�GD�H�ID�J�KD�L
�MD�N�OD�P�QD�R�SD�T�UD�V�WD�X�YD�Z�[D�\
�]D�^
�_D�`�aD�b�cD�d�eD�f�gD�h�iD�j
�kD�l
�mD�n�oD�p�qD�r�sD�t�uD�v�wD�x�yD�z
�{D�|
�}D�~
�D�@�AD�B�CD�D�ED�F�GD�H�ID��L�1�2���/C�D�/C�!��1�g�/C�D�E��
5���(�#�t�4������3���)�6�1�5������*���)�6�1�5������
	�� �)�6�1�5������%���)�6�1�5������/��BR��C��C�?��!�#3�Y�.��FV��T�4�G�C��#�%6�
��
�E�G�	�
�

�E�G���*�C��%�H�	�����/��d�u�M�	�� � �L���,�f�a�E�J�	����) ��) ��) ��	) �
�) ��
) ��) ��) ��) �
�) ��) �
�) �
�) ��) �
�) � �!) �"�#) �&
�') �(
�)) �*�+) �.�/) �0�1) �2
�3) �4�5) �8�9) �<�=) �>�?) �@
�A) �B�C) �D�E) �F
�G) �H�I) �J�K) �L�M) �N�O) �P
�Q) ��Z
�
�	��3�1�6�1��b���H�1�6�����B�,!�-!��2��:�& �' ��."�";�<��
!��!��!��!��	!�

�!��
!��!��!�
�!��!�
�!��!�
�!��!��!� �!!�"�#!�$�%!�&
�'!�(�)!�*
�+!�,�-!�.�/!�0
�1!�2�3!�4�5!�6
�7!�8
�9!�:�;!�<�=!�>�?!�@�A!�B�C!��H!�$�<�*A�A�� �!9�:��/H�I�/H�!�s�"�X�/H�I��.F�G�.F��c��H�.F�G�� �!9�:��"�m����H�H�!�5�
6�5��R��s�8�5�
6�	7�
�	����+��R����@]��~H��V��$��&&��9�
�����.:��C������

�� ��H�H�	��
�	�
� �
!�	"�2�	2������L�M�N���� �!��g�g�����$�:Q�$��=���c�h�h�'8�9�:�%�@��
C��J0�16���	
��!3�3����(��
�#�(�(�?�+�
,��0��	�9R�S��������
�k��
�5�	�
���
�6�
��|��	�&���|��	�&��
�l���F������F�� �W�!�"�H�#�$
�8�%�&
�8�'�(
�h�)��0
�{�0�0�2�3�2�V�a�A�D�2�3�=��	9������t��
	�$��k�	�5���	�6�
�|�	�6�
�|��&��l�
�F����� �3�8�8�K�0�1�� ��-��%0�%6�%6�%8�9�%8�6�A�!�$�%8�9����	���d������f�#�[�#�[�
	
��	���h��	����j�#�%9�#�%9�
	
��	���e������h�#�]�#�]�
	
��	���d������f�#�\�#�\�
	
��	���h��	����j�#�%9�#�%9�
	
��c=$��H�e�Z�| *�G�H��e��}=$�B�3�8�8�G�E�N�3�4�� ����0���	�%�	�5��%�	�6�
�F�
�F�	�6��$�
�D�
��!�	�5�!�
�E�!��W�!�
�g�	!�

�5�!��F�
!�
�5�!��U�!��F�!�
�f�!��W�!�
�g�!��W�!�
�g�!��F�!� �V�!!�"�F�#!�$�V�
�F��V�
�F��V��W�
�w�	�5�
�E�
�F��V��W��g�
�F��V�A!��F �Z�Z�	�'�#�(�(�0�1�
2�	3�;�?������
��"�J�J�7������E��,��&��+�
�H���v�t�V�V�W�f�g�N���j�j�	�'�#�(�(�>�*�
+�	,�B�/������
	�%�
�F�	�7�	�7�	�7��W�
���:�:��G�C�H�H�[�,A�$B�#C�2�F��
�
�V���:�:��
�J�J�
���:�:�B�B�M�M�R���z�z�:�B�M�M�J���
�
�7�����
��z�z�2�B�M�M�B���j�j�3�R�]�]�C���t��t��t��t��t��t��t��t��t��t����������s�z�z�|���
����
�	�
�	��	���z�z�Q�s�x�x��0�1��5�6��
T������
��$�
�E��T�5�%��
�#0�0�-�Q�D��-�0�
�"/�0�-�Q�5��-�0���d�G�U�F�D�A���
�
�:�&�
��
�
�/����?�
����2�3���Z�Z��#�$�B�'������!�j�j��$�%�R�(�"�-�-����j�j�<�=���j�j�B�'7�&8��!;�<��
�Z�Z��
�
��j�j�����7�����L�1���*�*�%F��
�
�V��
�Z�Z�+�R�]�]�
;�
��J�J�,�b�m�m�<�	��J�J�5�r�}�}�E���:�:�m�R�]�]�;��
�Z�Z�
�r�}�}�
5�
��Z�Z�	�2�=�=�9���z�z�+�r�}�}�=���*�*�]�B�M�M�B���z�z�"4�b�m�m�D���j�j�!:�B�M�M�J���j�j��"�-�-�8���:�:�.�/��	���K����	/���j�j��!��
�Z�Z��
$�
��z�z�/�*���J�J�7�8���*�*�1�2�����,�-���:�:�4�5���J�J�u��	��J�J�w�'��
�Z�Z��
(�
��j�j�� ���Z�Z�����
�
�
�6�����Z�Z���x�(��Z�Z���&�!��Z�Z�	��C� ��Z�Z�� �%�(��Z�Z�
��V�$��Z�Z�
��X�&��Z�Z���h�'��Z�Z������Z�Z�3�4�m�D�#��"	�
�
�5���
$�C�
$���&�����S�<�<�=�D�D�D�D�/��/�L@�L@��u8?��I��P��J$O��`@��A��TE��L6��~J��G��7��^4��0:��`	1��0si�1
AN1�
AN7�9
AN=�1AO�7AO�"
AO
�
AO�;AO�<AO�AO!�AO&�
AO+�%
AO1�"AO7�6AO<

Youez - 2016 - github.com/yon3zu
LinuXploit