
    g&                    L   d dl Z d dlZd dlZd dlmZ d dlmZ g dZ G d de      Z	 G d de      Z
 G d d	e      Z G d
 de      Z G d de j                        Z e       j!                  ej"                         eZeez  Zeez  ez  Zed eeiZeez  ez  ez  ez  e z  Z!ee"z  e#z  e$z  e%z  e&z  ez  Z' e(ejR                        Z* e(ejV                        Z,e*e,z  Z- e(ej\                        Z/ e(ej`                        Z1 e(d       e(dg      z  Z2e- e(d      z  Z3e- e(d      z  Z4dZ5 ejl                         Z7e7dz  Z8de8z  dz
  Z9eeeee"ee#ee e$eeee%e&dZ:ee"z  Z;d Z<ee"z  Z=ee=z  Z>d d ed e"e"e=e=iZ?ddddZ@dZA G d d      ZB eB       ZC eDeAj                               D ]  \  ZFZG eHeCeGeF        ddZId ZJd ZKd ZLd  ZMd! ZNd" ZOd# ZPdd%ZQd& ZRd' ZSd( ZTd) ZUd* ZVd+ ZWd, ZXd-d.d/d0ZYd1 ZZd2 Z[d3 Z\d4 Z]d5 Z^d6 Z_d7 Z`d8 Zad9 Zbd: Zcd; Zdd< Zed= Zfd> Zgd? Zhd@ ZidA ZjdB ZkdC ZldD ZmdE ZndF ZodG ZpdH ZqdI ZrdJ ZsdK ZtdL ZuddMZvdN ZwdO ZxdP ZydQ ZzdR Z{dS Z|dT Z}dU Z~dV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Z edfj                               Z edgj                               ZddhZdi Zdj Zdk Zdl ZdmZdZdZdZdZdnZdodpdqZe<de"drede=dsiZdt Z G du dv      Z G dw dxe      Z G dy dze      Z G d{ d|e      Z G d} d~e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G dÄ de      Z G dń deǫ      Z G dǄ deǫ      Z G dɄ deǫ      Z G d˄ deǫ      Z G d̈́ de      Z G dτ de      Z G dф deͫ      Z G dӄ de      Z G dՄ de      Z G dׄ de      Z G dل deѫ      Z G dۄ de      Z G d݄ dޫ      Z G d߄ d      Zd Zd Z G d d      Z ej                         Zi Zeڐj                         D ]j  \  Z\  ZZeېj                  edi f      \  ZZ eeee      Zeefee<   eߐj                         D ]$  \  ZZ eej                  ed      ee      ee<   & l ddddddddZ eddd       eddd$       eddd       eddd       eddd$       eddd       eddd$      dZ eϫ        e        ed$       e        eЫ        e        e       dZ ee      Zej!                   e        ed$       e        e       d        e        e        e«        e̫       dZy)    N)defaultdict)%AASCIIB	BESTMATCHDDEBUGEENHANCEMATCHFFULLCASEI
IGNORECASELLOCALEM	MULTILINEPPOSIXRREVERSESDOTALLTTEMPLATEUUNICODEV0VERSION0V1VERSION1WWORDXVERBOSEerrorScanner	RegexFlagc                       e Zd ZdZddZy)r&   a  Exception raised for invalid regular expressions.

    Attributes:

        msg: The unformatted error message
        pattern: The regular expression pattern
        pos: The position in the pattern where compilation failed, or None
        lineno: The line number where compilation failed, unless pos is None
        colno: The column number where compilation failed, unless pos is None
    Nc                 t   t        |t              rdnd}|| _        || _        || _        |w|u|j                  |d|      dz   | _        ||j                  |d|      z
  | _        dj                  ||      }||v r)|dj                  | j                  | j                        z  }t        j                  | |       y )N
   
r      z{} at position {}z (line {}, column {}))
isinstancestrmsgpatternposcountlinenorfindcolnoformat	Exception__init__)selfmessager1   r2   newlines        F/var/www/openai/venv/lib/python3.12/site-packages/regex/_regex_core.pyr9   zerror.__init__*   s    $Wc2$3?!--C81<DKw}}Wa==DJ)00#>G'!299$++**  	4)    )NN)__name__
__module____qualname____doc__r9    r>   r=   r&   r&      s    	*r>   r&   c                       e Zd Zy)_UnscopedFlagSetNr?   r@   rA   rC   r>   r=   rE   rE   =       r>   rE   c                       e Zd Zy)
ParseErrorNrF   rC   r>   r=   rI   rI   A   rG   r>   rI   c                       e Zd Zy)_FirstSetErrorNrF   rC   r>   r=   rK   rK   E   rG   r>   rK   c                       e Zd ZdxZZdxZZdxZZdxZ	Z
dxZZdxZZdxZZdxZZd	xZZd
xZZdxZZdxZZdxZZdxZZdxZZ dxZ!Z"dxZ#Z$d Z%e&jN                  Z'y)r(      i   i   i   i @           i   i          i       i   @   r-   c                    | j                   d| j                   z  S | j                  }g }|dk  }|r| }| j                  D ]@  }||j                  z  s||j                   z  }|j                  d|j                   z         B |r|j                  t	        |             dj                  |      }|rt        |      dkD  rd|z  }|S d|z  }|S )Nzregex.%sr   |r-   z~(%s)z~%s)_name__value_	__class__appendhexjoinlen)r:   valuemembersnegativemress         r=   __repr__zRegexFlag.__repr__]   s    ;;"++19FEAqyy !))#zAHH45  
 NN3u:&hhw7|am 
 ck
r>   N)(r?   r@   rA   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r   r   rc   object__str__rC   r>   r=   r(   r(   I   s    AA	AAAA
AA	AAAABBAAA: nnGr>   r(   z()|?*+{^$.[\# z -z &_-.)||~~&&--rP   r-   )abefir   ra   prsur   r    wxrN   rO   )ru   rs   r   a  
FAILURE
SUCCESS
ANY
ANY_ALL
ANY_ALL_REV
ANY_REV
ANY_U
ANY_U_REV
ATOMIC
BOUNDARY
BRANCH
CALL_REF
CHARACTER
CHARACTER_IGN
CHARACTER_IGN_REV
CHARACTER_REV
CONDITIONAL
DEFAULT_BOUNDARY
DEFAULT_END_OF_WORD
DEFAULT_START_OF_WORD
END
END_OF_LINE
END_OF_LINE_U
END_OF_STRING
END_OF_STRING_LINE
END_OF_STRING_LINE_U
END_OF_WORD
FUZZY
GRAPHEME_BOUNDARY
GREEDY_REPEAT
GROUP
GROUP_CALL
GROUP_EXISTS
KEEP
LAZY_REPEAT
LOOKAROUND
NEXT
PROPERTY
PROPERTY_IGN
PROPERTY_IGN_REV
PROPERTY_REV
PRUNE
RANGE
RANGE_IGN
RANGE_IGN_REV
RANGE_REV
REF_GROUP
REF_GROUP_FLD
REF_GROUP_FLD_REV
REF_GROUP_IGN
REF_GROUP_IGN_REV
REF_GROUP_REV
SEARCH_ANCHOR
SET_DIFF
SET_DIFF_IGN
SET_DIFF_IGN_REV
SET_DIFF_REV
SET_INTER
SET_INTER_IGN
SET_INTER_IGN_REV
SET_INTER_REV
SET_SYM_DIFF
SET_SYM_DIFF_IGN
SET_SYM_DIFF_IGN_REV
SET_SYM_DIFF_REV
SET_UNION
SET_UNION_IGN
SET_UNION_IGN_REV
SET_UNION_REV
SKIP
START_OF_LINE
START_OF_LINE_U
START_OF_STRING
START_OF_WORD
STRING
STRING_FLD
STRING_FLD_REV
STRING_IGN
STRING_IGN_REV
STRING_REV
FUZZY_EXT
c                       e Zd Zy)	NamespaceNrF   rC   r>   r=   rw   rw     rG   r>   rw   c                    t        | j                               }t        |      |z
  }|dk  ry||z  |z   }ddl}t	        |d      sy|j                  ||      D ]  }		 | |	=  |j                          i }
t        |       D ]   \  }}}}}}|||||||f<   	 |||f   |
||f<   " |j                          |j                  |
       y# t        $ r Y vw xY w# t        $ r Y _w xY w)aC  Make room in the given cache.

    Args:
        cache_dict: The cache dictionary to modify.
        args_dict: The dictionary of named list args used by patterns.
        max_length: Maximum # of entries in cache_dict before it is shrunk.
        divisor: Cache will shrink to max_length - 1/divisor*max_length items.
    r   Nsample)	tuplekeysr]   randomhasattrry   KeyErrorclearupdate)
cache_dict	args_dictlocale_sensitive
max_lengthdivisor
cache_keysoveragenumber_to_tossr|   
doomed_keysensitivity_dictr1   pattern_typeflagsargsdefault_versionlocales                    r=   _shrink_cacher     s    z()J*o
*G{ 	7*W4N 68$ 	mmJ?
	:& @ OOGLZGXCudOVKO	'<GH	6F|U\G\6]\723 HY ,-  		  		s$   CC	CC	CCc                 |    | j                   }|t        z  dk(  r|| j                  z  }t        j                  ||      S )zFolds the case of a string.r   )r   _ALL_ENCODINGSguess_encoding_regex	fold_case)infostringr   s      r=   
_fold_caser   ?  s;    JJE1$$$$E6**r>   c                 Z    t        t        j                  | j                  |            dkD  S z$Checks whether a character is cased.r-   )r]   r   get_all_casesr   )r   chars     r=   
is_cased_ir   G  s#    v##DJJ56::r>   c                 F    t        t        j                  | |            dkD  S r   )r]   r   r   )r   r   s     r=   
is_cased_fr   K  s    v##E401A55r>   c                 ~    t        | j                  t        z        }t        | ||      }|sg S |j	                  |      S )z&Compiles the firstset for the pattern.)boolr   r   _check_firstsetcompile)r   fsreverses      r=   _compile_firstsetr   O  s<    4::'(G	w	+B	 ::gr>   c                 p   |rd|v ryt               }t        }|D ]T  }t        |t              r|j                  s y||j
                  z  }|j                  |j                  t                     V |t        t        z  k(  ryt        | t        |      |t         z  d      }|j                  | |d      }|S )z$Checks the firstset for the pattern.N
case_flagsTr   	zerowidthin_set)setNOCASEr.   	Characterpositiver   add
with_flagsr   r   SetUnionlistoptimise)r   r   r   r_   r   ro   s         r=   r   r   Y  s     eGJa#AJJ 	all"
ALLFL34  h+, 
$W*y2H
B	T74	0BIr>   c                 :    g }| D ]  }|j                  |        |S )z(Flattens the code from a list of tuples.)extend)code	flat_codecs      r=   _flatten_coder   x  s'    I  r>   c                 f    | j                   t        z  }| j                   t        z  r
|t         z  }|S )zMakes the case flags.)r   
CASE_FLAGSr   r   )r   r   s     r=   make_case_flagsr     s/    JJ#E zzE(Lr>   Fc                 H    |rt        |      S t        |t        |             S )zMakes a character literal.r   )r   r   )r   r^   r   s      r=   make_characterr     s"    Ut'<==r>   c                 2    t        | ||t        |             S )zMakes a group reference.r   )RefGroupr   )r   namepositions      r=   make_ref_groupr     s    D$_T5JKKr>   c                 0    t        | |t        |             S )zMakes a string set.r   )	StringSetr   )r   r   s     r=   make_string_setr     s    T4OD,ABBr>   c                 @    |r|S |j                  t        |             S )zMakes a property.r   )r   r   )r   propr   s      r=   make_propertyr     s     ??od&;?<<r>   c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      dk(  r|d   S t	        |      S )zParses a pattern, eg. 'a|b|c'.rV   r-   r   )parse_sequencematchrZ   r]   Branch)sourcer   branchess      r=   _parse_patternr     sa    vt,-H
,,s
vt45 ,,s
 8}{(r>   c           	         dg}t        |      }	 | j                  }| j                         }|t        v r|dv r	|| _        n|dk(  r|j	                  t        | |d             n|dk(  r.t        | |      }|t        |      }n|j	                  |       n|dk(  rw|j                  t        z  r|j	                  t                      nh|j                  t        z  r|j	                  t                      n:|j	                  t                      n|dk(  r|j	                  t        | |             n|dk(  rw|j                  t        z  rI|j                  t        z  r|j	                  t                      n|j	                  t!                      n|j	                  t#                      n|d	k(  r|j                  t        z  rI|j                  t        z  r|j	                  t%                      n;|j	                  t'                      n |j                  t        z  r|j	                  t)                      n|j	                  t+                      n|d
v rt-        | ||      }|r#t/        | ||||||       |j	                  d       nt1        | |||      }|r"t3        | |||||       |j	                  d       nq|j	                  t5        t7        |      |             nK|j	                  t5        t7        |      |             n%|j	                  t5        t7        |      |             %|D 	cg c]  }	|	|		 }}	t9        |      S c c}	w )zParses a sequence, eg. 'abc'.Nz)|\F(.[^$z?*+{r   )r   r2   getSPECIAL_CHARSrZ   parse_escapeparse_parenr   r   AnyAllr#   AnyUAny	parse_setr   StartOfLineUStartOfLineStartOfString
EndOfLineU	EndOfLineEndOfStringLineUEndOfStringLineparse_quantifierapply_quantifierparse_fuzzyapply_constraintr   ordSequence)
r   r   sequencer   	saved_poschelementcountsconstraintsitems
             r=   r   r     s   vH &J
JJ	ZZ\Tz&
tVT5 ABs%fd3?!0!6JOOG,s::&OOFH-ZZ$&OODF+OOCE*s	&$ 78s::	)zzD( 7 6OOMO4s::	)zzD( 
5 	4zzD( (8(:; (9:v)&$;$VT6:r+OOD) #.fdB
"KK"({J#X/ - !	#b'%/)1 2 	#b'j IJ OOIc"g*EFW Z "*>T-=H>H ?s   9MMc                    |j                         }|0|rt        d| j                  |      t        d| j                  |      t        |t        t
        t        f      rt        d| j                  |      |\  }}	| j                  }| j                         }|dk(  rt
        }
n|dk(  rt        }
n|| _        t        }
|j                         s|dk7  s|	dk7  r
 |
|||	      }|j                  |       y )Nzmultiple repeatznothing to repeat?+r-   )popr&   r   r.   GreedyRepeat
LazyRepeatPossessiveRepeatr2   r   is_emptyrZ   )r   r   r   r   r   r   r   r   	min_count	max_countrepeateds              r=   r   r     s    llnG)6==)DD'	BB'L*6FGH%v}}i@@!Iy

I	B	Sy	s# 
 9>Y!^7Iy9OOGr>   c                    |j                         }|t        d| j                  |      t        |t              r-t        |j                  |      |_        |j                  |       y |j                  t        ||             y )Nznothing for fuzzy constraint)r   r&   r   r.   GroupFuzzy
subpatternrZ   )r   r   r   r   r   r   r   s          r=   r   r     sf    llnG2FMM9MM '5!"7#5#5{C g{34r>   )r   r-   r   Nr-   N)r   *r   c                 ^    t         j                  |      }|r|S |dk(  rt        |       }|r|S y)zParses a quantifier.{N)_QUANTIFIERSr   parse_limited_quantifier)r   r   r   qr   s        r=   r   r   /  s6    A	Sy)&1Mr>   c                      | duxr	 | t         k\  S )z,Checks whether a count is above the maximum.N	UNLIMITED)r3   s    r=   is_above_limitr  >  s    3)!33r>   c                    | j                   }t        |       }| j                  d      r*t        |       }t        |xs d      }|rt        |      nd}n|s|| _         yt        |      x}}| j                  d      s|| _         yt	        |      st	        |      rt        d| j                  |      |||kD  rt        d| j                  |      ||fS )zParses a limited quantifier.,r   N}zrepeat count too bigz"min repeat greater than max repeat)r2   parse_countr   intr  r&   r   )r   r   r   r   s       r=   r  r  B  s    

IF#I||C'	 	Q'	&/C	NT	"FJ #I.	I<<
i N9$=*FMM9EEY!68&--
 	 ir>   c                 x   | j                   }|dk7  ryi }	 t        | |       | j                  d      rt        | |       | j                  d      r| j                  d      rt	        | ||      |d<   | j                  d      s!t        d| j                  | j                         |S # t        $ r
 || _         Y yw xY w)z#Parses a fuzzy setting, if present.r
  Nr  :testr  z
expected })r2   parse_fuzzy_itemr   rI   parse_fuzzy_testr&   r   )r   r   r   r   r   r   s         r=   r   r   `  s    

I	SyK-ll3V[1 ll3 ||C.vtZHF<<L&--<<  
s   :B& &B98B9c                 z    | j                   }	 t        | |       y# t        $ r || _         t        | |       Y yw xY w)zParses a fuzzy setting item.N)r2   parse_cost_constraintrI   parse_cost_equation)r   r   r   s      r=   r  r  x  s:    

I1fk2 1
FK01s    ::c                    | j                   }| j                         }|t        v rbt        | ||      }t	        |       }|d||<   y| j                   }t        |       }|s|dz  }|dk  rt        d| j                  |      d|f||<   y|t        v r|| _         | j                   }t        |       }t	        |       }	|	
t               t        | || j                               }t	        |       }|
t               | j                   }t        |       }|	s|dz  }|s|dz  }d|cxk  r|k  sn t        d| j                  |      ||f||<   yt               )zParses a cost constraint.Nr  r-   r   bad fuzzy cost limit)
r2   r   ALPHAparse_constraintparse_fuzzy_compareparse_cost_limitr&   r   DIGITSrI   )
r   r   r   r   
constraintmax_inccost_posmax_costmin_costmin_incs
             r=   r  r    s\   

I	B	U{%fk2>
%f-?&-K
# zzH'/H A!|2FMM8LL&'kK
#	v
 ::#F+%f-?,%fk6::<H
%f-?, ::#F+ MHMHH((.xHH"*H"4Jlr>   c                     | j                   }t        |       }	 t        |      S # t        $ r Y nw xY wt	        d| j
                  |      )zParses a cost limit.r   )r2   r  r  
ValueErrorr&   r   )r   r(  digitss      r=   r$  r$    sL    zzH F6{  &x
@@s   
$ 	00c                 >    |dvr
t               ||v r
t               |S )zParses a constraint.deis)rI   )r   r   r   s      r=   r"  r"    s'    	l	[lIr>   c                 L    | j                  d      ry| j                  d      ryy)zParses a cost comparator.z<=T<FNr   r   s    r=   r#  r#    s#    ||D	c	r>   c                    d|v r!t        d| j                  | j                        i }t        | |       | j	                  d      rt        | |       | j	                  d      rt        |       }|
t               t        t        |             }|s|dz  }|dk  r!t        d| j                  | j                        ||d<   ||d<   y)	zParses a cost equation.costzmore than one cost equationr   Nr-   r   r   max)	r&   r   r2   parse_cost_termr   r#  rI   r  r  )r   r   r6  r'  r)  s        r=   r  r    s    16==&**MMDFD!
,,s
% ,,s
 "&)Gl;v&'HA!|*FMM6::FFDKKr>   c                     t        |       }| j                         }|dvr
t               ||v r!t        d| j                  | j
                        t        |xs d      ||<   y)zParses a cost equation term.diszrepeated fuzzy costr-   N)r  r   rI   r&   r   r2   r  )r   r6  coeffr   s       r=   r8  r8    sV    E	B	l	Tz)6==&**EE5:ADHr>   c                    | j                   }| j                         }|t        v r|dk(  rt        | |d      S |dk(  rD|j                  t
        z  r
t               S |j                  t        z  r
t               S t               S |dk(  rt        | |      S t        d| j                  |      |rt        t        |      |      S t        d| j                  |      )Nr   Fr   r   zexpected character setr   )r2   r   r   r   r   r   r   r#   r   r   r   r&   r   r   r   )r   r   r   r   r   s        r=   r  r    s    

I	B	]:e443YzzF"xd"vu3YVT**0&--KK	RZ88,fmmYGGr>   c                 ,    | j                  t              S )z0Parses a quantifier's count, which can be empty.)	get_whiler%  r4  s    r=   r  r    s    F##r>   c                 T   | j                   }| j                  d      }|dk(  r| j                   }| j                  d      }|dk(  r| j                   }| j                         }|dv rt        | |d|dk(        S || _         t        |       }|j	                  |      }| j                  d       |j                  }	 t        | |      }	| j                  d       ||_        t        |j                  t        z        | _
        |j                          t        |||	      S |dv rt        | |d|dk(        S |d	k(  rt        | |      S |d
k(  rt        |       S |dk(  rt        | |      S |dk(  rt!        | |      S |dk(  rt#        | |      S |dk(  sd|cxk  rdk  rn nt%        | |||      S |dk(  rt'        | ||      S || _         t)        | |      S |dk(  r|| j                   }| j+                  t-        d      d      }
|
dd j/                         rAt0        j                  |
      }|st3        d| j4                  |      | j                  d       |S || _         |j	                         }|j                  }	 t        | |      }	| j                  d       ||_        t        |j                  t        z        | _
        |j                          t        |||	      S # ||_        t        |j                  t        z        | _
        w xY w# ||_        t        |j                  t        z        | _
        w xY w)z[Parses a parenthesised subpattern or a flag. Returns FLAGS if it's an
    inline flag.
    Tr   r2  =!rA  >)Fr   #r   rV   r   09&r  )>includeNr-   zunknown verb)r2   r   parse_lookaround
parse_name
open_groupexpectr   r   r   r%   ignore_spaceclose_groupr  parse_extensionparse_commentparse_conditionalparse_atomicparse_commonparse_call_groupparse_call_named_groupparse_flags_subpatternr>  r   isalphaVERBSr&   r   )r   r   r   r   saved_pos_2saved_pos_3r   groupsaved_flagsr  wordverbs               r=   r   r   #  s    

I	D	B	SyjjZZ9 **KBZ'dB#IFF %FJf%DOOD)EMM#**KA+FD9
c"(
&*4::+?&@#uj11#FD%sCC9"64009 ((9$VT229--9--9r(S(#FD"kBB9)&$DD !
%fd33	SyjjD	591:99T?DNFMM;GGMM#K FJOOE**K9#FD1
c 
"4::#78uj))y )
&*4::+?&@#l !
"4::#78s   8K .K= *K:=*L'c                    | j                   }| j                         }|dk(  rt        |       }|j                  |      }| j	                  d       |j
                  }	 t        | |      }| j	                  d       ||_        t        |j
                  t        z        | _	        |j                          t        |||      S |dk(  rSt        | d      }| j	                  d       |j                  |      rt        d| j                  |      t        |||      S |dk(  s|dk(  rt!        | ||      S || _         t        d	| j                  |      # ||_        t        |j
                  t        z        | _	        w xY w)
zParses a Python extension.r2  rC  rD  rA  T)allow_numericcannot refer to an open grouprH  unknown extension)r2   r   rM  rN  rO  r   r   r   r%   rP  rQ  r  is_open_groupr&   r   r   rX  )r   r   r   r   r   r^  r_  r  s           r=   rR  rR  }  sN   

I	B	Sy&!%cjj	='5JMM#$DJ"&tzzG';"<FT5*--	Sy&5cd#7  dD)44	SyB#I%fdI>>FJ
#V]]I
>>) %DJ"&tzzG';"<Fs   E *E5c                     	 | j                   }| j                  d      }|r|dk(  rn|dk(  r| j                  d      }<|| _         | j                  d       y)zParses a comment.TrD  r   N)r2   r   rO  )r   r   r   s      r=   rS  rS    sZ    
JJ	JJtAH9

4 A  FJ
MM#r>   c                    |j                   }	 t        | |      }| j                  d       ||_         t        |j                   t        z        | _        t        |||      S # ||_         t        |j                   t        z        | _        w xY w)zParses a lookaround.rD  )r   r   rO  r   r%   rP  
LookAround)r   r   behindr   r_  r  s         r=   rL  rL    su    **K9#FD1
c 
"4::#78fh
33 !
"4::#78s   A   *B
c                 :   |j                   }| j                  }| j                         }|dk(  rw| j                         }|dv rt        | |d|dk(        S |dk(  r%| j                         }|dv rt        | |d|dk(        S || _        t	        d| j
                  | j                        || _        	 t        | d      }| j                  d       t        | |      }| j                  d	      rt        | |      }n
t               }| j                  d       ||_         t        |j                   t        z        | _        |j                         r|j                         r
t               S t        |||||      S # ||_         t        |j                   t        z        | _        w xY w)
z Parses a conditional subpattern.r   r@  FrA  r2  Tzexpected lookaround conditionalrD  rV   )r   r2   r   parse_lookaround_conditionalr&   r   rM  rO  r   r   r   r   r%   rP  r   Conditional)r   r   r_  r   r   r^  
yes_branch	no_branchs           r=   rT  rT    sy   **K

I	B	SyZZ\/eR3YOO9BZ3FD$I   
5v}}
** 	 FJ964(c#FD1
<<&vt4I 
Ic 
"4::#78!3!3!5ztUJ	9EE !
"4::#78s   -A"E0 0*Fc                    |j                   }	 t        | |      }| j                  d       ||_         t        |j                   t        z        | _        t        | |      }| j                  d      rt        | |      }n
t               }| j                  d       t        |||||      S # ||_         t        |j                   t        z        | _        w xY w)NrD  rV   )
r   r   rO  r   r%   rP  r   r   r   LookAroundConditional)r   r   rj  r   r_  r  rn  ro  s           r=   rl  rl    s    **K9#FD1
c 
"4::#78-J||C"640	J	
MM# :z  !
"4::#78s   B' '*Cc                    |j                   }	 t        | |      }| j                  d       ||_         t        |j                   t        z        | _        t        |      S # ||_         t        |j                   t        z        | _        w xY w)zParses an atomic subpattern.rD  )r   r   rO  r   r%   rP  Atomic)r   r   r_  r  s       r=   rU  rU    sq    **K9#FD1
c 
"4::#78* !
"4::#78s   A *Bc                 n   |j                   }t        | |      g}|j                   }| j                  d      rJ||_         |j                  t        | |             t	        ||j                         }| j                  d      rJ||_         | j                  d       t        |      dk(  r|d   S t        |      S )zParses a common groups branch.rV   rD  r-   r   )group_countr   r   rZ   r7  rO  r]   r   )r   r   initial_group_countr   final_group_counts        r=   rV  rV  	  s     **vt,-H((
,,s
.vt45 143C3CD ,,s

 )D
MM#
8}{(r>   c                 ~    |dk(  rd}n|| j                  t              z   }| j                  d       t        |||      S )zParses a call to a group.r   rF  rD  )r>  r%  rO  	CallGroup)r   r   r   r2   r^  s        r=   rW  rW    s>    	SyV%%f--
MM#T5#&&r>   c                 T    t        |       }| j                  d       t        |||      S )zParses a call to a named group.rD  )rM  rO  ry  )r   r   r2   r^  s       r=   rX  rX  &  s'    vE
MM#T5#&&r>   c                     d}	 	 | j                   }| j                         }|dk(  r|| j                         z  }|t        |   z  }A# t        $ r | _         Y |S w xY w)zParses a set of inline flags.r   V)r2   r   REGEX_FLAGSr~   )r   r   r   r   s       r=   parse_flag_setr~  -  sj    E

IBSyfjjl"[_$E   
Ls   AA AAc                     t        |       }| j                  d      r.t        |       }|s#t        d| j                  | j                        d}|t
        z  rd|_        ||fS )z!Parses flags being turned on/off.-z$bad inline flags: no flags after '-'r   T)r~  r   r&   r   r2   r   inline_localer   r   flags_on	flags_offs       r=   parse_flagsr  =  sd    f%H||C"6*	>jj  	&!Yr>   c                 v   |j                   }|j                   |z  | z  |_         t        |j                   t        z        | _        	 t	        | |      }| j                  d       ||_         t        |j                   t        z        | _        |S # ||_         t        |j                   t        z        | _        w xY w)z&Parses a subpattern with scoped flags.rD  )r   r   r%   rP  r   rO  )r   r   r  r  r_  r  s         r=   parse_subpatternr  N  s    **K**x'I:5DJtzzG34F9#FD1
c 
"4::#78 !
"4::#78s   B *B8c                    t        | |      \  }}|t        z  r!t        d| j                  | j                        ||z  r!t        d| j                  | j                        ||j
                   z  t        z  }|r*|xj
                  |z  c_        t        |j
                        |t         z  }| j                  d      rt        | |||      S | j                  d      rt        | |||       yt        d| j                  | j                        )zParses a flags subpattern. It could be inline flags or a subpattern
    possibly with local flags. If it's a subpattern, then that's returned;
    if it's a inline flags, then None is returned.
    z-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and offr  rD  Nre  )
r  GLOBAL_FLAGSr&   r   r2   global_flagsrE   r   r  parse_positional_flags)r   r   r  r  new_global_flagss        r=   rY  rY  \  s   
 &fd3Hi<C
--% 	% )>
** 	 !D$5$5#55E-- t0011 H||Ch	BB||CvtXyA
#V]]FJJ
??r>   c                 v    |j                   |z  | z  |_         t        |j                   t        z        | _        y)zParses positional flags.N)r   r   r%   rP  r  s       r=   r  r    s/    **x'I:5DJtzzG34Fr>   c                 x   | j                  t        d      d      }|s!t        d| j                  | j                        |j                         r9|rdnd}|rt        |      |k  r!t        d| j                  | j                        |S |j                         s!t        d| j                  | j                        |S )zParses a name.rI  FrJ  zmissing group namer   r-   zbad character in group name)r>  r   r&   r   r2   isdigitr  isidentifier)r   rc  allow_group_0r   	min_groups        r=   rM  rM    s    CIu5D(&--DD||~&AA	D	I 55v}}jj  K	   "5v}}jj  Kr>   c                 &    t        d | D              S )z!Checks whether a string is octal.c              3   ,   K   | ]  }|t         v   y wN)
OCT_DIGITS.0r   s     r=   	<genexpr>zis_octal.<locals>.<genexpr>       1&BrZ&   allr   s    r=   is_octalr        1&111r>   c                 &    t        d | D              S )z#Checks whether a string is decimal.c              3   ,   K   | ]  }|t         v   y wr  )r%  r  s     r=   r  zis_decimal.<locals>.<genexpr>  s     -frV|fr  r  r  s    r=   
is_decimalr    s    -f---r>   c                 &    t        d | D              S )z'Checks whether a string is hexadecimal.c              3   ,   K   | ]  }|t         v   y wr  )
HEX_DIGITSr  s     r=   r  z!is_hexadecimal.<locals>.<genexpr>  r  r  r  r  s    r=   is_hexadecimalr    r  r>   c                    | j                   }d| _         | j                         }|| _         |s!t        d| j                  | j                        |t
        v rt        | ||t
        |   ||      S |dk(  r|s| j                  }	 t        | |      S |dk(  r|s
t               S |dk(  r|st        | |      S |dk(  rt        | ||      S |dv rt        | ||dk(  |      S |d	k(  rn|slg d
}|j                  t        k(  r|j!                  g d       t#        t%        t'        ddg      t)        ||D cg c]  }t+        |       c}      g            S |dk(  r|s
t-               S |t.        v r|sB|j0                  t2        z  rt4        j                  |      }nt6        j                  |      }|r|S t8        j                  |      }|r|S t:        j                  |      }|rt+        t        |            S t        d|z  | j                  | j                        |t<        v rt?        | |||      S t        |t        |      |      S # t        $ r
 || _        Y nw xY wt        |t        |      |      S c c}w )zParses an escape sequence.Fbad escape (end of pattern)gGr   NpPrp   r   )
            )   i(   i)   r  r  r$   bad escape \%s) rP  r   r&   r   r2   HEX_ESCAPESparse_hex_escapeparse_group_refr   r   SearchAnchorparse_string_setparse_named_charparse_propertyr   r   r   rs  r   Stringr   r   Graphemer!  r   r#   WORD_POSITION_ESCAPESPOSITION_ESCAPESCHARSET_ESCAPESCHARACTER_ESCAPESr%  parse_numeric_escape)	r   r   r   saved_ignorer   r   charsetr   r^   s	            r=   r   r     se   &&LF	B&F16==&**MM	[b+b/62NN	s6JJ		#"6400 
s6~	s6--	sf55	tfdB#Iv>>	s6*')NN12ffdD\2HTDa ENaLD 5     	 	s6z	u zzD -11"5(,,R0##B'L!%%b)SZ((%*FMM6::FF	v#FD"f== dCGV44m  	#"FJ	# dCGV44&Ds   H< )I(<IIc                    |s|dk(  rt        | ||g|      S |}| j                  }| j                         }|t        v r|||z  }| j                  }| j                         }t	        |      rP|t
        v rH|j                  t        z  }|t        k(  s	|t        k(  rd}nd}t        ||z   d      |z  }t        ||      S || _        |j                  |      r!t        d| j                  | j                        t        ||| j                        S )z!Parses a numeric escape sequence.rF       rP   rd  )parse_octal_escaper2   r   r%  r  r  r   r   r   r   r  r   rf  r&   r   r   )	r   r   r   r   r.  r   encoding
octal_maskr^   s	            r=   r  r    s    s!&$f== F

I	B	V|"JJ	ZZ\Fj 0zzN2H5 H$6!
"
Q'*4E!$.. FJ&!3V]]FJJOO$

33r>   c                 2   | j                   }| j                         }t        |      dk  rL|t        v rD|j	                  |       | j                   }| j                         }t        |      dk  r	|t        v rD|| _         	 t        dj                  |      d      }t        |||      S # t        $ rf |d   t        v r3t        ddj                  |      z  | j                  | j                         t        d|d   z  | j                  | j                         w xY w)z Parses an octal escape sequence.   rf   rP   r   zincomplete escape \%sr  )r2   r   r]   r  rZ   r  r\   r   r-  r&   r   )r   r   r.  r   r   r   r^   s          r=   r  r    s    

I	B
f+/bJ.bJJ	ZZ\ f+/bJ.
 FJ	BGGFOQ'dE622 !9
"02776?BmmVZZ) ) )F1I5v}}jj s   ?'B' 'A/Dc                    | j                   }g }t        |      D ]V  }| j                         }	|	t        vr+t	        d|dj                  |      | j                  |      |j                  |	       X 	 t        dj                  |      d      }
|
dk  rt        ||
|      S t	        d|dj                  |      | j                  |      # t        $ r Y 6w xY w)zParses a hex escape sequence.incomplete escape \rf   rQ   i   zbad hex escape \)r2   ranger   r  r&   r\   r   rZ   r  r   r-  )r   r   escexpected_lenr   typer   r.  ro   r   r^   s              r=   r  r  "  s    

IF< ZZ\ZdBGGFOLmmY( (b !7BGGFOR( 8!$v66 3@mmY     s   4C 	CCc                     | j                  d       | j                  }t        | d      }| j                  d       |j                  |      r!t	        d| j
                  | j                        t        |||      S )zParses a group reference.r2  TrC  rd  )rO  r2   rM  rf  r&   r   r   )r   r   r   r   s       r=   r  r  9  sd    
MM#

Ifd#D
MM#$3V]]FJJOO$i00r>   c                     | j                  d       t        | d      }| j                  d       |||j                  vr!t        d| j                  | j
                        t        ||      S )zParses a string set reference.r2  TrC  zundefined named list)rO  rM  kwargsr&   r   r2   r   )r   r   r   s      r=   r  r  D  s[    
MM#fd#D
MM#|t4;;.*FMM6::FF4&&r>   c                 z   | j                   }| j                  d      rT| j                  t        d      }| j                  d      r,	 t	        j
                  |      }t        |t        |      |      S || _         t        |t        d      |      S # t        $ r" t        d| j                  | j                         w xY w)zParses a named character.r
  T)keep_spacesr  undefined character namer  )r2   r   r>  NAMED_CHAR_PARTunicodedatalookupr   r   r~   r&   r   )r   r   r   r   r   r^   s         r=   r  r  N  s    

I||CTB<<#**40%dCJ??
 FJ$C&11  6** s   *B +B:c                 h   | j                   }| j                         }|dk(  rN| j                  d      }t        |       \  }}| j                  d      r?t	        ||||k7  |       }	t        ||	|      S |r|dv rt	        d|||       }	t        ||	|      S || _         |rdnd}t        |t        |      |      S )zParses a Unicode property.r
  r   r  CLMNPSZNrp   r   )r2   r   r   parse_property_namelookup_propertyr   r   r   )
r   r   r   r   r   r   negate	prop_namer   r   s
             r=   r  r  ^  s    

I	B	Syc"-f5	4<<"9dH4FOD tV44	itR6:T400 FJcB$B00r>   c                    | j                  t              }| j                  }| j                         }|rI|dv rE|}| j                  t        t        d      z        j                         }|r| j                  }nd|}}nd}|| _        ||fS )z/Parses a property name, which may be qualified.z:=z &_-./N)r>  PROPERTY_NAME_PARTr2   r   ALNUMr   strip)r   r   r   r   r  s        r=   r  r  s  s    ./D

I	B	bDj	H 56<<>

I #ItI	FJd?r>   c                    |j                   t        z  xs t        }| j                  }d| _        | j	                  d      }	 |t
        k(  rt        | |      }nt        | |      }| j	                  d      s!t        d| j                  | j                        	 || _        |r|j                  |j                         }|j                  t        |            }|S # || _        w xY w)zParses a character set.Fr   ]	missing ]r   r   )r   _ALL_VERSIONSDEFAULT_VERSIONrP  r   r   parse_set_imp_unionparse_set_unionr&   r   r2   r   r   r   )r   r   versionr  r  r   s         r=   r   r     s    zzM)=oG&&LF\\#F	+h&vt4D"640D||C V]]FJJ?? ! +DMM(9:??od&;?<DK +s   AC 	C"c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      dk(  r|d   S t	        ||      S )zParses a set union ([x||y]).rg   r-   r   )parse_set_symm_diffr   rZ   r]   r   r   r   itemss      r=   r  r    sb     ./E
,,t
(67 ,,t
 5zQQxD%  r>   c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      dk(  r|d   S t	        ||      S )z+Parses a set symmetric difference ([x~~y]).rh   r-   r   )parse_set_interr   rZ   r]   
SetSymDiffr  s      r=   r  r    sa    VT*+E
,,t
_VT23 ,,t
 5zQQxdE""r>   c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      dk(  r|d   S t	        ||      S )z#Parses a set intersection ([x&&y]).ri   r-   r   )parse_set_diffr   rZ   r]   SetInterr  s      r=   r  r    sa    FD)*E
,,t
^FD12 ,,t
 5zQQxD%  r>   c                     t        | |      g}| j                  d      r-|j                  t        | |             | j                  d      r-t        |      dk(  r|d   S t	        ||      S )z!Parses a set difference ([x--y]).rj   r-   r   )r  r   rZ   r]   SetDiffr  s      r=   r  r    sb     ./E
,,t
(67 ,,t
 5zQQx4r>   c                 h    |j                   t        z  xs t        }t         |      g}	  j                  } j                  d      r| _        nE|t        k(  r t         fdt        D              r| _        n|j                  t         |             jt        |      dk(  r|d   S t        ||      S )z#Parses a set implicit union ([xy]).r  c              3   @   K   | ]  }j                  |        y wr  r3  )r  opr   s     r=   r  z&parse_set_imp_union.<locals>.<genexpr>  s     &J'Bv||B'7'   r-   r   )r   r  r  parse_set_memberr2   r   r!   anySET_OPSrZ   r]   r   )r   r   r  r  r   s   `    r=   r  r    s    zzM)=oGfd+,E
JJ	<<"FJh3&J'&J#J"FJ%fd34  5zQQxD%  r>   c           	         t        | |      }| j                  }t        |t              r|j                  r| j                  d      s|S |j                  t        z  xs t        }| j                  }|t        k(  r| j                  d      r	|| _        |S | j                  d      r'|| _        t        ||t        t        d            g      S t        | |      }t        |t              r|j                  s!t        ||t        t        d            |g      S |j                  |j                  kD  r!t        d| j                  | j                        |j                  |j                  k(  r|S t        |j                  |j                        S )z#Parses a member in a character set.r  r  zbad character range)parse_set_itemr2   r.   r   r   r   r   r  r  r!   r   r   r^   r&   r   Range)r   r   start
saved_pos1r  
saved_pos2ends          r=   r  r    s8    64(EJui(ll3zzM)=oG J(v||C0  
||C  
uiC&9:;; 
&Cc9%S\\uiC&93?@@ {{SYY)6==&**EE{{ciicii((r>   c                    |j                   t        z  xs t        }| j                  d      rt	        | |d      S | j
                  }| j                  d      r	 t        | |      S |t        k(  r| j                  d      rp| j                  d      }t        | |      }| j                  d      s!t        d| j                  | j
                        |r|j                  |j                         }|S | j                         }|s!t        d	| j                  | j
                        t        t!        |            S # t        $ r
 || _        Y w xY w)
z"Parses an item in a character set.r   Tz[:r   r   r  r  r  zunterminated character set)r   r  r  r   r   r2   parse_posix_classrI   r!   r  r&   r   r   r   r   r   r   )r   r   r  r   r  r   r   s          r=   r  r    s   zzM)=oG||DFD$//

I||D	#$VT22
 (v||C0 c"vt,||C V]]FJJ????,=?>D	B0&--LLSW/  	#"FJ	#s   D5 5EEc                     | j                  d      }t        |       \  }}| j                  d      s
t               t        ||| | d      S )zParses a POSIX character class.r   z:]T)posix)r   r  rI   r  )r   r   r  r  r   s        r=   r	  r	  1  sG    \\#F)&1OIt<<l9dJdKKr>   c                 |    t        |       }| |z
  }t        |      dk  r|dfS t        d|z        \  }}||z  |z   |fS )z$Converts a float to a rational pair.g-C6?r-   g      ?)r  absfloat_to_rational)fltint_partr&   dennums        r=   r  r  :  sP    3xH(NE
5zF{ u-HCc>C$$r>   c                 z   | dd dk(  r| d   | dd } }nd}| j                  d      }t        |      dk(  r*t        t        |d         t        |d         z        \  }}n3t        |      dk(  rt        t        |d               \  }}n
t	               dj                  |||      }|j                  d	      r|dd
 S |S )z<Converts a numeric string to a rational string, if possible.Nr-   r  r   rf   /rN   z{}{}/{}z/1)splitr]   r  floatr-  r7   endswith)numericsignpartsr  r  results         r=   numeric_to_rationalr  E  s    !}
GACMgMM#E
5zQ$U58_uU1X%FGS	Uq$U58_5SldC-Ftt}Mr>   c                     	 t        dj                  |             S # t        t        f$ r) dj                  d | D              j	                         cY S w xY w)z&Standardises a property or value name.rf   c              3   *   K   | ]  }|d vs|  yw)z_- NrC   r  s     r=   r  z#standardise_name.<locals>.<genexpr>_  s     <DbBeOrDs   	)r  r\   r-  ZeroDivisionErrorupper)r   s    r=   standardise_namer"  Z  sP    E"2774=11)* Eww<D<<BBDDEs    5AAzALNUM DIGIT PUNCT XDIGITzYES Y NO N TRUE T FALSE Fc                    | rt        |       nd} t        |      }| |fdk(  rdd| }}} |r| s|j                         t        v rd|z   }| rt        j	                  |       }|s.|st        d      t        d|j                  |j                        |\  }}|j	                  |      }|.|st        d      t        d|j                  |j                        t        |dz  |z  |      S d	D ]A  } t        j	                  |       \  }}|j	                  |      }|/t        |dz  |z  |      c S  t        j	                  |      }|r9|\  }}t        |      t        k(  rt        |dz  d
z  |      S t        |dz  |       S |j                  d      r5t        j	                  |dd       }|r|\  }}d|v rt        |dz  d
z  |      S dD ]Y  \  }	} |j                  |	      st        j	                  |       \  }}|j	                  |dd       }|Gt        |dz  |z  |      c S  |st        d      t        d|j                  |j                        )zLooks up a property.N)GENERALCATEGORYASSIGNEDr$  
UNASSIGNEDr   zunknown propertyzunknown property valuerQ   )GCSCRIPTBLOCKr-   ISrN   YES))r*  r(  )INr)  )r"  r!  _POSIX_CLASSES
PROPERTIESr   r&   r   r2   Propertyr   _BINARY_VALUES
startswith)
propertyr^   r   r   r  r   prop_id
value_dictval_idprefixs
             r=   r  r  e  sa    .6)4HU#E%;;$5|\%X%++->"A%~~h'.//*FMM6::FF"&>4550&--LLB&0(;; .(nnX6&W]f4h??	 . >>% D"z?n,W]a/::28|44 ~~eACk*"&GZ
"B! 3X>> @F#",..":GZ^^E!#K0F!B& 8(CC @ &''
"FMM6::
>>r>   c                 $   | j                         }|t        v rt        j                  |      }|rdt        |      gfS |t        v r|dk(  s|rdt        | t        |   |      gfS |dk(  rdt        | |      gfS |dk(  r|rt        |       }|d|gfS t        d|z  | j                  | j                        t        | j                  t              rd}nd}|d	k(  rb|}t        |      d
k  r@| j                  }| j                         }|t        vr|| _
        n||z  }t        |      d
k  r@dt!        |d      |z  gfS |t"        v r|}| j                  }| j                         }|t"        v rF||z  }| j                  }| j                         }|r#t%        ||z         rdt!        ||z   d      |z  gfS || _
        dt!        |      gfS |dk(  rdt        d      gfS |s!t        d| j                  | j                        dt        d      t        |      gfS )z0Compiles a replacement template escape sequence.Fru   r  Tr  r  r  r  rF  r  rP   r   r  )r   r!  r  r   r  parse_repl_hex_escapecompile_repl_groupparse_repl_named_charr&   r   r2   r.   sepbytesr]   r  r  r%  r  )r   r1   
is_unicoder   r^   r  r.  r   s           r=   _compile_replacementr>    s"   	B	U{!%%b)3u:,&&")z0R"MNNN9,VW=>>>9)&1E ug~%%*FMM6::FF&**e$

	Sy&kAo

IB#&
bLF &kAo s61~
2333	V| JJ	ZZ\<bLF

IBhv{+s6B;2Z?@@@ 
c&k]""	Tzs4yk!!16==&**MM 3t9c"g&&&r>   c                    g }t        |      D ]`  }| j                         }|t        vr5t        d|dj	                  |      | j
                  | j                        |j                  |       b t        dj	                  |      d      S )z5Parses a hex escape sequence in a replacement string.r  rf   rQ   )	r  r   r  r&   r\   r   r2   rZ   r  )r   r  r  r.  ro   r   s         r=   r8  r8    su    F< ZZ\ZdBGGFOLmmVZZ) )b ! rwwv##r>   c                 N   | j                   }| j                  d      rS| j                  t        t	        d      z        }| j                  d      r!	 t        j                  |      }t        |      S || _         y# t        $ r" t        d| j                  | j                         w xY w)z1Parses a named character in a replacement string.r
   r  r  N)r2   r   r>  r!  r   r  r  r   r~   r&   r   )r   r   r   r^   s       r=   r:  r:    s    

I||CC 01<<#**405z!
 FJ  6** s   A9 9+B$c                 Z   | j                  d       t        | dd      }| j                  d       |j                         rEt        |      }d|cxk  r|j                  k  s#n t        d| j                  | j                        |S 	 |j                  |   S # t        $ r t        d      w xY w)z0Compiles a replacement template group reference.r2  TrC  r   invalid group referenceunknown group)rO  rM  r  r  groupsr&   r   r2   
groupindexr~   
IndexError)r   r1   r   indexs       r=   r9  r9    s    
MM#fdD)D
MM#||~D	E+W^^+16==&**MM*!!$'' *))*s   B B*z  rQ   z	NON-MATCHMATCHFTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 >    t        |       dk(  r| d   S t        |       S Nr-   r   )r]   r   )r  s    r=   make_sequencerM  0  s     
5zQQxE?r>   c                   v    e Zd Zd ZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZddZd Zd Zd Zd Zd Zy)	RegexBasec                 &    | j                   | _        y r  )rY   _keyr:   s    r=   r9   zRegexBase.__init__7  s    NN	r>   Nc                 ,   || j                   }nt        |      }|| j                  }nt        |t        z     }|| j
                  }nt        |      }|| j                   k(  r || j                  k(  r|| j
                  k(  r| S | j                  |||      S r  )r   r   r   CASE_FLAGS_COMBINATIONSr   r   rebuildr:   r   r   r   s       r=   r   zRegexBase.with_flags:  s    }}HH~HJ0j1HIJIYI%**G
t~~
%K||Hj)<<r>   c                      y r  rC   r:   r1   r   fuzzys       r=   
fix_groupszRegexBase.fix_groupsN  s    r>   c                     | S r  rC   r:   r   r   s      r=   r   zRegexBase.optimiseQ      r>   c                     | S r  rC   r:   r   s     r=   pack_characterszRegexBase.pack_charactersT  r]  r>   c                     | S r  rC   rR  s    r=   remove_captureszRegexBase.remove_capturesW  r]  r>   c                      yNTrC   rR  s    r=   	is_atomiczRegexBase.is_atomicZ      r>   c                      yrd  rC   rR  s    r=   can_be_affixzRegexBase.can_be_affix]  rf  r>   c                      yNFrC   rR  s    r=   contains_groupzRegexBase.contains_group`      r>   c                     t               r  )rK   r:   r   s     r=   get_firstsetzRegexBase.get_firstsetc  s    r>   c                      yrj  rC   rR  s    r=   has_simple_startzRegexBase.has_simple_startf  rl  r>   c                 &    | j                  ||      S r  )_compiler:   r   rY  s      r=   r   zRegexBase.compilei  s    }}We,,r>   c                      yrj  rC   rR  s    r=   r   zRegexBase.is_emptyl  rl  r>   c                 ,    t        | j                        S r  )hashrQ  rR  s    r=   __hash__zRegexBase.__hash__o  s    DIIr>   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  rQ  r:   others     r=   __eq__zRegexBase.__eq__r  s'    DzT%[(DTYY%**-DDr>   c                 &    | j                  |       S r  )r|  rz  s     r=   __ne__zRegexBase.__ne__u  s    ;;u%%%r>   c                 &    | j                         d fS r  	max_widthrn  s     r=   get_required_stringzRegexBase.get_required_stringx      ~~%%r>   )NNNFF)r?   r@   rA   r9   r   rZ  r   r`  rb  re  rh  rk  ro  rq  r   r   rx  r|  r~  r  rC   r>   r=   rO  rO  6  sX    #=(-E&&r>   rO  c                   ,    e Zd ZddZd Zd Zd Zd Zy)ZeroWidthBasec                     t         j                  |        t        |      | _        | j                  | j                  f| _        y r  )rO  r9   r   r   rY   rQ  )r:   r   s     r=   r9   zZeroWidthBase.__init__}  s/    4 XNNDMM1	r>   c                     t        d g      S r  r   rn  s     r=   ro  zZeroWidthBase.get_firstset      D6{r>   c                 z    d}| j                   r	|t        z  }|r	|t        z  }|r	|t        z  }| j                  |fgS Nr   )r   POSITIVE_OPFUZZY_OP
REVERSE_OP_opcoder:   r   rY  r   s       r=   rs  zZeroWidthBase._compile  sD    ==[ EXEZEu%&&r>   c                     t        dj                  t        |z  | j                  t        | j
                                  y )Nz{}{} {})printr7   INDENT_op_namePOS_TEXTr   r:   indentr   s      r=   dumpzZeroWidthBase.dump  s/    iv
4==
!# 	$r>   c                      yr  rC   rR  s    r=   r  zZeroWidthBase.max_width      r>   NT)r?   r@   rA   r9   ro  rs  r  r  rC   r>   r=   r  r  |  s    2'$r>   r  c                   Z    e Zd Zej                  ej
                  dZdZd Zd Z	d Z
d Zy)r   rJ  ANYc                      yrd  rC   rR  s    r=   rq  zAny.has_simple_start  rf  r>   c                 @    d}|r	|t         z  }| j                  |   |fgS r  )r  r  r  s       r=   rs  zAny._compile  s+    XEg&.//r>   c                 \    t        dj                  t        |z  | j                               y )N{}{})r  r7   r  r  r  s      r=   r  zAny.dump  s    fmmFVOT]];<r>   c                      yNr-   rC   rR  s    r=   r  zAny.max_width  r  r>   N)r?   r@   rA   OPr  ANY_REVr  r  rq  rs  r  r  rC   r>   r=   r   r     s-    ffBJJ/GH0=r>   r   c                   B    e Zd Zej                  ej
                  dZdZy)r   rJ  ANY_ALLN)r?   r@   rA   r  r  ANY_ALL_REVr  r  rC   r>   r=   r   r     s    jj7GHr>   r   c                   B    e Zd Zej                  ej
                  dZdZy)r   rJ  ANY_UN)r?   r@   rA   r  r  	ANY_U_REVr  r  rC   r>   r=   r   r     s    hhbll3GHr>   r   c                   f    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)rs  c                 <    t         j                  |        || _        y r  )rO  r9   r  )r:   r  s     r=   r9   zAtomic.__init__  s    4 $r>   c                 >    | j                   j                  |||       y r  r  rZ  rX  s       r=   rZ  zAtomic.fix_groups      ""7GU;r>   c                     | j                   j                  ||      | _         | j                   j                         r| j                   S | S r  )r  r   r   r\  s      r=   r   zAtomic.optimise  s9    //224A??##%??"r>   c                 F    | j                   j                  |      | _         | S r  r  r`  r_  s     r=   r`  zAtomic.pack_characters      //99$?r>   c                 D    | j                   j                         | _         | S r  r  rb  rR  s    r=   rb  zAtomic.remove_captures      //99;r>   c                 6    | j                   j                         S r  r  rh  rR  s    r=   rh  zAtomic.can_be_affix      ++--r>   c                 6    | j                   j                         S r  r  rk  rR  s    r=   rk  zAtomic.contains_group      --//r>   c                 8    | j                   j                  |      S r  r  ro  rn  s     r=   ro  zAtomic.get_firstset      ++G44r>   c                 6    | j                   j                         S r  r  rq  rR  s    r=   rq  zAtomic.has_simple_start      //11r>   c                     t         j                  fg| j                  j                  ||      z   t         j                  fgz   S r  )r  ATOMICr  r   ENDrt  s      r=   rs  zAtomic._compile  s8    ))$//"9"9'5"IIFF:, 	r>   c                     t        dj                  t        |z               | j                  j	                  |dz   |       y )N{}ATOMICr-   )r  r7   r  r  r  r  s      r=   r  zAtomic.dump  s1    j01VaZ1r>   c                 6    | j                   j                         S r  r  r   rR  s    r=   r   zAtomic.is_empty      ''))r>   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  r  rz  s     r=   r|  zAtomic.__eq__  s0    T
d5k) doo


/ 	r>   c                 6    | j                   j                         S r  r  r  rR  s    r=   r  zAtomic.max_width      ((**r>   c                 8    | j                   j                  |      S r  r  r  rn  s     r=   r  zAtomic.get_required_string      227;;r>   N)r?   r@   rA   r9   rZ  r   r`  rb  rh  rk  ro  rq  rs  r  r   r|  r  r  rC   r>   r=   rs  rs    sM    %<.0522*+<r>   rs  c                   (    e Zd Zej                  ZdZy)BoundaryBOUNDARYN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r    s    kkGHr>   r  c                   &   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zd Zd Zd Zy)r   c                 <    t         j                  |        || _        y r  )rO  r9   r   )r:   r   s     r=   r9   zBranch.__init__  s    4  r>   c                 L    | j                   D ]  }|j                  |||        y r  )r   rZ  )r:   r1   r   rY  rl   s        r=   rZ  zBranch.fix_groups  s     ALL'51 r>   c                    | j                   st        g       S t        j                  ||| j                         }|rt        j	                  ||      \  }}g }nt        j                  ||      \  }}g }t        j                  |||      }t        |      dkD  rLt        |      g}|r|s>| j                  |||      }|r)|r|j                  |       n|j                  d|       n|}t        ||z   |z         S rL  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setr]   _add_precheckrZ   insertrM  )r:   r   r   r   suffixr6  r   firstsets           r=   r   zBranch.optimise  s    }}B< ++D'4==I %::4JFHF%::4JFHF ((wAx=1x()H--dGXF 1 84HVh.788r>   c           
         t               }|rdnd}|D ]F  }t        |      t        u r2|j                  t        k(  r|j                  |j                  |          F y  |sy t        |||D cg c]  }t        |       c}      S c c}w Nr   )	r   r  Literalr   r   r   
charactersr   r   )r:   r   r   r   r  r2   branchr   s           r=   r  zBranch._add_precheck  s|    %bFF|w&6+<+<+FF--c23	  tWW.MWy|W.MNN.Ms   *Bc                 l    | j                   D cg c]  }|j                  |       c}| _         | S c c}w r  )r   r`  )r:   r   rl   s      r=   r`  zBranch.pack_characters)  s2    :>--H-Q**40-H Is   1c                 j    | j                   D cg c]  }|j                          c}| _         | S c c}w r  )r   rb  )r:   rl   s     r=   rb  zBranch.remove_captures-  s0    6:mmDm**,mD E   0c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  re  r  rl   s     r=   r  z#Branch.is_atomic.<locals>.<genexpr>2       8-Q1;;=-   r  r   rR  s    r=   re  zBranch.is_atomic1      8$--888r>   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  )rh  r  s     r=   r  z&Branch.can_be_affix.<locals>.<genexpr>5  s     ;]1>>#]r  r  rR  s    r=   rh  zBranch.can_be_affix4  s    ;T]];;;r>   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  rk  r  s     r=   r  z(Branch.contains_group.<locals>.<genexpr>8  s     =}!1##%}r  )r  r   rR  s    r=   rk  zBranch.contains_group7  s    =t}}===r>   c                     t               }| j                  D ]  }||j                  |      z  } |xs t        d g      S r  )r   r   ro  )r:   r   r   rl   s       r=   ro  zBranch.get_firstset:  s=    UA!..))B   S$[ r>   c                    | j                   sg S t        j                  fg}| j                   D ]C  }|j                  |j	                  ||             |j                  t        j                  f       E t        j                  f|d<   |S Nr  )r   r  BRANCHr   r   rZ   NEXTr  )r:   r   rY  r   rl   s        r=   rs  zBranch._compileA  sh    }}IAKK		'512KK$  FF:Rr>   c                    t        dj                  t        |z               | j                  d   j	                  |dz   |       | j                  dd  D ]8  }t        dj                  t        |z               |j	                  |dz   |       : y )Nz{}BRANCHr   r-   {}OR)r  r7   r  r   r  )r:   r  r   rl   s       r=   r  zBranch.dumpN  sr    j01afqj'2qs$A&--01FF6A:w' %r>   c                     g }|D ]Q  }|j                  | |      }t        |t              r|j                  |j                         A|j                  |       S |S r  )r   r.   r   r   r   rZ   )r   r   r   new_branchesrl   s        r=   r  zBranch._flatten_branchesU  sU     A

4)A!V$##AJJ/##A&  r>   c                   	
 g }|D ]@  }t        |t              r|j                  |j                         /|j                  |g       B t	        d |D              }|d   
d	|}	|k  r[
	   j                         rHt        	
fd|D              r3	dz  		|k  r)
	   j                         rt        	
fd|D              r3	| j                  t        z  r:	dkD  r3t        fd|D              sdz  dkD  rt        fd|D              sdk(  rg |fS g }|D ]  }|j                  t        |d               ! 
d  |fS )Nc              3   2   K   | ]  }t        |        y wr  r]   r  rk   s     r=   r  z.Branch._split_common_prefix.<locals>.<genexpr>n       51A   r   c              3   4   K   | ]  }|      k(    y wr  rC   )r  rk   r2   r6  s     r=   r  z.Branch._split_common_prefix.<locals>.<genexpr>t  -      C-+! DES6
+D+   r-   c              3   J   K   | ]  }t         j                  |        y wr  )r   
_can_splitr  rk   r3   s     r=   r  z.Branch._split_common_prefix.<locals>.<genexpr>}  s(      ( IJ(9(9!U(C    #
r.   r   rZ   r  minrh  r  r   r   rM  )r   r   alternativesrl   r   end_posr  rk   r3   r2   r6  s           @@@r=   r  zBranch._split_common_prefixb  sx    A!X&##AGG,##QC(	  555	 aGms 8 8 :s C-+C- @-1HC Gms 8 8 :s C-+C- @- :: E!)C (( %
 !)C (( %
 A:x< Aak :;  w--r>   c                   	
 g }|D ]@  }t        |t              r|j                  |j                         /|j                  |g       B t	        d |D              }|d   
d	d|z
  }	|kD  r[
	   j                         rHt        	
fd|D              r3	dz  		|kD  r)
	   j                         rt        	
fd|D              r3d	z
  | j                  t        z  r8dkD  r3t        fd|D              sdz  dkD  rt        fd|D              sdk(  rg |fS g }|D ]   }|j                  t        |d                " 
 d  |fS )Nc              3   2   K   | ]  }t        |        y wr  r  r  s     r=   r  z.Branch._split_common_suffix.<locals>.<genexpr>  r  r  r   r  c              3   4   K   | ]  }|      k(    y wr  rC   )r  rk   r2   r  s     r=   r  z.Branch._split_common_suffix.<locals>.<genexpr>  r	  r
  r-   c              3   J   K   | ]  }t         j                  |        y wr  )r   _can_split_revr  s     r=   r  z.Branch._split_common_suffix.<locals>.<genexpr>  s(      ( MN(=(=a(Gr  r  )r   r   r  rl   r   r  r  rk   r3   r2   r  s           @@@r=   r  zBranch._split_common_suffix  s    A!X&##AGG,##QC(	  555	 ay.Gms 8 8 :s C-+C- @-1HC Gms 8 8 :s C-+C- @- S:: !)C (( %
 !)C (( %
 A:x< AaE6l ;<  ufh ,..r>   c                    t         j                  | |dz
        syt         j                  | |      syt         j                  | |dz
  |dz          ryt         j                  | |dz         rt         j                  | |dz
  |dz          ryt         j                  | |dz
        rt         j                  | |dz
  |dz          ryy)Nr-   TFrN   )r   _is_full_case
_is_folded)r  r3   s     r=   r  zBranch._can_split  s     ##E5195##E51 U519uqy9:   	2


E%!)eai8
9   	2


E%!)eai8
9r>   c                    t        |       }t        j                  | ||z
        syt        j                  | ||z
  dz
        syt        j                  | ||z
  dz
  ||z
  dz          ryt        j                  | ||z
  dz         r%t        j                  | ||z
  dz
  ||z
  dz          ryt        j                  | ||z
  dz
        r%t        j                  | ||z
  dz
  ||z
  dz          ryy)NTr-   FrN   )r]   r   r  r  )r  r3   r  s      r=   r  zBranch._can_split_rev  s    %j ##E3;7##E3;?; U3;?S5[1_EF   ea8


E#+/C%K!OD
E   ea8


E#+/C%K!OD
Er>   c                    t        t              }i }g }|D ].  }t        j                  |      rE||j                     j                  |g       |j                  |j                  t        |             ^t        |t              r|j                  rt        j                  |j                  d         ri||j                  d   j                     j                  |j                         |j                  |j                  d   j                  t        |             t        j                  | ||||       |j                  |       1 t        j                  | |||       |S r  )r   r   r   _is_simple_characterr^   rZ   
setdefaultr]   r.   r   r  _flush_char_prefix)r   r   r   prefixedorderr  rl   s          r=   _merge_common_prefixeszBranch._merge_common_prefixes  s   
 t$A**1-!((!-  #e*5Q)agg))!''!*5))*11!'':  !1!13u:>))$5  ##A&   	!!$%Fr>   c                 \    t        | t              xr | j                  xr | j                   S r  )r.   r   r   r   r   s    r=   r  zBranch._is_simple_character	  s$    !Y'KAJJKq||;KKr>   c                    g }t               }t        }|D ]  }t        |t        t        t
        f      rZ|j                  |k7  r%t        j                  | ||||       |j                  }|j                  |j                  t                     xt        j                  | ||||       |j                  |        t        j                  | ||||       |S Nr   )r   r   r.   r   r/  SetBaser   r   _flush_set_membersr   r   rZ   )r   r   r   r  r  r   rl   s          r=   r  zBranch._reduce_to_set		  s     
A!i7;<<<:---dGUJ"$ "#J		!,,&,9:))$
  ##A& " 	!!$

	 r>   c           	         |sy t        |j                         fd      D ]  \  }}t        |      dk(  r|j                  t	        |d                2g }d}|D ]L  }	t        |	      dkD  r|j                  t	        |	dd               /|r2|j                  t                      d}N t        t        |      t        |      g      }
|j                  |
j                  | |              |j                          j                          y )Nc                     | d      S r  rC   )pairr!  s    r=   <lambda>z+Branch._flush_char_prefix.<locals>.<lambda>+	  s    
Q.r>   keyr-   r   FT)
sortedr  r]   rZ   rM  r   r   r   r   r   )r   r   r   r!  r  r^   r   subbranchesoptionalrl   r   s      `       r=   r  zBranch._flush_char_prefix%	  s     %hnn&6 =  OE88}!##M(1+$>?  !A1vz#**=13+AB%#**8:6#' " $Yu%5vk7J$KL##H$5$5dG$DE " 	r>   c                     |sy t        |      dk(  rt        |      d   }n%t        | t        |            j                  | |      }|j	                  |j                  |             |j                          y )Nr-   r   r   )r]   r   r   r   rZ   r   r   )r   r   r  r   r  r   s         r=   r(  zBranch._flush_set_members?	  sa     u:?;q>DD$u+.77gFDDOOzOBCr>   c                     d|cxk  rt        |       k  sy y| |   }t        |t              xr( |j                  xr |j                  t
        z  t
        k(  S )Nr   F)r]   r.   r   r   r   FULLIGNORECASE)r  ro   r   s      r=   r  zBranch._is_full_caseN	  sX    A"E
" #Qx4+ ? ???^+
>	@r>   c                 \   t        |       dk  ry| D ],  }t        |t              r|j                  r|j                  r, y dj                  d | D              }t        j                  t        |      }t        j                         }|D ]!  }|t        j                  t        |      k(  s! y y)NrN   Frf   c              3   F   K   | ]  }t        |j                          y wr  )chrr^   r  ro   s     r=   r  z$Branch._is_folded.<locals>.<genexpr>a	  s     5u!QWWus   !T)
r]   r.   r   r   r   r\   r   r   FULL_CASE_FOLDINGget_expand_on_folding)r  ro   foldedexpanding_charsr   s        r=   r  zBranch._is_foldedW	  s    u:>Aq),AJJll 
 5u55!!"3V< !668 A))*;Q?? ! r>   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r   r  s     r=   r  z"Branch.is_empty.<locals>.<genexpr>n	  s     7A1::<r  r  rR  s    r=   r   zBranch.is_emptym	  s    7777r>   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  r   rz  s     r=   r|  zBranch.__eq__p	  s'    DzT%[(LT]]enn-LLr>   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r  r  s     r=   r  z#Branch.max_width.<locals>.<genexpr>t	  r  r  )r7  r   rR  s    r=   r  zBranch.max_widths	  r  r>   N)r?   r@   rA   r9   rZ  r   r  r`  rb  re  rh  rk  ro  rs  r  staticmethodr  r  r  r  r  r"  r  r  r  r(  r  r  r   r|  r  rC   r>   r=   r   r     sF   !2!9FO9<>!( 
 
 '. '.R &/ &/P  0  4  6 L L  6  2   @ @  *8M9r>   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
ry  c                     t         j                  |        || _        || _        || _        | j
                  | j                  f| _        y r  )rO  r9   r   r^  r   rY   rQ  )r:   r   r^  r   s       r=   r9   zCallGroup.__init__w	  s9    4 	
 NNDJJ.	r>   c                    	 t        | j                        | _        d| j                  cxk  r| j                  j                  k  sn t        d|| j                        | j                  dkD  r=| j                  j                  | j                     dkD  rt        d|| j                        | j                  j                  j                  | ||f       | j                  | j                  f| _        y # t        $ rR 	 | j                  j                  | j                     | _        n$# t
        $ r t        d|| j                        w xY wY .w xY w)NrC  r   rD  r-   zambiguous group reference)r  r^  r-  r   group_indexr~   r&   r   ru  open_group_countgroup_callsrZ   rY   rQ  rX  s       r=   rZ  zCallGroup.fix_groups	  s   	OTZZDJ DJJ7$))"7"77$--@@::>dii88DqH3WdmmLL		$$dGU%;<NNDJJ.	  	OO!YY224::>
 O5wNNO 	Os)   C0 0	E:(D#"E#!EE
Ec                 8    t        dt        | j                        Nzgroup reference not allowedr&   r1   r   rR  s    r=   rb  zCallGroup.remove_captures	      17DMMJJr>   c                 <    t         j                  | j                  fgS r  )r  
GROUP_CALLcall_refrt  s      r=   rs  zCallGroup._compile	  s    .//r>   c                 \    t        dj                  t        |z  | j                               y )Nz{}GROUP_CALL {})r  r7   r  r^  r  s      r=   r  zCallGroup.dump	  s     &&v

CDr>   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  r^  rz  s     r=   r|  zCallGroup.__eq__	  '    DzT%[(FTZZ5;;-FFr>   c                     t         S r  r  rR  s    r=   r  zCallGroup.max_width	      r>   c                     d | _         y r  r   rR  s    r=   __del__zCallGroup.__del__	  	    	r>   N)r?   r@   rA   r9   rZ  rb  rs  r  r|  r  rX  rC   r>   r=   ry  ry  v	  s-    //&K0EGr>   ry  c                       e Zd Zd Zd Zy)CallRefc                      || _         || _        y r  )refparsed)r:   r]  r^  s      r=   r9   zCallRef.__init__	  s    r>   c                     t         j                  | j                  fg| j                  j	                  ||      z   t         j
                  fgz   S r  )r  CALL_REFr]  r^  rs  r  rt  s      r=   rs  zCallRef._compile	  sE    ++txx()DKK,@,@
- VVJ<  	!r>   Nr?   r@   rA   r9   rs  rC   r>   r=   r[  r[  	  s    !r>   r[  c                   6   e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZdedfdZd ZddZd Zd Zd Zd	 Zd
 Zd Zd Zy)r   FTc                    t         j                  |        || _        t        |      | _        t
        |   | _        t        |      | _        | j                  rM| j                  t        z  t        k(  r3t        j                  t        t        | j                              | _        nt        | j                        | _        | j                  | j                  | j                  | j                  | j                  f| _        y r  )rO  r9   r^   r   r   rT  r   r   r4  r   r   r9  r7  r;  rY   rQ  r:   r^   r   r   r   s        r=   r9   zCharacter.__init__	  s    4 
X1*=iMMt?
 **+<c$**oNDKdjj/DK^^TZZ
//4>>+	r>   c                 2    t        | j                  |||      S r  )r   r^   rV  s       r=   rU  zCharacter.rebuild	  s    Xz9EEr>   c                     | S r  rC   r:   r   r   r   s       r=   r   zCharacter.optimise	  r]  r>   c                     t        | g      S r  r  rn  s     r=   ro  zCharacter.get_firstset	  r  r>   c                      yrd  rC   rR  s    r=   rq  zCharacter.has_simple_start	  rf  r>   c                    d}| j                   r	|t        z  }| j                  r	|t        z  }|r	|t        z  }t        | j                  | j                  |f   || j                  g      }t        | j                        dkD  rCt        |t        | j                  D cg c]  }t        |       c}| j                        g      }|j                  ||      S c c}w )Nr   r-   r   )r   r  r   ZEROWIDTH_OPr  PrecompiledCoder  r   r^   r]   r;  r   r  r   r   )r:   r   rY  r   r   r   s         r=   rs  zCharacter._compile	  s    ==[ E>>\!EXET__g-E F
**   t{{a4(EAQ(E"* + ,D ||GU++ )Fs   Cc           	          t        t        | j                              j                  d      }t	        dj                  t        |z  t        | j                     |t        | j                                  y )Nbuz{}CHARACTER {} {}{})asciir7  r^   lstripr  r7   r  r  r   	CASE_TEXTr   r:   r  r   displays       r=   r  zCharacter.dump	  sV    DJJ(//5#**6F?
4==
!7Idoo,FH 	Ir>   c                 :    || j                   k(  | j                  k(  S r  )r^   r   r:   r   s     r=   matcheszCharacter.matches	  s    djj T]]22r>   c                 ,    t        | j                        S r  )r]   r;  rR  s    r=   r  zCharacter.max_width	  s    4;;r>   c                 f    | j                   syt        d | j                  D              | _        d| fS )Nr  c              3   2   K   | ]  }t        |        y wr  r   r  r   s     r=   r  z0Character.get_required_string.<locals>.<genexpr>	  s     &C{!s1v{r  r   )r   rz   r;  folded_charactersrn  s     r=   r  zCharacter.get_required_string	  s,    }}!&&Ct{{&C!C$wr>   NF)r?   r@   rA   r   r  	CHARACTERr   CHARACTER_IGNr   r4  CHARACTER_REVCHARACTER_IGN_REVr  r9   rU  r   ro  rq  rs  r  rv  r  r  rC   r>   r=   r   r   	  s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G (,+"F,&I
3 r>   r   c                   f    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)rm  c                 t    t         j                  |        || _        || _        || _        || _        || _        y r  )rO  r9   r   r^  yes_itemno_itemr   )r:   r   r^  r  r  r   s         r=   r9   zConditional.__init__	  s3    4 	
  r>   c                    	 t        | j                        | _        d| j                  cxk  r| j                  j                  k  sn t        d|| j                        | j                  j                  |||       | j                  j                  |||       y # t        $ rj 	 | j                  j                  | j                     | _        n=# t
        $ r1 | j                  dk(  rd| _        nt        d|| j                        Y nw xY wY w xY w)NDEFINEr   rD  rC  )r  r^  r-  r   rG  r~   r&   r   ru  r  rZ  r  rX  s       r=   rZ  zConditional.fix_groups 
  s    	ITZZDJ DJJ7$))"7"7717DMMJJ  '59%8  		II!YY224::>
 I::) "#DJ$--HH 	I		Is5   B 	D#(CD7DDDDDc                     | j                   j                  ||      }| j                  j                  ||      }t        || j                  ||| j
                        S r  )r  r   r  rm  r^  r   )r:   r   r   r  r  s        r=   r   zConditional.optimise
  sI    ==))$8,,''g64XwNNr>   c                     | j                   j                  |      | _         | j                  j                  |      | _        | S r  )r  r`  r  r_  s     r=   r`  zConditional.pack_characters
  s3    55d;||33D9r>   c                     | j                   j                         | _         | j                  j                         | _        y r  )r  rb  r  rR  s    r=   rb  zConditional.remove_captures
  s*    557||335r>   c                 n    | j                   j                         xr | j                  j                         S r  )r  re  r  rR  s    r=   re  zConditional.is_atomic#
  s'    }}&&(ET\\-C-C-EEr>   c                 n    | j                   j                         xr | j                  j                         S r  )r  rh  r  rR  s    r=   rh  zConditional.can_be_affix&
  s'    }}))+K0I0I0KKr>   c                 n    | j                   j                         xs | j                  j                         S r  )r  rk  r  rR  s    r=   rk  zConditional.contains_group)
  s'    }}++-N1L1L1NNr>   c                 p    | j                   j                  |      | j                  j                  |      z  S r  )r  ro  r  rn  s     r=   ro  zConditional.get_firstset,
  s0    **73
,,
#
#G
,- 	.r>   c                 t   t         j                  | j                  fg}|j                  | j                  j                  ||             | j                  j                  ||      }|r1|j                  t         j                  f       |j                  |       |j                  t         j                  f       |S r  )
r  GROUP_EXISTSr^  r   r  r   r  rZ   r  r  r:   r   rY  r   add_codes        r=   rs  zConditional._compile0
  s    $**-.DMM))'59:<<''7KK$KK!RVVJr>   c                 P   t        dj                  t        |z  | j                               | j                  j                  |dz   |       | j                  j                         sAt        dj                  t        |z               | j                  j                  |dz   |       y y )Nz{}GROUP_EXISTS {}r-   r  )r  r7   r  r^  r  r  r  r   r  s      r=   r  zConditional.dump<
  sz    !((&$**EF6A:w/||$$&&--01LLfqj'2 'r>   c                 n    | j                   j                         xr | j                  j                         S r  )r  r   r  rR  s    r=   r   zConditional.is_emptyC
  s'    }}%%'CDLL,A,A,CCr>   c                     t        |       t        |      u xrG | j                  | j                  | j                  f|j                  |j                  |j                  fk(  S r  )r  r^  r  r  rz  s     r=   r|  zConditional.__eq__F
  sR    DzT%[( Hdjj$--
,,.!KKG.H 	Hr>   c                 z    t        | j                  j                         | j                  j                               S r  r7  r  r  r  rR  s    r=   r  zConditional.max_widthJ
  )    4==**,dll.D.D.FGGr>   c                     d | _         y r  rW  rR  s    r=   rX  zConditional.__del__M
  rY  r>   N)r?   r@   rA   r9   rZ  r   r`  rb  re  rh  rk  ro  rs  r  r   r|  r  rX  rC   r>   r=   rm  rm  	  sT    !9(O
6FLO.
3DHHr>   rm  c                   (    e Zd Zej                  ZdZy)DefaultBoundaryDEFAULT_BOUNDARYN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r  P
  s    !!G!Hr>   r  c                   (    e Zd Zej                  ZdZy)DefaultEndOfWordDEFAULT_END_OF_WORDN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r  T
  s    $$G$Hr>   r  c                   (    e Zd Zej                  ZdZy)DefaultStartOfWordDEFAULT_START_OF_WORDN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r  X
  s    &&G&Hr>   r  c                   (    e Zd Zej                  ZdZy)r   END_OF_LINEN)r?   r@   rA   r  r  r  r  rC   r>   r=   r   r   \
      nnGHr>   r   c                   (    e Zd Zej                  ZdZy)r   END_OF_LINE_UN)r?   r@   rA   r  r  r  r  rC   r>   r=   r   r   `
      GHr>   r   c                   (    e Zd Zej                  ZdZy)EndOfStringEND_OF_STRINGN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r  d
  r  r>   r  c                   (    e Zd Zej                  ZdZy)r   END_OF_STRING_LINEN)r?   r@   rA   r  r  r  r  rC   r>   r=   r   r   h
  s    ##G#Hr>   r   c                   (    e Zd Zej                  ZdZy)r   END_OF_STRING_LINE_UN)r?   r@   rA   r  r  r  r  rC   r>   r=   r   r   l
  s    %%G%Hr>   r   c                   (    e Zd Zej                  ZdZy)	EndOfWordEND_OF_WORDN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r  p
  r  r>   r  c                       e Zd ZdZd Zy)FailureFAILUREc                 &    t         j                  fgS r  )r  r  rt  s      r=   rs  zFailure._compilew
  s    r>   Nr?   r@   rA   r  rs  rC   r>   r=   r  r  t
  s    H r>   r  c                   V    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zy)r  Nc                    t         j                  |        |i }|| _        || _        d|v r!dD ]  }||d   v s|j	                  |d        t        |      t        d      z  rdD ]  }|j	                  |d        ndD ]  }|j	                  |d        |j	                  dd       d|v rdD ]  }|d   j	                  |d        y ddd|d   d   d|d<   y )	Nr6  r:  r  )r   r   rm   r   r-   )dro   rr   r7  )rO  r9   r  r   r  r   )r:   r  r   rm   s       r=   r9   zFuzzy.__init__{
  s   4 K$& [ F++**1i8  {c%j(&&q&1  &&q)4  	sI. [ F#..q!4  )*#q!##Kr>   c                 >    | j                   j                  ||d       y rd  r  rX  s       r=   rZ  zFuzzy.fix_groups
  s    ""7GT:r>   c                 F    | j                   j                  |      | _         | S r  r  r_  s     r=   r`  zFuzzy.pack_characters
  r  r>   c                 D    | j                   j                         | _         | S r  r  rR  s    r=   rb  zFuzzy.remove_captures
  r  r>   c                 6    | j                   j                         S r  r  re  rR  s    r=   re  zFuzzy.is_atomic
  r  r>   c                 6    | j                   j                         S r  r  rR  s    r=   rk  zFuzzy.contains_group
  r  r>   c                    g }dD ]D  }| j                   |   }|j                  |d          |j                  |d   t        n|d          F dD ]#  }|j                  | j                   d   |          % | j                   d   d   }|j                  |t        n|       d}|r	|t        z  }| j                   j	                  d      }|rut
        j                  |ft        |      z   g|j                  |d      z   t
        j                  fgz   | j                  j                  |d      z   t
        j                  fgz   S t
        j                  |ft        |      z   g| j                  j                  |d      z   t
        j                  fgz   S )	Ndiser   r-   r:  r6  r7  r  T)r   rZ   r  r  r   r  	FUZZY_EXTrz   r   r  r  r  FUZZY)r:   r   rY  	argumentsrm   vr   r  s           r=   rs  zFuzzy._compile
  s   	A  #AQqT"!A$,YAaDA  AT--f5a89  V$U+aiQ7ZE##F+llE*U9-==>ll7D)*.0ggZL9oo%%gt459;	{C D ((E"U9%556
//
!
!'4
0157VVI;? 	@r>   c                     | j                         }|rd|z   }t        dj                  t        |z  |             | j                  j                  |dz   |       y )NrA  z	{}FUZZY{}r-   )_constraints_to_stringr  r7   r  r  r  )r:   r  r   r   s       r=   r  z
Fuzzy.dump
  sN    113+Kk  &+>?VaZ1r>   c                 6    | j                   j                         S r  r  rR  s    r=   r   zFuzzy.is_empty
  r  r>   c                     t        |       t        |      u xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r  )r  r  r   rz  s     r=   r|  zFuzzy.__eq__
  sL    T
d5k) Edoo


/ E#//53D3DD	Fr>   c                     t         S r  r  rR  s    r=   r  zFuzzy.max_width
  rU  r>   c                    g }dD ]^  }| j                   |   \  }}|dk(  rd}|dkD  rdj                  |      }||z  }||dj                  |      z  }|j                  |       ` g }dD ];  }| j                   d   |   }|dkD  s|j                  dj                  ||             = | j                   d   d   }|7|dkD  r2d	j                  d
j                  |      |      }|j                  |       dj                  |      S )Nidsr   rf   z{}<=z<={}r6  r  r7  z{}<={}r   r  )r   r7   rZ   r\   )	r:   r   r   r  r7  conr6  r;  limits	            r=   r  zFuzzy._constraints_to_string
  s   D''-HCaxCQwmmC(4KCv}}S))s# " D$$V,T2EqyFMM%67 
   (/??388D>59Dt$xx$$r>   r  )r?   r@   rA   r9   rZ  r`  rb  re  rk  rs  r  r   r|  r  r  rC   r>   r=   r  r  z
  sA    !#F;+0@<2*F%r>   r  c                       e Zd Zd Zd Zd Zy)r  c           	          t        t        t        t               dd       t	               g            }|j                  ||      S r  )rs  r   r   r   GraphemeBoundaryr   )r:   r   rY  grapheme_matchers       r=   rs  zGrapheme._compile   sC     "(JvxD,I

, #    ''77r>   c                 F    t        dj                  t        |z               y )Nz
{}GRAPHEME)r  r7   r  r  s      r=   r  zGrapheme.dump  s    l!!&6/23r>   c                     t         S r  r  rR  s    r=   r  zGrapheme.max_width  rU  r>   N)r?   r@   rA   rs  r  r  rC   r>   r=   r  r  
  s    84r>   r  c                       e Zd Zd Zy)r  c                 (    t         j                  dfgS r  )r  GRAPHEME_BOUNDARYrt  s      r=   r   zGraphemeBoundary.compile  s    %%q)**r>   N)r?   r@   rA   r   rC   r>   r=   r  r    s    +r>   r  c                       e Zd Zej                  ZdZd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)r   GREEDY_REPEATc                 X    t         j                  |        || _        || _        || _        y r  )rO  r9   r  r   r   )r:   r  r   r   s       r=   r9   zGreedyRepeat.__init__  s%    4 $""r>   c                 >    | j                   j                  |||       y r  r  rX  s       r=   rZ  zGreedyRepeat.fix_groups  r  r>   c                     | j                   j                  ||      } t        |       || j                  | j                        S r  )r  r   r  r   r   r:   r   r   r  s       r=   r   zGreedyRepeat.optimise  s5    __--dG<
tDz*dnndnnEEr>   c                 F    | j                   j                  |      | _         | S r  r  r_  s     r=   r`  zGreedyRepeat.pack_characters$  r  r>   c                 D    | j                   j                         | _         | S r  r  rR  s    r=   rb  zGreedyRepeat.remove_captures(  r  r>   c                 l    | j                   | j                  k(  xr | j                  j                         S r  )r   r   r  re  rR  s    r=   re  zGreedyRepeat.is_atomic,  s'    ~~/ODOO4M4M4OOr>   c                      yrj  rC   rR  s    r=   rh  zGreedyRepeat.can_be_affix/  rl  r>   c                 6    | j                   j                         S r  r  rR  s    r=   rk  zGreedyRepeat.contains_group2  r  r>   c                 |    | j                   j                  |      }| j                  dk(  r|j                  d        |S r  )r  ro  r   r   )r:   r   r   s      r=   ro  zGreedyRepeat.get_firstset5  s2    __))'2>>QFF4L	r>   c                 0   | j                   | j                  g}| j                  |j                  t               n|j                  | j                         | j
                  j                  ||      }|sg S t        |      g|z   t        j                  fgz   S r  )
r  r   r   rZ   r  r  r   rz   r  r  )r:   r   rY  repeatr  s        r=   rs  zGreedyRepeat._compile<  sv    ,,/>>!MM)$MM$..)__,,We<
Iv*,
|;<r>   c                     | j                   d}n| j                   }t        dj                  t        |z  | j                  | j
                  |             | j                  j                  |dz   |       y )NINF
{}{} {} {}r-   )r   r  r7   r  r  r   r  r  r:   r  r   r  s       r=   r  zGreedyRepeat.dumpI  s^    >>!ENNEl!!&6/4==
..%! 	" 	VaZ1r>   c                 6    | j                   j                         S r  r  rR  s    r=   r   zGreedyRepeat.is_emptyS  r  r>   c                     t        |       t        |      u xrG | j                  | j                  | j                  f|j                  |j                  |j                  fk(  S r  )r  r  r   r   rz  s     r=   r|  zGreedyRepeat.__eq__V  sT    DzT%[( doot~~
...#..
//. 	r>   c                 t    | j                   t        S | j                  j                         | j                   z  S r  )r   r  r  r  rR  s    r=   r  zGreedyRepeat.max_width[  s.    >>!((*T^^;;r>   c                 `   | j                   t        n| j                   }| j                  dk(  r/| j                  j	                         |z  }t        |t              d fS | j                  j                  |      \  }}|r||fS | j                  j	                         |z  }t        |t              d fS r  )r   r  r   r  r  r  r  )r:   r   r   rt   ofsreqs         r=   r  z GreedyRepeat.get_required_stringa  s    !%!7IT^^	>>Q))+i7Aq)$d**??66w?S8OOO%%')31i $&&r>   N)r?   r@   rA   r  r  r  r  r9   rZ  r   r`  rb  re  rh  rk  ro  rs  r  r   r|  r  r  rC   r>   r=   r   r     s_    GH#<F
P0=2*
<'r>   r   c                       e Zd Zd Zd Zd Zy)r   c                      yrd  rC   rR  s    r=   re  zPossessiveRepeat.is_atomico  rf  r>   c                 p   | j                   j                  ||      }|sg S | j                  | j                  g}| j                  |j                  t               n|j                  | j                         t        j                  ft        |      g|z   t        j                  ft        j                  fgz   S r  )r  r   r  r   r   rZ   r  r  r  rz   r  )r:   r   rY  r  r  s        r=   rs  zPossessiveRepeat._compiler  s    __,,We<
I,,/>>!MM)$MM$..)))f.;z66*?  	r>   c                 0   t        dj                  t        |z               | j                  d}n| j                  }t        dj                  t        |dz   z  | j                  | j
                  |             | j                  j                  |dz   |       y )Nr  r  r  r-   rN   )r  r7   r  r   r  r   r  r  r  s       r=   r  zPossessiveRepeat.dump  sz    j01>>!ENNEl!!&FQJ"7
..%! 	" 	VaZ1r>   N)r?   r@   rA   re  rs  r  rC   r>   r=   r   r   n  s    
2r>   r   c                   l    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)r  c                 f    t         j                  |        || _        || _        || _        d | _        y r  )rO  r9   r   r^  r  rP  )r:   r   r^  r  s       r=   r9   zGroup.__init__  s,    4 	
$r>   c                     | ||f| j                   j                  | j                  <   | j                  j	                  |||       y r  )r   defined_groupsr^  r  rZ  rX  s       r=   rZ  zGroup.fix_groups  s7    04gu/E		  ,""7GU;r>   c                 |    | j                   j                  ||      }t        | j                  | j                  |      S r  )r  r   r  r   r^  r  s       r=   r   zGroup.optimise  s/    __--dG<
TYY

J77r>   c                 F    | j                   j                  |      | _         | S r  r  r_  s     r=   r`  zGroup.pack_characters  r  r>   c                 6    | j                   j                         S r  r  rR  s    r=   rb  zGroup.remove_captures      ..00r>   c                 6    | j                   j                         S r  r  rR  s    r=   re  zGroup.is_atomic  r  r>   c                      yrj  rC   rR  s    r=   rh  zGroup.can_be_affix  rl  r>   c                      yrd  rC   rR  s    r=   rk  zGroup.contains_group  rf  r>   c                 8    | j                   j                  |      S r  r  rn  s     r=   ro  zGroup.get_firstset  r  r>   c                 6    | j                   j                         S r  r  rR  s    r=   rq  zGroup.has_simple_start  r  r>   c                    g }| j                   x}}|dk  r2| j                  j                  |   }| j                  j                  |z
  }| j                   ||f}| j                  j                  j                  |      }||t        j                  |fgz  }|t        j                  t        |       ||fgz  }|| j                  j                  ||      z  }|t        j                  fgz  }||t        j                  fgz  }|S r  )r^  r   private_groupsru  	call_refsr   r  r`  GROUPr  r  r   r  )r:   r   rY  r   public_groupprivate_groupr.  r]  s           r=   rs  zGroup._compile  s    '+zz1}19933MBL II11MAMjj'5(ii!!%%c*?bkk3'((D"((CG,m\JKK''77"&&?bffZL Dr>   c                     | j                   }|dk  r	t        |   }t        dj                  t        |z  |             | j
                  j                  |dz   |       y )Nr   z
{}GROUP {}r-   )r^  r  r  r7   r  r  r  )r:   r  r   r^  s       r=   r  z
Group.dump  sM    

19"5)El!!&6/59:VaZ1r>   c                     t        |       t        |      u xr1 | j                  | j                  f|j                  |j                  fk(  S r  )r  r^  r  rz  s     r=   r|  zGroup.__eq__  sB    T
d5k) *tzz4??.K;;((
)/* 	+r>   c                 6    | j                   j                         S r  r  rR  s    r=   r  zGroup.max_width  r  r>   c                 8    | j                   j                  |      S r  r  rn  s     r=   r  zGroup.get_required_string  r  r>   c                     d | _         y r  rW  rR  s    r=   rX  zGroup.__del__  rY  r>   N)r?   r@   rA   r9   rZ  r   r`  rb  re  rh  rk  ro  rq  rs  r  r|  r  r  rX  rC   r>   r=   r  r    sR    <8
1+52,2++<r>   r  c                   (    e Zd Zej                  ZdZy)KeepKEEPN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r    s    ggGHr>   r  c                   (    e Zd Zej                  ZdZy)r   LAZY_REPEATN)r?   r@   rA   r  r  r  r  rC   r>   r=   r   r     r  r>   r   c                   j    e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zy)ri  AHEADBEHINDrJ  c                 |    t         j                  |        t        |      | _        t        |      | _        || _        y r  )rO  r9   r   rj  r   r  )r:   rj  r   r  s       r=   r9   zLookAround.__init__  s-    4 6lX$r>   c                 R    | j                   j                  || j                  |       y r  )r  rZ  rj  rX  s       r=   rZ  zLookAround.fix_groups  s    ""7DKK?r>   c                     | j                   j                  || j                        }| j                  r|j	                         r|S t        | j                  | j                  |      S r  )r  r   rj  r   r   ri  r  s       r=   r   zLookAround.optimise  sK    __--dDKK@
==Z002$++t}}jAAr>   c                 F    | j                   j                  |      | _         | S r  r  r_  s     r=   r`  zLookAround.pack_characters  r  r>   c                 6    | j                   j                         S r  r  rR  s    r=   rb  zLookAround.remove_captures  r  r>   c                 6    | j                   j                         S r  r  rR  s    r=   re  zLookAround.is_atomic   r  r>   c                 6    | j                   j                         S r  r  rR  s    r=   rh  zLookAround.can_be_affix  r  r>   c                 6    | j                   j                         S r  r  rR  s    r=   rk  zLookAround.contains_group  r  r>   c                     | j                   r*| j                  |k(  r| j                  j                  |      S t	        d g      S r  )r   rj  r  ro  r   rn  s     r=   ro  zLookAround.get_firstset	  s5    ==T[[G3??//88D6{r>   c                    d}| j                   r	|t        z  }|r	|t        z  }|r	|t        z  }t        j
                  |t        | j                         fg| j                  j                  | j                        z   t        j                  fgz   S r  )r   r  r  r  r  
LOOKAROUNDr  rj  r  r   r  r  s       r=   rs  zLookAround._compile  s~    ==[ EXEZE--O(<=>
//
!
!$++
./3566*> 	?r>   c                     t        dj                  t        |z  | j                  | j                     t
        | j                                  | j                  j                  |dz   | j                         y )Nz{}LOOK{} {}r-   )	r  r7   r  	_dir_textrj  r  r   r  r  r  s      r=   r  zLookAround.dump  sV    m""6F?
..
%x'>@ 	AVaZ5r>   c                 R    | j                   xr | j                  j                         S r  )r   r  r   rR  s    r=   r   zLookAround.is_empty   s    }};!9!9!;;r>   c                     t        |       t        |      u xrG | j                  | j                  | j                  f|j                  |j                  |j                  fk(  S r  )r  rj  r   r  rz  s     r=   r|  zLookAround.__eq__#  sT    DzT%[( Odkk4==
//.$||U^^U=M=MN.O 	Or>   c                      yr  rC   rR  s    r=   r  zLookAround.max_width'  r  r>   N)r?   r@   rA   r!  r9   rZ  r   r`  rb  re  rh  rk  ro  rs  r  r   r|  r  rC   r>   r=   ri  ri    sU    x0I%@B1+.0
?6
<Or>   ri  c                   j    e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zy)rq  r  r  rJ  c                     t         j                  |        t        |      | _        t        |      | _        || _        || _        || _        y r  )rO  r9   r   rj  r   r  r  r  )r:   rj  r   r  r  r  s         r=   r9   zLookAroundConditional.__init__-  s;    4 6lX$ r>   c                     | j                   j                  |||       | j                  j                  |||       | j                  j                  |||       y r  )r  rZ  r  r  rX  s       r=   rZ  z LookAroundConditional.fix_groups5  sD    ""7GU;  '59%8r>   c                 ,   | j                   j                  || j                        }| j                  j                  || j                        }| j                  j                  || j                        }t        | j                  | j                  |||      S r  )r  r   rj  r  r  rq  r   )r:   r   r   r  r  r  s         r=   r   zLookAroundConditional.optimise:  sp    __--dDKK@
==))$<,,''dkk:$T[[$--
G 	r>   c                     | j                   j                  |      | _         | j                  j                  |      | _        | j                  j                  |      | _        | S r  )r  r`  r  r  r_  s     r=   r`  z%LookAroundConditional.pack_charactersB  sI    //99$?55d;||33D9r>   c                     | j                   j                         | _         | j                  j                         | _        | j                  j                         | _        y r  )r  rb  r  r  rR  s    r=   rb  z%LookAroundConditional.remove_capturesH  s>    //99;557||335r>   c                     | j                   j                         xr6 | j                  j                         xr | j                  j                         S r  )r  re  r  r  rR  s    r=   re  zLookAroundConditional.is_atomicM  s@    ))+ #0G0G0I #
,,
 
 
"	$r>   c                     | j                   j                         xr6 | j                  j                         xr | j                  j                         S r  )r  rh  r  r  rR  s    r=   rh  z"LookAroundConditional.can_be_affixQ  s@    ,,. *4==3M3M3O *ll'')	+r>   c                     | j                   j                         xs6 | j                  j                         xs | j                  j                         S r  )r  rk  r  r  rR  s    r=   rk  z$LookAroundConditional.contains_groupU  sD    ..0 J
--
&
&
(J,0LL,G,G,I	Kr>   c                 Z   t         j                  t        | j                        t        | j                         fg}|j                  | j                  j                  | j                  |             |j                  t         j                  f       |j                  | j                  j                  ||             | j                  j                  ||      }|r1|j                  t         j                  f       |j                  |       |j                  t         j                  f       |S r  )r  CONDITIONALr  r   rj  r   r  r   rZ   r  r  r  r  r  s        r=   rs  zLookAroundConditional._compileY  s    T]]!3ST[[5IJKDOO++DKK?@RWWK DMM))'59:<<''7KK$KK!RVVJr>   c                 "   t        dj                  t        |z  | j                  | j                     t
        | j                                  | j                  j                  |dz   | j                         t        dj                  t        |z               | j                  j                  |dz   |       | j                  j                         sAt        dj                  t        |z               | j                  j                  |dz   |       y y )Nz{}CONDITIONAL {} {}r-   z{}EITHERr  )r  r7   r  r!  rj  r  r   r  r  r  r  r   r  s      r=   r  zLookAroundConditional.dumpg  s    #**6F?
..
%x'>@ 	AVaZ5j016A:w/||$$&&--01LLfqj'2 'r>   c                     | j                   j                         xr | j                  j                         xs | j                  j                         S r  )r  r   r  r  rR  s    r=   r   zLookAroundConditional.is_emptyq  s>    ((*Gt}}/E/E/G "
,,


!	#r>   c                     t        |       t        |      u xrG | j                  | j                  | j                  f|j                  |j                  |j                  fk(  S r  )r  r  r  r  rz  s     r=   r|  zLookAroundConditional.__eq__u  sT    DzT%[( Mdoot}}
,,.!,,ennemmL.M 	Mr>   c                 z    t        | j                  j                         | j                  j                               S r  r  rR  s    r=   r  zLookAroundConditional.max_widthy  r  r>   c                 &    | j                         d fS r  r  rn  s     r=   r  z)LookAroundConditional.get_required_string|  r  r>   N)r?   r@   rA   r!  r9   rZ  r   r`  rb  re  rh  rk  rs  r  r   r|  r  r  rC   r>   r=   rq  rq  *  sU    x0I9
6
$+K3#MH&r>   rq  c                       e Zd Zd Zd Zy)rl  c                     || _         y r  )r   )r:   r   s     r=   r9   zPrecompiledCode.__init__  rY  r>   c                 .    t        | j                        gS r  )rz   r   rt  s      r=   rs  zPrecompiledCode._compile  s    dii !!r>   Nra  rC   r>   r=   rl  rl    s    "r>   rl  c                   0   e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZdedfdZd ZddZd Zd Zd Zd	 Zd
 Zd Zy)r/  FTc                    t         j                  |        || _        t        |      | _        t
        |   | _        t        |      | _        | j                  | j                  | j                  | j                  | j                  f| _	        y r  )
rO  r9   r^   r   r   rT  r   r   rY   rQ  rd  s        r=   r9   zProperty.__init__  sb    4 
X1*=i^^TZZ
//4>>+	r>   c                 2    t        | j                  |||      S r  )r/  r^   rV  s       r=   rU  zProperty.rebuild  s    

Hj)DDr>   c                     | S r  rC   rg  s       r=   r   zProperty.optimise  r]  r>   c                     t        | g      S r  r  rn  s     r=   ro  zProperty.get_firstset  r  r>   c                      yrd  rC   rR  s    r=   rq  zProperty.has_simple_start  rf  r>   c                     d}| j                   r	|t        z  }| j                  r	|t        z  }|r	|t        z  }| j
                  | j                  |f   || j                  fgS r  )r   r  r   rk  r  r  r   r^   r  s       r=   rs  zProperty._compile  s\    ==[ E>>\!EXEdoow67

KLLr>   c           
          t         | j                  dz	     }|d   |d   | j                  dz     }}t        dj                  t        |z  t
        | j                     ||t        | j                                  y )NrQ   r   r-   i  z{}PROPERTY {} {}:{}{})	PROPERTY_NAMESr^   r  r7   r  r  r   rq  r   )r:   r  r   r   r   r^   s         r=   r  zProperty.dump  sm    djjB./1gtAwtzzF':;e%,,Vf_
4==
!4	$//0JL 	Mr>   c                 \    t        j                  | j                  |      | j                  k(  S r  )r   has_property_valuer^   r   ru  s     r=   rv  zProperty.matches  s"    ((R8DMMIIr>   c                      yr  rC   rR  s    r=   r  zProperty.max_width  r  r>   Nr}  )r?   r@   rA   r   r  PROPERTYr   PROPERTY_IGNr   r4  PROPERTY_REVPROPERTY_IGN_REVr  r9   rU  r   ro  rq  rs  r  rv  r  rC   r>   r=   r/  r/    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G (,	+EMMJr>   r/  c                       e Zd ZdZd Zy)PrunePRUNEc                 &    t         j                  fgS r  )r  rJ  rt  s      r=   rs  zPrune._compile  s    ~r>   Nr  rC   r>   r=   rI  rI    s    Hr>   rI  c                   (   e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZdZdedfdZd ZddZd Zd Zd	 Zd
 Zy)r  FTRANGEc                 8   t         j                  |        || _        || _        t	        |      | _        t        |   | _        t	        |      | _        | j                  | j                  | j                  | j
                  | j                  | j                  f| _
        y r  )rO  r9   lowerr!  r   r   rT  r   r   rY   rQ  )r:   rO  r!  r   r   r   s         r=   r9   zRange.__init__  so    4 

X1*=i^^TZZT]]
//4>>+	r>   c                 H    t        | j                  | j                  |||      S r  )r  rO  r!  rV  s       r=   rU  zRange.rebuild  s    TZZXz9MMr>   c                    | j                   r| j                  t        z  r|r| S |j                  t        z  r| j                  t
        z  t
        k7  r| S t        j                         }g }|D ]  }| j                  t        |      cxk  r| j                  k  s,n /t        j                  t        |      }|j                  t        |D cg c]  }t        |       c}| j                                |s| S t        |      | j                  | j                  z
  dz   k  r|j!                  d|        t#        |      S c c}w )Nr   r-   r   )r   r   r   r   r   r4  r   r:  rO  r   r!  r   r9  rZ   r  r]   r  r   )	r:   r   r   r   r<  r  r   r;  r   s	            r=   r   zRange.optimise  s   }}T__z%AfK g%4??^+K
+K !668 !BzzSW2

2))*;R@VV$<VSVV$<!__. / " Ku:

TZZ/!33LLD!e} %=s   D<c                     d}| j                   r	|t        z  }| j                  r	|t        z  }|r	|t        z  }| j
                  | j                  |f   || j                  | j                  fgS r  )	r   r  r   rk  r  r  r   rO  r!  r  s       r=   rs  zRange._compile  si    ==[ E>>\!EXEdoow67


**  	r>   c           
      F   t        t        | j                              j                  d      }t        t        | j                              j                  d      }t        dj                  t        |z  t        | j                     ||t        | j                                  y )Nrn  z{}RANGE {} {} {}{})ro  r7  rO  rp  r!  r  r7   r  r  r   rq  r   )r:   r  r   display_lowerdisplay_uppers        r=   r  z
Range.dump   st    c$**o.55d;c$**o.55d;"))&6/
4==
!=-
DOO
$& 	'r>   c                 ~    | j                   |cxk  xr | j                  k  | j                  k(  S c | j                  k(  S r  )rO  r!  r   ru  s     r=   rv  zRange.matches  s2    

b.DJJ.4==@@.4==@@r>   c                      yr  rC   rR  s    r=   r  zRange.max_width
  r  r>   Nr}  )r?   r@   rA   r   r  rM  r   	RANGE_IGNr   r4  	RANGE_REVRANGE_IGN_REVr  r  r9   rU  r   rs  r  rv  r  rC   r>   r=   r  r    s    :u*=r||NE#:BLLtnbllZ$68H8H~t&<b>N>NPG H.2v
+N>	'Ar>   r  c                      e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZefdZd Zd Zd Zd Zd Zd	 Zy
)r   FTc                     t         j                  |        || _        || _        || _        t
        |   | _        | j                  | j                  | j                  f| _        y r  )	rO  r9   r   r^  r   rT  r   rY   rQ  )r:   r   r^  r   r   s        r=   r9   zRefGroup.__init__  sK    4 	
 1*=NNDJJ?	r>   c                    	 t        | j                        | _        d| j                  cxk  r| j                  j                  k  sn t        d|| j                        | j                  | j                  | j                  f| _        y # t        $ rQ 	 | j                  j                  | j                     | _        n$# t
        $ r t        d|| j                        w xY wY w xY w)NrD  r-   rC  )r  r^  r-  r   rG  r~   r&   r   ru  rY   r   rQ  rX  s       r=   rZ  zRefGroup.fix_groups  s    	ETZZDJ DJJ7$))"7"7717DMMJJNNDJJ?	  	EE!YY224::>
 EOWdmmDDE 	Es)   B 	C!(B:9C!:!CC! C!c                 8    t        dt        | j                        rK  rL  rR  s    r=   rb  zRefGroup.remove_captures+  rM  r>   c                 n    d}|r	|t         z  }| j                  | j                  |f   || j                  fgS r  )r  r  r   r^  r  s       r=   rs  zRefGroup._compile.  s:    XEdoow67

KLLr>   c                     t        dj                  t        |z  | j                  t        | j
                                  y )Nz{}REF_GROUP {}{})r  r7   r  r^  rq  r   r  s      r=   r  zRefGroup.dump4  s0     ''
DOO
$& 	'r>   c                     t         S r  r  rR  s    r=   r  zRefGroup.max_width8  rU  r>   c                     d | _         y r  rW  rR  s    r=   rX  zRefGroup.__del__;  rY  r>   N)r?   r@   rA   r   r  	REF_GROUPr   REF_GROUP_IGNr   r4  REF_GROUP_FLDREF_GROUP_REVREF_GROUP_IGN_REVREF_GROUP_FLD_REVr  r9   rZ  rb  rs  r  r  rX  rC   r>   r=   r   r     s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G :@ @@KM'r>   r   c                   (    e Zd Zej                  ZdZy)r  SEARCH_ANCHORN)r?   r@   rA   r  rj  r  r  rC   r>   r=   r  r  >  r  r>   r  c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zed        Zed        Zed        Zd Zd Zd Zd Zy)r   Nc                 D    t         j                  |        |g }|| _        y r  )rO  r9   r  )r:   r  s     r=   r9   zSequence.__init__C  s!    4 =E
r>   c                 L    | j                   D ]  }|j                  |||        y r  )r  rZ  )r:   r1   r   rY  rr   s        r=   rZ  zSequence.fix_groupsJ  s     ALL'51 r>   c                     g }| j                   D ]Q  }|j                  ||      }t        |t              r|j	                  |j                          A|j                  |       S t        |      S r  )r  r   r.   r   r   rZ   rM  )r:   r   r   r  rr   s        r=   r   zSequence.optimiseN  sW    A

4)A!X&QWW%Q  U##r>   c                 L   g }g }t         }| j                  D ]g  }t        |      t        u r|j                  r}|j
                  sq|j                  |k7  rF|j                  st        |j                        r$t        j                  |||       |j                  }|j                  |j                         t        |      t        u st        |      t        u rp|j                  |k7  rD|j                  st        fd|D              r$t        j                  |||       |j                  }|j                  |j                          0t        j                  |||       |j                  |j#                               j t        j                  |||       t%        |      S )z+Packs sequences of characters into strings.c              3   6   K   | ]  }t        |        y wr  r   r  r   r   s     r=   r  z+Sequence.pack_characters.<locals>.<genexpr>o  s"      +"  DE:dA+>    )r   r  r  r   r   r   r   r   r^   r   _flush_charactersrZ   r  r  r  r   r  r`  rM  )r:   r   r  r  r   rr   s    `    r=   r`  zSequence.pack_charactersZ  sN   

AAw)#

1;;<<:- ||z$'@ 224$e- &'\\
!!!''*aF"d1g&8<<:- ||s +" +" (" 224$e- &'\\
!!!,,/**4ZOQ..t457 : 	""4ZGU##r>   c                 j    | j                   D cg c]  }|j                          c}| _         | S c c}w r  )r  rb  )r:   rr   s     r=   rb  zSequence.remove_captures  s/    37::>:aa''):>
 ?r  c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r  r  rr   s     r=   r  z%Sequence.is_atomic.<locals>.<genexpr>       5*Q1;;=*r  r  r  rR  s    r=   re  zSequence.is_atomic      5$**555r>   c                      yrj  rC   rR  s    r=   rh  zSequence.can_be_affix  rl  r>   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r  rx  s     r=   r  z*Sequence.contains_group.<locals>.<genexpr>  s     :z!1##%zr  )r  r  rR  s    r=   rk  zSequence.contains_group  s    :tzz:::r>   c                     t               }| j                  }|r|j                          |D ]/  }||j                  |      z  }d |vr|c S |j	                  d        1 |t        d g      z  S r  )r   r  r   ro  discard)r:   r   r   r  rr   s        r=   ro  zSequence.get_firstset  sf    U

MMOA!..))B2~	JJt	  CKr>   c                 j    t        | j                        xr | j                  d   j                         S r  )r   r  rq  rR  s    r=   rq  zSequence.has_simple_start  s'    DJJDDJJqM$B$B$DDr>   c                     | j                   }|r|d d d   }g }|D ]#  }|j                  |j                  ||             % |S r  )r  r   r   )r:   r   rY  seqr   rr   s         r=   rs  zSequence._compile  sH    jjdd)CAKK		'512  r>   c                 J    | j                   D ]  }|j                  ||        y r  )r  r  )r:   r  r   rr   s       r=   r  zSequence.dump  s    AFF67# r>   c                     |sy |t         z  rt         fd|D              st        }|t        z  t        k(  rt        j                  |      }|D ]l  }|j                  }t        |      dk(  r*|j                  t        |d   |j                               G|j                  t        ||j                               n nJt        |      dk(  r |j                  t        |d   |             n|j                  t        ||             g |d d  y )Nc              3   6   K   | ]  }t        |        y wr  rq  rr  s     r=   r  z-Sequence._flush_characters.<locals>.<genexpr>  s     ?Jqz$*Jrs  r-   r   r   )r   r  r   r4  r   _fix_full_casefoldr  r]   rZ   r   r   r  )r   r  r   r  literalsr   charss   `      r=   rt  zSequence._flush_characters  s     
"?J??#
'N:22:>H u:?LL58!PQLL$//!JK ! :!#Yz!}LMVJ:FG
1r>   c                    t        j                         D cg c]  }t        j                  t        |       }}t        j                  t        dj	                  d | D                    j                         }g }|D ]U  } |j                  |      }|dk\  s|j                  ||t        |      z   f        |j                  ||dz         }|dk\  r;W d}g }t        j                  |      D ]R  \  }	}
||	k  r#|j                  t        | ||	 t                     |j                  t        | |	|
 t                     |
}T |t        |       k  r#|j                  t        | |d  t                     |S c c}w )Nrf   c              3   2   K   | ]  }t        |        y wr  r7  r{  s     r=   r  z.Sequence._fix_full_casefold.<locals>.<genexpr>  s      =a >AVr  r   r-   r   )r   r:  r   r9  r\   rO  findrZ   r]   r   _merge_chunksr  r   r4  )r  r   expandedr   chunksrm   foundr2   r  r  r  s              r=   r  zSequence._fix_full_casefold  sr   
 
&
&
(*
( @AF$$%6:
( 	 *!!"3RWW == 6   % 	AFKKNE1*uec!fn56#Auqy1 1*  "008JE3U{
3(?'!) * OOGJus$;') *C 9 Z OOGJsu$6:NO9*s   !E5c                     t        |       dk  r| S | j                          | d   \  }}g }| dd  D ].  \  }}||k  rt        ||      }|j                  ||f       ||}}0 |j                  ||f       |S )NrN   r   r-   )r]   sortr7  rZ   )r  r  r  
new_chunksrr   rm   s         r=   r  zSequence._merge_chunks  s    v;?MAY
s
13LDAqCx#qk!!5#,/s ! 	5#,'r>   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r?  r8  s     r=   r  z$Sequence.is_empty.<locals>.<genexpr>   s     4A1::<r  rz  rR  s    r=   r   zSequence.is_empty  s    4444r>   c                 d    t        |       t        |      u xr | j                  |j                  k(  S r  )r  r  rz  s     r=   r|  zSequence.__eq__  rS  r>   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }|j                           y wr  r  rx  s     r=   r  z%Sequence.max_width.<locals>.<genexpr>  ry  r  )sumr  rR  s    r=   r  zSequence.max_width  r{  r>   c                     | j                   }|r|d d d   }d}|D ]#  }|j                  |      \  }}||z  }|s||fc S  |d fS r  )r  r  )r:   r   r  offsetrr   r  r  s          r=   r  zSequence.get_required_string  s`    jjdd)CA,,W5HCcMFs{"	  t|r>   r  )r?   r@   rA   r9   rZ  r   r`  rb  re  rh  rk  ro  rq  rs  r  rC  rt  r  r  r   r|  r  r  rC   r>   r=   r   r   B  s    2
$$$L6; E	$  6  B  (5G6r>   r   c                   J    e Zd ZdedfdZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zy)r'  TFc                 B   t         j                  |        || _        t        |      | _        t        |      | _        t        |   | _        t        |      | _	        d| _
        | j                  | j                  | j                  | j                  | j                  f| _        y r  )rO  r9   r   rz   r  r   r   rT  r   r   
char_widthrY   rQ  )r:   r   r  r   r   r   s         r=   r9   zSetBase.__init__  st    4 	5\
X1*=i^^TZZ
//4>>+	r>   c                      t        |       | j                  | j                  |||      j                  | j                  d      S rj  )r  r   r  r   rV  s       r=   rU  zSetBase.rebuild&  s8    tDz$))TZZ:
Xdii/	0r>   c                     t        | g      S r  r  rn  s     r=   ro  zSetBase.get_firstset*  r  r>   c                      yrd  rC   rR  s    r=   rq  zSetBase.has_simple_start-  rf  r>   c                 P   d}| j                   r	|t        z  }| j                  r	|t        z  }|r	|t        z  }| j
                  | j                  |f   |fg}| j                  D ]!  }|j                  |j                                # |j                  t        j                  f       |S r  )r   r  r   rk  r  r  r   r  r   r   rZ   r  r  )r:   r   rY  r   r   ra   s         r=   rs  zSetBase._compile0  s    ==[ E>>\!EXEdoow67?@AKK		$  	RVVJr>   c           	          t        dj                  t        |z  | j                  t        | j
                     t        | j                                  | j                  D ]  }|j                  |dz   |        y )Nz	{}{} {}{}r-   )
r  r7   r  r  r  r   rq  r   r  r  )r:   r  r   ro   s       r=   r  zSetBase.dump@  s[    k  &$--
4==
!9T__#=? 	@AFF6A:w' r>   c                 H   | j                   r| j                  t        z  r|r| S | j                  j                  t
        z  r| j                  t        z  t        k7  r| S t        j                         }g }t               }|D ]  }| j                  t        |            st        j                  t        |      }||vs=|j                  t        |D cg c]  }t        |       c}| j                               |j!                  |        |s| S t#        | g|z         S c c}w r&  )r   r   r   r   r   r   r4  r   r:  r   rv  r   r   r9  rZ   r  r   r   )	r:   r   r   r<  r  seenr   r;  r   s	            r=   _handle_case_foldingzSetBase._handle_case_foldingF  s    }}T__z%AfK 7*
1+0,K !668 u!B||CG$))*;R@%LL(@AQ(@!%"2 3HHV$ " Ktfun%% )As   Dc                    | j                   r| j                  t        z  sy| j                  j                  t
        z  r| j                  t        z  t        k7  ryt        j                         }t               }|D ]H  }| j                  t        |            st        j                  t        |      }|j                  |       J |syt        d |D              S )Nr-   c              3   2   K   | ]  }t        |        y wr  r  )r  r;  s     r=   r  z$SetBase.max_width.<locals>.<genexpr>{  s     2T63v;Tr  )r   r   r   r   r   r   r4  r   r:  r   rv  r   r   r9  r   r7  )r:   r<  r  r   r;  s        r=   r  zSetBase.max_widthd  s    }}T__z%A 7*
1+0, !668 u!B||CG$))*;R@  "
 2T222r>   c                     d | _         y r  rW  rR  s    r=   rX  zSetBase.__del__}  rY  r>   N)r?   r@   rA   r   r9   rU  ro  rq  rs  r  r  r  rX  rC   r>   r=   r'  r'    s7    -1f+0 (&<32r>   r'  c                      e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZdZddZd Zy)r  FTSET_DIFFc                 L   | j                   }t        |      dkD  r|d   t        |dd        g}t        |      dk(  r;|d   j                  | j                  | j
                        j                  |      S t        fd|D              | _         | j                  |      S )NrN   r   r-   r   c              3   F   K   | ]  }|j                  d         yw)Tr   N)r   )r  ra   r   r   s     r=   r  z#SetDiff.optimise.<locals>.<genexpr>  s*      
 GH1::dGD:A
s   !)	r  r]   r   r   r   r   r   rz   r  )r:   r   r   r   r  s    ``  r=   r   zSetDiff.optimise  s    

u:>1XxeACk:;Eu:?8&&$// ' ((0w(GH  
 
 ((v66r>   c                     | j                   d   j                  |      xr | j                   d   j                  |       }|| j                  k(  S Nr   r-   r  rv  r   r:   r   ra   s      r=   rv  zSetDiff.matches  sD    JJqM!!"%Gdjjm.C.CB.G*GDMM!!r>   Nr}  )r?   r@   rA   r   r  r  r   SET_DIFF_IGNr   r4  SET_DIFF_REVSET_DIFF_IGN_REVr  r  r   rv  rC   r>   r=   r  r    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G
 H7"r>   r  c                      e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZdZddZd Zy)r  FT	SET_INTERc                    g }| j                   D ]_  }|j                  ||d      }t        |t              r(|j                  r|j                  |j                          O|j                  |       a t        |      dk(  r;|d   j                  | j                  | j                        j                  |||      S t        |      | _         | j                  ||      S NTr   r-   r   r   )r  r   r.   r  r   r   rZ   r]   r   r   r   rz   r  r:   r   r   r   r  ra   s         r=   r   zSetInter.optimise  s    A

4
6A!X&1::QWW%Q  u:?8&&$// ' ((0w(GH 5\
((v66r>   c                 ^    t        fd| j                  D              }|| j                  k(  S )Nc              3   @   K   | ]  }|j                          y wr  rv  r  ro   r   s     r=   r  z#SetInter.matches.<locals>.<genexpr>       2z!		"zr  )r  r  r   r  s    ` r=   rv  zSetInter.matches  &    2tzz22DMM!!r>   Nr}  )r?   r@   rA   r   r  r  r   SET_INTER_IGNr   r4  SET_INTER_REVSET_INTER_IGN_REVr  r  r   rv  rC   r>   r=   r  r    s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G
 H7$"r>   r  c                      e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZdZddZd Zy)r  FTSET_SYM_DIFFc                    g }| j                   D ]_  }|j                  ||d      }t        |t              r(|j                  r|j                  |j                          O|j                  |       a t        |      dk(  r;|d   j                  | j                  | j                        j                  |||      S t        |      | _         | j                  ||      S r  )r  r   r.   r  r   r   rZ   r]   r   r   r   rz   r  r  s         r=   r   zSetSymDiff.optimise  s    A

4
6A!Z(QZZQWW%Q  u:?8&&$// ' ((0w(GH 5\
((v66r>   c                 n    d}| j                   D ]  }||j                  |      k7  } || j                  k(  S rj  r  )r:   r   ra   ro   s       r=   rv  zSetSymDiff.matches  s8    AQYYr]"A  DMM!!r>   Nr}  )r?   r@   rA   r   r  r  r   SET_SYM_DIFF_IGNr   r4  SET_SYM_DIFF_REVSET_SYM_DIFF_IGN_REVr  r  r   rv  rC   r>   r=   r  r    s    *e1DHe,boo@!!FD>23F3F4"11Hd3CND123J3J	LG
 H7$"r>   r  c                      e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZdZddZd Zd Zy)	r   FT	SET_UNIONc                    g }| j                   D ]_  }|j                  ||d      }t        |t              r(|j                  r|j                  |j                          O|j                  |       a t        |      dk(  rU|d   }|j                  |j                  | j                  k(  | j                  | j                        j                  |||      S t        |      | _         | j                  ||      S )NTr   r-   r   )r   r   r   )r  r   r.   r   r   r   rZ   r]   r   r   r   rz   r  )r:   r   r   r   r  ra   ro   s          r=   r   zSetUnion.optimise  s    A

4
6A!X&1::QWW%Q  u:?aA<<t}})D   ((0w(GH 5\
((v66r>   c                 4   d}| j                   r	|t        z  }| j                  r	|t        z  }|r	|t        z  }t        t              g }}| j                  D ]L  }t        |t              r)||j                      j                  |j                         <|j                  |       N | j                  | j                  |f   |fg}|j                         D ]}  \  }}	d}|r	|t        z  }t        |	      dk(  r&|j                  t        j                   ||	d   f       G|j                  t        j"                  |t        |	      ft%        |	      z           |D ]!  }|j'                  |j)                                # |j                  t        j*                  f       |S r  )r   r  r   rk  r  r   r   r  r.   r   rZ   r^   r  r   r]   r  r~  STRINGrz   r   r   r  )
r:   r   rY  r   r  othersra   r   r   valuess
             r=   rs  zSetUnion._compile  sP   ==[ E>>\!EXE(.F
A!Y'1::&--agg6a 	  doow67?@ * 0 0 2HfE$6{aR\\5&)<=RYYs6{;eFmKL !3 AKK		$  	RVVJr>   c                 ^    t        fd| j                  D              }|| j                  k(  S )Nc              3   @   K   | ]  }|j                          y wr  r  r  s     r=   r  z#SetUnion.matches.<locals>.<genexpr>  r  r  )r  r  r   r  s    ` r=   rv  zSetUnion.matches  r  r>   Nr}  )r?   r@   rA   r   r  r  r   SET_UNION_IGNr   r4  SET_UNION_REVSET_UNION_IGN_REVr  r  r   rs  rv  rC   r>   r=   r   r     s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G
 H7( D"r>   r   c                   (    e Zd ZdZej
                  Zy)SkipSKIPN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r    s    HggGr>   r  c                   (    e Zd Zej                  ZdZy)r   START_OF_LINEN)r?   r@   rA   r  r  r  r  rC   r>   r=   r   r     r  r>   r   c                   (    e Zd Zej                  ZdZy)r   START_OF_LINE_UN)r?   r@   rA   r  r  r  r  rC   r>   r=   r   r   #        G Hr>   r   c                   (    e Zd Zej                  ZdZy)r   START_OF_STRINGN)r?   r@   rA   r  r  r  r  rC   r>   r=   r   r   '  r  r>   r   c                   (    e Zd Zej                  ZdZy)StartOfWordSTART_OF_WORDN)r?   r@   rA   r  r  r  r  rC   r>   r=   r  r  +  r  r>   r  c                      e Zd Zedfej
                  edfej                  edfej
                  e	dfej                  edfej                  edfej                  edfej                  e	dfej                  iZefdZd Zd Zd Zd Zd Zd	 Zy
)r  FTc                    t        |      | _        t        |   | _        | j                  t        z  t        k(  rOg }| j                  D ]=  }t        j                  t        t        |            }|j                  d |D               ? n| j                  }t        |      | _
        d| _        | j                  | j                  | j                  f| _        y )Nc              3   2   K   | ]  }t        |        y wr  rz  r{  s     r=   r  z"String.__init__.<locals>.<genexpr>>  s     (@AQr  F)rz   r  rT  r   r4  r   r   r9  r7  r   r|  requiredrY   rQ  )r:   r  r   r|  r   r;  s         r=   r9   zString.__init__6  s    
+1*=OOn,? "))*;SYG!(((@(@@ ( !%!&'8!9NNDOOT__D	r>   c                 l    |rd}nd}t        t        | j                  |   | j                        g      S )Nr  r   r   )r   r   r  r   )r:   r   r2   s      r=   ro  zString.get_firstsetG  s:    CCIdooc2__& ' ( 	(r>   c                      yrd  rC   rR  s    r=   rq  zString.has_simple_startO  rf  r>   c                     d}|r	|t         z  }| j                  r	|t        z  }| j                  | j                  |f   |t        | j                        f| j                  z   gS r  )r  r  REQUIRED_OPr  r   r]   r|  r  s       r=   rs  zString._compileR  sj    XE==[ Edoow67
d$$
%')-)?)?@ A 	Ar>   c                     t        dj                  d | j                  D                    j                  d      }t	        dj                  t        |z  |t        | j                                  y )Nrf   c              3   2   K   | ]  }t        |        y wr  r  r{  s     r=   r  zString.dump.<locals>.<genexpr>\  s     @1Ar  rn  z{}STRING {}{})	ro  r\   r  rp  r  r7   r  rq  r   rr  s       r=   r  zString.dump[  sS    @@@AHHNo$$Vf_g
DOO
$& 	'r>   c                 ,    t        | j                        S r  )r]   r|  rR  s    r=   r  zString.max_width`  s    4))**r>   c                 
    d| fS r  rC   rn  s     r=   r  zString.get_required_stringc  s    $wr>   N)r?   r@   rA   r   r  r  r   
STRING_IGNr   r4  
STRING_FLD
STRING_REVSTRING_IGN_REVSTRING_FLD_REVr  r9   ro  rq  rs  r  r  r  rC   r>   r=   r  r  /  s    		J+>^U$;R]]tnbmmj$%79J9J'=	G /5 E"(A'
+r>   r  c                       e Zd Zd Zy)r  c                     dj                  d | j                  D              }t        |      j                  d      }t	        dj                  t        |z  |t        | j                                  y )Nrf   c              3   2   K   | ]  }t        |        y wr  r  r{  s     r=   r  zLiteral.dump.<locals>.<genexpr>h  s     :/Q#a&/r  rn  z{}LITERAL MATCH {}{})	r\   r  ro  rp  r  r7   r  rq  r   )r:   r  r   literalrs  s        r=   r  zLiteral.dumpg  sX    '':$//::.''-$++FVOW
DOO
$& 	'r>   N)r?   r@   rA   r  rC   r>   r=   r  r  f  s    'r>   r  c                   "    e Zd ZefdZd Zd Zy)r   c           
      `   || _         || _        t        |   | _        | j                  | j                  | j                  f| _        || j                  f| _        | j                  |j                  vr,t        |j                        |j                  | j                  <   | j                   j                  | j                     }| j                   j                  | j                     }| j                  }| j                   j                  t        z  }||z  }g }|D ]T  }	t        |	t              r|	D 
cg c]  }
t        |
       }	}
|j                  |	D 
cg c]  }
t!        |
|       c}
       V |j#                  t        d       |D cg c]  }t%        |       c}| _        y c c}
w c c}
w c c}w )Nr   T)r.  r   )r   r   rT  r   rY   rQ  set_keynamed_lists_usedr]   r  r   r   r.   r/   r   rZ   r   r  r   r   )r:   r   r   r   rH  r  r  
fold_flagschoicesr   r   choices               r=   r9   zStringSet.__init__n  sj   		1*=NNDIIt>	doo.<<t44425d6K6K2LD!!$,,/		**4<<8		  +__
99??^3
*
F&#&*01&Q#a&&1NN EFIaJ? 	  	d+8?@f&)@ 2 As   +F!F&
F+c                     t        dj                  t        |z  | j                  t        | j
                                  y )Nz{}STRING_SET {}{})r  r7   r  r   rq  r   r  s      r=   r  zStringSet.dump  s0    !((&$))
DOO
$& 	'r>   c                     d | _         y r  rW  rR  s    r=   rX  zStringSet.__del__  rY  r>   N)r?   r@   rA   r   r9   r  rX  rC   r>   r=   r   r   m  s    .4 AB'r>   r   c                   H    e Zd ZdZd ZddZddZddZddZd Z	d Z
d	 Zy
)Sourcez1Scanner for the regular expression source string.c                     t        |t              r|| _        t        | _        n |j
                  d      | _        d | _        d| _        d| _        |d d | _        y )Nzlatin-1c                     t        | g      S r  )r<  r$  s    r=   r,  z!Source.__init__.<locals>.<lambda>  s
    uaSzr>   r   F)	r.   r/   r   r7  	char_typedecoder2   rP  r;  )r:   r   s     r=   r9   zSource.__init__  sO    fc" DK DN'&--	2DK1DN!3Q<r>   c                 V   | j                   }| j                  }	 | j                  r:|s8	 ||   j                         r|dz  }n||   dk(  r |j                  d|      }nn7||   }|dz   | _        |S # t
        $ r || _        |d d cY S t        $ r t        |      | _        |d d cY S w xY w)Nr-   rE  r+   r   )r   r2   rP  isspacerH  rG  r-  r]   )r:   override_ignorer   r2   r   s        r=   r   z
Source.get  s    hh	   c{**,q+*fll45  BQwDHI 	 DH3Q< 	 6{DH3Q<	 s   AA1 1B(B('B(c                 D   | j                   }| j                  }	 | j                  rg }t        |      |k  r`	 ||   j	                         r|dz  }n||   dk(  r |j
                  d|      }nn7|j                  ||          |dz  }t        |      |k  r`dj                  |      }n||||z    }|t        |      z  }|| _        |S # t        $ r$ t        |      | _        dj                        cY S t        $ r$ t        |      | _        dj                        cY S w xY wNr-   rE  r+   rf   )
r   r2   rP  r]   r	  rH  rZ   r\   rG  r-  )r:   r3   r   r2   	substrings        r=   get_manyzSource.get_many  s&   hh 	&  	)nu,!#;..01HC#C[C/".&,,tS"9C!  $$VC[11HC )nu, GGI.	"3u5	s9~%DH 	&6{DH779%% 	&6{DH779%%	&s   A;C 0C *D3)DDc                 b   | j                   }| j                  }| j                  ry|sw	 g }	 ||   j                         r|dz  }nA||   dk(  r |j                  d|      }n%||   |v |k(  r|j                  ||          |dz  }nn[|| _        dj                        S 	 ||   |v |k(  r|dz  }||   |v |k(  r|| j                  | }|| _        |S # t        $ r t        |      | _        Y _t        $ r t        |      | _        Y yw xY w# t        $ r || j                  | }|| _        |cY S w xY wr  )
r   r2   rP  r	  rH  rZ   rG  r]   r-  r\   )r:   test_setrK  r  r   r2   r  s          r=   r>  zSource.get_while  s^   hh['	c{**,q+*fll45 +1g=!((5q   779%%!c{h.7:1HC c{h.7: #488c2	  #  'v; 'v;'  !"488c2	  !s0   A%C D
 9D
 D,DD
!D.-D.c                    | j                   }| j                  }	 | j                  rH	 ||   j                         r|dz  }n-||   dk(  r |j                  d|      }n||   |v |k(  r|dz  }nnG||   |v |k(  r|dz  }||   |v |k(  r|| _        y # t
        $ r t        |      | _        Y y t        $ r t        |      | _        Y y w xY w)Nr-   rE  r+   )r   r2   rP  r	  rH  rG  r]   r-  )r:   r  rK  r   r2   s        r=   
skip_whilezSource.skip_while  s    hh	#  c{**,q+*fll45 +1g=q  c{h.7:1HC c{h.7: DH 	#6{DH 	#6{DH	#s   A-B B C+CCc                 z   | j                   }| j                  }| j                  rW	 |D ]I  }	 ||   j                         r|dz  }n||   dk(  r |j                  d|      }nn7||   |k7  r y|dz  }K || _        y |j                  ||      sy|t        |      z   | _        y# t
        $ r Y yt        $ r Y yw xY w)NTr-   rE  r+   F)	r   r2   rP  r	  rH  rG  r-  r1  r]   )r:   r  r   r2   r   s        r=   r   zSource.match3  s    hh"A!#;..01HC#C[C/".&,,tS"9C!  c{a'$1HC #   %6$$Y4S^+DH   s   AB$ -B$ $	B:/B:9B:c                     | j                  |      s0t        dj                  |      | j                  | j                        y )Nz
missing {})r   r&   r7   r   r2   )r:   r  s     r=   rO  zSource.expectZ  s5    zz)$++I6TXXNN %r>   c                 
   | j                   }| j                  }	 | j                  r8	 ||   j                         r|dz  }n||   dk(  r |j                  d|      }nn7|t        |      k\  S # t        $ r Y yt        $ r Y yw xY w)NTr-   rE  r+   )r   r2   rP  r	  rH  r]   rG  r-  )r:   r   r2   s      r=   at_endzSource.at_end^  s    hh	  c{**,q+*fll45  #f+%% 	 		s   AA, ,	B7BBNr}  )r-   )TFr  )r?   r@   rA   rB   r9   r   r  r>  r  r   rO  r  rC   r>   r=   r  r    s1    7
  8$&L.!`#:%NOr>   r  c                   2    e Zd ZdZddi fdZddZd Zd Zy)	Infoz"Info about the regular expression.r   Nc                     |t         |t        z  xs t           z  }|| _        || _        d| _        || _        d| _        i | _        i | _	        || _
        i | _        g | _        i | _        i | _        g | _        i | _        y )NFr   )DEFAULT_FLAGSr  r  r   r  r  r  ru  rG  
group_namer  r  open_groupsrH  r  rI  r  )r:   r   r  r  s       r=   r9   zInfo.__init__w  s     5I/JJ
!"" " "  r>   c                    | j                   j                  |      }|^	 | xj                  dz  c_        || j                  | j                  vrn1| j                  }|r|| j                   |<   || j                  |<   || j                  v r*t        | j                        dz    }|| j                  |<   |}| j                  j                  |       | j                  j                  |d      dz   | j                  |<   |S rL  )	rG  r   ru  r  r  r]   r  rZ   rH  )r:   r   r^  group_aliass       r=   rN  zInfo.open_group  s      $$T*=  A% <4#3#34??#J 
 $$E).  &)-&D$$$   3 34q89K/4D,E&'+'<'<'@'@'JQ'Ne$r>   c                 8    | j                   j                          y r  )r  r   rR  s    r=   rQ  zInfo.close_group  s    r>   c                     | j                   t        z  xs t        }|t        k(  ry|j	                         rt        |      }n| j                  j                  |      }|| j                  v S rj  )	r   r  r  r!   r  r  rG  r   r  )r:   r   r  r^  s       r=   rf  zInfo.is_open_group  s[     ::-A/h<<>IE$$((.E((((r>   r  )r?   r@   rA   rB   r9   rN  rQ  rf  rC   r>   r=   r  r  t  s     ($r !&4)r>   r  c                    i }g }| j                   D ]  \  }}}|j                  ||f}|j                  |      }||j                  dk(  r]t        | j                  t
        z        }	t        |t              }
|	|
f||fk7  rd|j                  t        t        |      |      ||f       n<| j                  |j                     }|d   }|dd ||fk7  r|j                  |||f       t        |      }|||<   ||_         || _        || _        y)zkChecks whether the reverse and fuzzy features of the group calls match
    the groups which they call.
    Nr   r-   )rI  r^  r   r   r   r   r.   r  rZ   r[  r]   r  rP  r  additional_groups)r   r^  r  r"  callr   rY  r.  r]  revfuzdef_infor^  s                r=   _check_group_featuresr'    s    I $ 0 0guzz7E*mmC ;zzQ4::/0 /:'5!11 &,,gc)nf.Mu.& '  ..tzz: AC>gu%55 &,,eWe-DEi.C IcN9 !1< DN.Dr>   c                     | j                  t        |t        z              \  }}|r>d|_        |t        k\  rd}|j
                  }|t        z  s
|t         z  }|j                  }nd}d}d}|||fS )z>Gets the required string and related info of a parsed pattern.Tr  r   rC   )r  r   r   r  r  r   r   r|  )r^  r   
req_offsetr  	req_flags	req_charss         r=   _get_required_stringr,    s     "55d57?6KLJ "J''	'!I..	
		y)++r>   c                       e Zd ZddZd Zy)r'   c                    || _         g }|D ]  \  }}t        |      }t        ||j                        }t	        |j
                  t        z        |_        t        ||      }|j                         s!t        d|j                  |j                        |j                  |j                                 t        |      }t        |      D 	
cg c]  \  }	}
t!        ||	dz   |
       }}	}
t#        |      }t	        |j
                  t$        z        }|j'                  ||      }|j)                  |      }t+        ||j
                        \  }}}t-        ||       |j.                  r!t        dj                  |j                        t	        |j
                  t$        z        }|j1                  |      t2        j4                  fgz   }t7        |      }|j9                         s,	 t;        ||j=                  |            }t7        |      }||z   }|j
                  t@        z  xs tB        }|dtD        tF        fvrtI        d      tK        j0                  d |tL        z  |z  |i i i g |||tO        |            | _(        y c c}
}	w # t>        $ r Y ~w xY w)Nzunbalanced parenthesisr-   z(recursive regex not supported by Scannerr   z5VERSION0 and VERSION1 flags are mutually incompatible))lexiconr  r  r  r   r   r%   rP  r   r  r&   r   r2   rZ   rb  	enumerater  r   r   r   r`  r,  r'  r  r   r  SUCCESSr   rq  r   ro  rK   r  r  r   r!   r-  r   r  r]   scanner)r:   r/  r   patternsphraseactionr   r   r^  r  rp   r   r)  r+  r*  r   fs_coder  s                     r=   r9   zScanner.__init__  s[    %NFFF^Fv//0D"&tzzG';"<F#FD1F==?4fmm**  OOF2245 & E{6?6IJ6IdaE$Aq)6IJ! tzzG+,w/''- ,@
**,(
Iy 	dF+ >>BmmVZZ) ) tzzG+, ~~g&2::.)99 T"&&(+D&2E2Eg2NO'0~
 ::-A/1h11TUU ~~dU\-AW,L
BB
Iy
h-c KF " s   I9!+I? ?	J
Jc                 h   g }|j                   }| j                  j                  |      j                  }d}	  |       }|snl|j                         }||k(  rnV| j                  |j
                  dz
     d   }t        |d      r|| _         || |j                               }| ||       |}v|||d  fS )Nr   r-   __call__)rZ   r2  r   r  r/  	lastindexr}   r^  )	r:   r   r  rZ   r   ro   ra   jr5  s	            r=   scanzScanner.scan;  s    $$V,22AAAv\\!++/215Fvz*
aggi0!vA  vac|##r>   N)r   )r?   r@   rA   r9   r;  rC   r>   r=   r'   r'     s    GR$r>   r'   r-  r+   	)rk   rl   rn   nrq   tr  DigitTBlankSpaceWord)r  r   hrr   r   rt   r"   )r   rl   r   Kra   r   Z)rl   r   ra   r   )FAILr   rJ  r  )   r}  r  rj  )enumr   r  collectionsr   regex._regexr   __all__r8   r&   rE   rI   rK   IntFlagr(   globalsr   __members__r!   r  r   r  r   r   r   r   r   r  r   r	   r   r   r   r  r   r   r   r#   r%   SCOPED_FLAGS	frozensetascii_lettersr!  r.  r%  r  	octdigitsr  	hexdigitsr  r   r  r  r   get_code_sizeBYTES_PER_CODEBITS_PER_CODEr  r}  r   r   r4  r9  rT  r  OPCODESrw   r  r0  r  ro   r  setattrr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r   r  r  r$  r"  r#  r  r8  r  r  r   rR  rS  rL  rT  rl  rU  rV  rW  rX  r~  r  r  rY  r  rM  r  r  r  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r	  r  r  r"  r   r-  r0  r  r>  r8  r:  r9  r  r  rk  r  r  r  r  rq  rM  rO  r  r   r   r   rs  r  r   ry  r[  r   rm  r  r  r  r   r   r  r   r   r  r  r  r  r  r   r   r  r  r   ri  rq  rl  r/  rI  r  r   r  r   r'  r  r  r  r   r  r   r   r   r  r  r  r   r  r  r'  r,  r'   get_propertiesr.  r@  r  r  r3  r  r   r   prop_valuesr7  r]   val_namer5  r  r  r  dictr  r[  rC   r>   r=   <module>rb     s       # *I *>	y 		 		Y 	1 1f 	  && '8#') 1h1 	)E1L@5H	
:%	1F:TAGK 	&&&'	6==	!v''(
v''(
*+io=)D/)Yw// 
" &%%'" -1$	 	8YUG88$	 
"
	
J&n, a1j*."  AA&Rj	 	 [w}}'EArBA (0.d+;6>>LC=Rh@5 ))<4 <01;z
A6
H4$X*t"?H"
4)FV(
$	'' "!@F5
&2.2G5R4B* .	1'2 1*,4!#! !.')R$LL	%*E /557806689D?LF'P
$"** 

g.R%:Hb%'	C& C&LI 6) &S 3 6<Y 6<p} F9Y F9P,	 ,\!i !H	 HTW) Wr"m "%} %' '  - $m $& &  m  C%I C%Jy + +Z'9 Z'x2| 2<PI Pd=  B BHS&I S&j"i "2y 2hM KI KZ/y /b= Sy Sjgi gR"g "4"w "<" "B@"w @"D= - !; !!M !- 5Y 5n'f '' 'R\ \|?) ?)B%/N,*^$ ^$B #V""$
 $.$4$4$6 I &**7RH=D+tYC(D"K/N7"LLN&!+//&""=xF + %7 
						  
w	-	w	.	w	-	w	-	w	.	vt	,	vu	- 
		%				  -.    									  I	WF		r>   