+
    WBi                       a  R t#0 t R t^ RIt^ RIt^RIHt ^RIHt ^RIHt ^RI	H
t
 ^RI	Ht ]P                  '       d   ^ RIt^RIHt ]P"                  ! R]P$                  ]P&                  4      t]P"                  ! R	]P*                  ]P,                  4      t]! . RO4      t]! . RO4      tR
]P6                  R]P8                  R]P:                  R]P<                  R]P>                  R]P@                  /t!] ^ k  ! R R4      t"R# )z8Parse tokens from the lexer into nodes for the compiler.N)nodes)TemplateAssertionError)TemplateSyntaxError)describe_token)describe_token_expr)Environment_ImportInclude
_MacroCalladdsubmuldivfloordivmodc                   ^  a  ] tR t^0t o RtRnV 3R lR lltR]3V 3R lR lltV 3R lR ltRoV 3R	 lR
 llt	RpV 3R lR llt
RoV 3R lR lltRoV 3R lR lltV 3R lR ltRqV 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR  ltV 3R! lR" ltV 3R# lR$ ltV 3R% lR& ltV 3R' lR( ltV 3R) lR* ltV 3R+ lR, ltV 3R- lR. ltV 3R/ lR0 ltV 3R1 lR2 ltV 3R3 lR4 lt]P@                  RrV 3R5 lR6 ll4       t!]P@                  RsV 3R7 lR8 ll4       t!RsV 3R9 lR: llt!RtV 3R; lR< llt"V 3R= lR> lt#V 3R? lR@ lt$V 3RA lRB lt%V 3RC lRD lt&V 3RE lRF lt'V 3RG lRH lt(V 3RI lRJ lt)V 3RK lRL lt*V 3RM lRN lt+RtV 3RO lRP llt,RqV 3RQ lRR llt-RuV 3RS lRT llt.V 3RU lRV lt/V 3RW lRX lt0V 3RY lRZ lt1V 3R[ lR\ lt2V 3R] lR^ lt3V 3R_ lR` lt4V 3Ra lRb lt5V 3Rc lRd lt6RqV 3Re lRf llt7V 3Rg lRh lt8RoV 3Ri lRj llt9V 3Rk lRl lt:Rmt;V t<R# )vParserz}This is the central parsing class Jinja uses.  It's passed to
extensions and can be used to parse expressions or statements.
Nc                   < V ^8  d   QhRRRS[ RS[P                  S[ ,          RS[P                  S[ ,          RS[P                  S[ ,          RR/# )	   environmentr   sourcenamefilenamestatereturnN)strtOptional)format__classdict__s   "2/usr/lib/python3.14/site-packages/jinja2/parser.py__annotate__Parser.__annotate__5   s_     > >"> > jjo	>
 **S/> zz#> 
>    c                $   Wn         VP                  W#WE4      V n        W0n        W@n        R V n        / V n        VP                  4        F/  pVP                   F  pVP                  V P                  V&   K  	  K1  	  ^ V n
        . V n        . V n        R# )FN)r   	_tokenizestreamr   r   closed
extensionsiter_extensionstagsparse_last_identifier
_tag_stack_end_token_stack)selfr   r   r   r   r   	extensiontags   &&&&&&  r   __init__Parser.__init__5   s     '!++F(J	   	 %446I ~~'0$ & 7 !"');=r"   c                x   < V ^8  d   QhRS[ RS[P                  S[,          RS[P                  S[,          RR/# )r   msglinenoexcr   te.NoReturn)r   r   r   intTyper   )r   r   s   "r   r    r!   L   sE     9 99 

39 VV'(	9
 
9r"   c                    Vf!   V P                   P                  P                  pV! WV P                  V P                  4      h)zConvenience method that raises `exc` with the message, passed
line number or last line number as well as the current name and
filename.
)r%   currentr5   r   r   )r.   r4   r5   r6   s   &&&&r   failParser.failL   s5     >[[((//F#tyy$--88r"   c                   < V ^8  d   QhRS[ P                  S[,          RS[ P                  S[ P                  S[R3,          ,          RS[ P                  S[,          RR/# )r   r   end_token_stack.r5   r   r7   )r   r   r   ListTupler8   )r   r   s   "r   r    r!   Z   sY     &- &-jjo&- S 12&- 

3	&-
 
&-r"   c           
     6   \        4       pV F"  pVP                  \        \        V4      4       K$  	  V'       d6   R P	                  \        \
        \        \        VR	,          4      4      4      pMRpVf   R.pMRV: R2.pV'       d6   Ve   W9   d   VP                  RV R24       MVP                  RV R24       V P                  '       d(   VP                  RV P                  R	,          : R24       V P                  RP	                  V4      V4       R# )
z or NzUnexpected end of template.zEncountered unknown tag .z\You probably made a nesting mistake. Jinja is expecting this tag, but currently looking for z*Jinja was looking for the following tags: z/The innermost block that needs to be closed is  )	setupdatemapr   joinreprappendr,   r<   )r.   r   r?   r5   expectedexprscurrently_lookingmessages   &&&&    r   _fail_ut_eofParser._fail_ut_eofZ   s     #u$EOOC 3U;< %17D#1?23FGH2 !%<45G1$;<GD$422C1DAG
 @AR@SSTU ???NNOOB'*!-
 			#((7#V,r"   c                N   < V ^8  d   QhRS[ RS[P                  S[,          RR/# )r   r   r5   r   r7   )r   r   r   r8   )r   r   s   "r   r    r!      s-     ? ??!"C?	?r"   c                >    V P                  WP                  V4       R# )zCalled if the parser encounters an unknown tag.  Tries to fail
with a human readable error message that could help to identify
the problem.
N)rP   r-   )r.   r   r5   s   &&&r   fail_unknown_tagParser.fail_unknown_tag   s     	$ 5 5v>r"   c                   < V ^8  d   QhRS[ P                  S[ P                  S[R3,          ,          RS[ P                  S[,          RR/# )r   
end_tokens.r5   r   r7   )r   r   rA   r   r8   )r   r   s   "r   r    r!      sG     	/ 	/JJqwwsCx01	/ 

3	/ 
		/r"   c                ~    \        V P                  4      pVe   VP                  V4       V P                  RW24       R# )z9Like fail_unknown_tag but for end of template situations.N)listr-   rK   rP   )r.   rW   r5   stacks   &&& r   fail_eofParser.fail_eof   s6     T**+!LL$$.r"   c                r   < V ^8  d   QhRS[ P                  S[ P                  S[R3,          ,          RS[/# )r   extra_end_rules.r   )r   r   rA   r   bool)r   r   s   "r   r    r!      s3       zz!''#s(*;<	r"   c                    V P                   P                  P                  R9   d   R# Ve&   V P                   P                  P                  V4      # R# )zAre we at the end of a tuple?TF)variable_end	block_endrparen)r%   r;   typetest_any)r.   r^   s   &&r   is_tuple_endParser.is_tuple_end   sD     ;;##'NN(;;&&//@@r"   c                ^   < V ^8  d   QhRS[ P                  S[,          RS[P                  /# )r   r5   r   )r   r   r8   r   InternalName)r   r   s   "r   r    r!      s)      ajjo ASAS r"   c                    V ;P                   ^,          un         \        P                  \        P                  4      p\        P
                  P                  VRV P                    2VR7       V# )zDReturn a new free identifier as :class:`~jinja2.nodes.InternalName`.fir5   )r+   object__new__r   ri   Noder1   )r.   r5   rvs   && r   free_identifierParser.free_identifier   sS    "^^E../

B"T%:%:$; <VL	r"   c                   < V ^8  d   QhRS[ P                  S[P                  S[ P                  S[P                  ,          3,          /# r   r   )r   Unionr   ro   r@   )r   r   s   "r   r    r!      s3     & &QVVEJJ5G)G!H &r"   c                   V P                   P                  pVP                  R8w  d   V P                  RVP                  4       V P
                  P                  VP                  4       Rp VP                  \        9   dX   \        V RV P                   P                  P                   24      pV! 4       V'       d   V P
                  P                  4        # # VP                  R8X  d4   V P                  4       V'       d   V P
                  P                  4        # # VP                  R8X  d4   V P                  4       V'       d   V P
                  P                  4        # # V P                  P                  VP                  4      pVe,   V! V 4      V'       d   V P
                  P                  4        # # V P
                  P                  4        RpV P                  VP                  VP                  4       V'       d   V P
                  P                  4        R# R#   T'       d   T P
                  P                  4        i i ; i)	zParse a single statement.r   ztag name expectedTparse_callfilterNF)r%   r;   rd   r<   r5   r,   rK   value_statement_keywordsgetattrpopparse_call_blockparse_filter_blockr'   getrT   )r.   tokenpop_tagfexts   &    r   parse_statementParser.parse_statement   s   ##::II)5<<8u{{+	&{{11DF4;;+>+>+D+D*E"FGs  ##%  {{f$,,. ##%  {{h&..0 ##%  //%%ekk2C4y ##% 	 OO!G!!%++u||<##% w##% s&   ,AH  H  H  0H 4AH %Ic                   < V ^8  d   QhRS[ P                  S[R3,          RS[RS[ P                  S[P                  ,          /# )r   rW   .drop_needler   )r   rA   r   r_   r@   r   ro   )r   r   s   "r   r    r!      s?      ''#s(+:>	


	r"   c                :   V P                   P                  R4       V P                   P                  R4       V P                  V4      pV P                   P                  P
                  R8X  d   V P                  V4       V'       d   \        V P                   4       V# )a  Parse multiple statements into a list until one of the end tokens
is reached.  This is used to parse the body of statements as it also
parses template data if appropriate.  The parser checks first if the
current token is a colon and skips it if there is one.  Then it checks
for the block end and parses until if one of the `end_tokens` is
reached.  Per default the active token in the stream at the end of
the call is the matched end token.  If this is not wanted `drop_needle`
can be set to `True` and the end token is removed.
colonrb   eof)r%   skip_ifexpectsubparser;   rd   r[   next)r.   rW   r   results   &&& r   parse_statementsParser.parse_statements   sr     	G$ 	;'z* ;;##u,MM*%r"   c                r   < V ^8  d   QhRS[ P                  S[P                  S[P                  3,          /# rt   )r   ru   r   AssignAssignBlock)r   r   s   "r   r    r!      s/     	K 	K1775<<1B1B#BC 	Kr"   c                n   \        V P                  4      P                  pV P                  RR7      pV P                  P	                  R4      '       d)   V P                  4       p\        P                  ! W#VR7      # V P                  R4      pV P                  RRR7      p\        P                  ! W$WQR7      # )zParse an assign statement.Twith_namespaceassignrl   Nr   )zname:endset)r   r%   r5   parse_assign_targetr   parse_tupler   r   parse_filterr   r   )r.   r5   targetexprfilter_nodebodys   &     r   	parse_setParser.parse_set   s    dkk")))))>;;x((##%D<<V<<''-$$%54$H  dJJr"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   For)r   r   s   "r   r    r!      s     T T599 Tr"   c           
     2   V P                   P                  R4      P                  pV P                  RR7      pV P                   P                  R4       V P	                  RRR7      pRpV P                   P                  R4      '       d   V P                  4       pV P                   P                  R4      pV P                  R4      p\        V P                   4      P                  R	8X  d   . pMV P                  RR
R7      p\        P                  ! W#WgWEVR7      # )zParse a for loop.zname:forname:in)r^   Fname:recursive)with_condexprr^   Nname:ifendforTr   rl   )r   )r   )name:endfor	name:else)r   )r%   r   r5   r   r   r   parse_expressionr   r   rz   r   r   )r.   r5   r   itertest	recursiver   else_s   &       r   	parse_forParser.parse_for   s    ##J/66)),)G9%1D   
 ;;y))((*DKK''(89	$$%AB""h.E))*:)MEyytDFSSr"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   If)r   r   s   "r   r    r!      s      %(( r"   c                P   \         P                  ! V P                  P                  R4      P                  R7      ;r V P                  RR7      Vn        V P                  R	4      Vn        . Vn	        . Vn
        \        V P                  4      pVP                  R4      '       dS   \         P                  ! V P                  P                  P                  R7      pVP                  P                  V4       K  VP                  R4      '       d   V P                  R
RR7      Vn
         V# )zParse an if construct.r   rl   TFr   	name:elifr   r   )r   r   
name:endif)r   )r   r   r%   r   r5   r   r   r   r   elif_r   r   r;   rK   )r.   noder   r   s   &   r   parse_ifParser.parse_if   s    (:(:9(E(L(LMM((u(=DI--.VWDIDJDJ%Ezz+&&xxt{{':':'A'AB##D)K((#44_RV4Wr"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   With)r   r   s   "r   r    r!     s      EJJ r"   c                *   \         P                  ! \        V P                  4      P                  R 7      p. p. pV P                  P
                  P                  R8w  d   V'       d   V P                  P                  R4       V P                  4       pVP                  R4       VP                  V4       V P                  P                  R4       VP                  V P                  4       4       K  W!n        W1n        V P                  RRR7      Vn        V# )rl   rb   commaparamr   Tr   )zname:endwith)r   r   r   r%   r5   r;   rd   r   r   set_ctxrK   r   targetsvaluesr   r   )r.   r   r   r   r   s   &    r   
parse_withParser.parse_with  s    zzdkk!2!9!9:&(%'kk!!&&+5""7+--/FNN7#NN6"KKx(MM$//12))*;)N	r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   Scope)r   r   s   "r   r    r!   "  s     # #%++ #r"   c                   \         P                  ! \        V P                  4      P                  R 7      p\         P
                  ! RV P                  4       4      .Vn        V P                  RRR7      Vn	        \         P                  ! V.4      # )rl   
autoescapeTr   )zname:endautoescape)r   ScopedEvalContextModifierr   r%   r5   Keywordr   optionsr   r   r   r.   r   s   & r   parse_autoescapeParser.parse_autoescape"  sh    ..d4;;6G6N6NOlD4I4I4KLM))*At)T	{{D6""r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   Block)r   r   s   "r   r    r!   (  s      U[[ r"   c                   \         P                  ! \        V P                  4      P                  R 7      pV P                  P                  R4      P                  Vn        V P                  P                  R4      Vn	        V P                  P                  R4      Vn
        V P                  P                  P                  R8X  d   V P                  R4       V P                  RRR7      Vn        VP                  '       d   VP                   F  p\!        V\         P"                  4      '       dQ   \$        ;QJ d&    R VP                    4       F  '       g   K   RM	  R	M! R VP                    4       4      '       g   Ks  V P                  R
4       K  	  V P                  P                  RVP                  ,           4       V# )rl   r   zname:scopedzname:requiredr   zpBlock names in Jinja have to be valid Python identifiers and may not contain hyphens, use an underscore instead.Tr   c              3      "   T FK  p\        V\        P                  4      '       * ;'       g     VP                  P	                  4       '       * x  KM  	  R # 5iN)
isinstancer   TemplateDatadataisspace).0output_nodes   & r   	<genexpr>%Parser.parse_block.<locals>.<genexpr>>  sN      B (7 #;0B0BCC 6 6&++33556'6s
   *A(AFz7Required blocks can only contain comments or whitespacezname:)zname:endblock)r   r   r   r%   r5   r   rz   r   r   scopedrequiredr;   rd   r<   r   r   r   Outputany)r.   r   	body_nodes   &  r   parse_blockParser.parse_block(  sE   {{$t{{"3":":;KK&&v.44	kk))-8++O<
 ;;##u,II?
 ))*<$)O	
 ===!YY	!)U\\::cc B (1Bccc B (1B ? ?
 IIWX ' 	Gdii/0r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   Extends)r   r   s   "r   r    r!   H  s      u}} r"   c                    \         P                  ! \        V P                  4      P                  R 7      pV P                  4       Vn        V# rl   )r   r   r   r%   r5   r   templater   s   & r   parse_extendsParser.parse_extendsH  s4    }}D$5$<$<=--/r"   c                ,   < V ^8  d   QhRS[ RS[RS[ /# )r   r   defaultr   )r   r_   )r   r   s   "r   r    r!   M  s%     
 
"
-1
	
r"   c                N   V P                   P                  P                  R R4      '       ds   V P                   P                  4       P	                  R4      '       dD   \        V P                   4      P                  R8H  Vn        V P                   P                  4        V# W!n        V# )z	name:withzname:withoutname:contextwith)	r%   r;   re   lookr   r   rz   with_contextskip)r.   r   r   s   &&&r   parse_import_contextParser.parse_import_contextM  s     ;;''
 
kk %%n55 $T[[ 1 7 76 ADKK  !(r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   Include)r   r   s   "r   r    r!   Y  s     
5 
5u}} 
5r"   c                   \         P                  ! \        V P                  4      P                  R 7      pV P                  4       Vn        V P                  P                  P                  R4      '       dS   V P                  P                  4       P                  R4      '       d$   RVn
        V P                  P                  ^4       MRVn
        V P                  VR4      # )rl   zname:ignorezname:missingTF)r   r   r   r%   r5   r   r   r;   r   r   ignore_missingr   r   r   s   & r   parse_includeParser.parse_includeY  s    }}D$5$<$<=--/;;##M22t{{7G7G7I7N7N8
 8
 #'DKKQ"'D((t44r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   Import)r   r   s   "r   r    r!   e  s     6 6ell 6r"   c                0   \         P                  ! \        V P                  4      P                  R 7      pV P                  4       Vn        V P                  P                  R4       V P                  RR7      P                  Vn
        V P                  VR4      # )rl   name:asT	name_onlyF)r   r   r   r%   r5   r   r   r   r   r   r   r   r   s   & r   parse_importParser.parse_importe  so    ||4#4#;#;<--/9%...>CC((u55r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   
FromImport)r   r   s   "r   r    r!   l  s     ( (E,, (r"   c                R  a a \         P                  ! \        S P                  4      P                  R 7      oS P                  4       Sn        S P                  P                  R4       . Sn        R VV 3R llp SP                  '       d   S P                  P                  R4       S P                  P                  P                  R8X  Ed%   V! 4       '       d   EM3S P                  RR7      pVP                  P                  R4      '       d#   S P                  R	VP                  \        R
7       S P                  P!                  R4      '       dE   S P                  RR7      pSP                  P#                  VP                  VP                  34       M%SP                  P#                  VP                  4       V! 4       '       g&   S P                  P                  P                  R8w  d   M!EKx  S P                  P                  R4       EK  \%        SR4      '       g   RSn        S# )rl   zname:importc                $    V ^8  d   QhR\         /# rt   r_   )r   s   "r   r    'Parser.parse_from.<locals>.__annotate__r  s     	 	t 	r"   c                  6  < SP                   P                  P                  R9   ds   SP                   P                  4       P	                  R4      '       dD   \        SP                   4      P                  R 8H  S n        SP                   P                  4        R# R# )r   r   TF>   r   without)r%   r;   rz   r   r   r   r   r   )r   r.   s   r   parse_context(Parser.parse_from.<locals>.parse_contextr  sr    {{""(( -  ++""$)).99$($5$;$;v$E!  "r"   Tr   r   r  _z4names starting with an underline can not be imported)r6   r  r   F)r   r  r   r%   r5   r   r   r   namesr;   rd   r   r   
startswithr<   r   r   rK   hasattrr   )r.   r  r   aliasr   s   f   @r   
parse_fromParser.parse_froml  s   tDKK'8'?'?@--/=)
	 	 zzz""7+{{""''61 ??11D1A;;))#..IIN2  
 ;;&&y11 44t4DEJJ%%v{{EJJ&?@JJ%%fkk2 ??dkk&9&9&>&>'&I 'J ""6*t^,, %Dr"   c                $   < V ^8  d   QhRS[ RR/# )r   r   r   N)r	   )r   r   s   "r   r    r!     s     % %J %4 %r"   c                B   . ;q!n         . ;q1n        V P                  P                  R 4       V P                  P                  P
                  R8w  d   V'       d   V P                  P                  R4       V P                  RR7      pVP                  R4       V P                  P                  R4      '       d!   VP                  V P                  4       4       MV'       d   V P                  R4       VP                  V4       K  V P                  P                  R4       R# )	lparenrc   r   Tr  r   r   z-non-default argument follows default argumentN)argsdefaultsr%   r   r;   rd   r   r   r   rK   r   r<   )r.   r   r  r  args   &&   r   parse_signatureParser.parse_signature  s    y#%%=8$kk!!&&(2""7+**T*:CKK {{""8,, 5 5 78		IJKK8$r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   	CallBlock)r   r   s   "r   r    r!     s      %// r"   c                   \         P                  ! \        V P                  4      P                  R 7      pV P                  P
                  P                  R8X  d   V P                  V4       M. Vn        . Vn	        V P                  4       p\        V\         P                  4      '       g   V P                  RVP                  4       W!n        V P                  RRR7      Vn        V# )rl   r  zexpected callTr   )zname:endcall)r   r   r   r%   r5   r;   rd   r  r  r  r   r   Callr<   rx   r   r   )r.   r   	call_nodes   &  r   r~   Parser.parse_call_block  s    d4;;&7&>&>?;;##x/  &DIDM))+	)UZZ00IIot{{3	))*;)N	r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   FilterBlock)r   r   s   "r   r    r!     s      E$5$5 r"   c                    \         P                  ! \        V P                  4      P                  R 7      pV P                  RRR7      Vn        V P                  RRR7      Vn        V# )rl   NT)start_inliner   )zname:endfilter)	r   r&  r   r%   r5   r   ry   r   r   r   s   & r   r   Parser.parse_filter_block  sU      T[[(9(@(@A''4'@))*=4)P	r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   Macro)r   r   s   "r   r    r!     s      U[[ r"   c                   \         P                  ! \        V P                  4      P                  R 7      pV P                  RR7      P                  Vn        V P                  V4       V P                  RRR7      Vn	        V# )rl   Tr  r   )zname:endmacro)
r   r+  r   r%   r5   r   r   r  r   r   r   s   & r   parse_macroParser.parse_macro  se    {{$t{{"3":":;,,t,<AA	T"))*<$)O	r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   r   )r   r   s   "r   r    r!     s      U\\ r"   c                v   \         P                  ! \        V P                  4      P                  R 7      p. Vn         V P                  P
                  P                  R8w  dY   VP                   '       d   V P                  P                  R4       VP                   P                  V P                  4       4       K}  V# )rl   rb   r   )
r   r   r   r%   r5   r;   rd   r   rK   r   r   s   & r   parse_printParser.parse_print  sy    ||4#4#;#;<
kk!!&&+5zzz""7+JJd3356r"   c                >   < V ^8  d   QhRS[ RRRS[P                  /# )r   
with_tupler  zte.Literal[True]r   )r_   r   Name)r   r   s   "r   r    r!     s)      1C	r"   c                    R # r    )r.   r4  r  s   &&&r   r   Parser.parse_assign_target  s     r"   c                   < V ^8  d   QhRS[ RS[ RS[P                  S[P                  S[R3,          ,          RS[ RS[P
                  S[P                  S[P                  S[P                  3,          /# r   r4  r  r^   .r   r   	r_   r   r   rA   r   ru   r   NSRefr5  )r   r   s   "r   r    r!     so     < << < AGGCH$56	<
 < 
ejj%++5	6<r"   c                    R # r   r7  )r.   r4  r  r^   r   s   &&&&&r   r   r8    s     9<r"   c                   < V ^8  d   QhRS[ RS[ RS[P                  S[P                  S[R3,          ,          RS[ RS[P
                  S[P                  S[P                  S[P                  3,          /# r:  r;  )r   r   s   "r   r    r!     so     % %% % AGGCH$56	%
 % 
ejj%++5	6%r"   c                   V'       dJ   V P                   P                  R4      p\        P                  ! VP                  RVP
                  R7      pM@V'       d   V P                  RVVR7      pMV P                  VR7      pVP                  R4       VP                  4       '       gB   V P                  R\        V4      P                  P                  4       : 2VP
                  4       V# )a  Parse an assignment target.  As Jinja allows assignments to
tuples, this function can parse all allowed assignment targets.  Per
default assignments to tuples are parsed, that can be disable however
by setting `with_tuple` to `False`.  If only assignments to names are
wanted `name_only` can be set to `True`.  The `extra_end_rules`
parameter is forwarded to the tuple parsing function.  If
`with_namespace` is enabled, a namespace assignment may be parsed.
r   storerl   T)
simplifiedr^   r   r   zcan't assign to )r%   r   r   r5  rz   r5   r   parse_primaryr   
can_assignr<   rd   __name__lower)r.   r4  r  r^   r   r   r   s   &&&&&  r   r   r8    s    " KK&&v.EZZWU\\JF))#$3#1 *  ++>+JNN7#  ""II"4<#8#8#>#>#@"CDfmm r"   c                :   < V ^8  d   QhRS[ RS[P                  /# )r   r   r   r_   r   Expr)r   r   s   "r   r    r!      s      d ejj r"   c                R    V'       d   V P                  4       # V P                  4       # )zParse an expression.  Per default all expressions are parsed, if
the optional `with_condexpr` parameter is set to `False` conditional
expressions are not parsed.
)parse_condexprparse_orr.   r   s   &&r   r   Parser.parse_expression   s"    
 &&((}}r"   c                4   < V ^8  d   QhRS[ P                  /# rt   r   rH  )r   r   s   "r   r    r!   	  s      

 r"   c                   V P                   P                  P                  pV P                  4       pV P                   P	                  R 4      '       d   V P                  4       pV P                   P	                  R4      '       d   V P                  4       pMRp\        P                  ! W2WAR7      pV P                   P                  P                  pK  V# )r   r   Nrl   )r%   r;   r5   rK  r   rJ  r   CondExpr)r.   r5   expr1expr2expr3s   &    r   rJ  Parser.parse_condexpr	  s    $$++ kk!!),,MMOE{{"";//++-NN5FE[[((//Fr"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!     s      %** r"   c                <   V P                   P                  P                  pV P                  4       pV P                   P	                  R 4      '       dK   V P                  4       p\
        P                  ! W#VR7      pV P                   P                  P                  pKk  V# )name:orrl   )r%   r;   r5   	parse_andr   r   Orr.   r5   leftrights   &   r   rK  Parser.parse_or  sn    $$++~~kk!!),,NN$E88D7D[[((//Fr"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!   !  s      5:: r"   c                <   V P                   P                  P                  pV P                  4       pV P                   P	                  R 4      '       dK   V P                  4       p\
        P                  ! W#VR7      pV P                   P                  P                  pKk  V# )name:andrl   )r%   r;   r5   	parse_notr   r   Andr[  s   &   r   rY  Parser.parse_and!  sn    $$++~~kk!!*--NN$E99T8D[[((//Fr"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!   *  s     $ $5:: $r"   c                   V P                   P                  P                  R 4      '       dF   \        V P                   4      P                  p\
        P                  ! V P                  4       VR7      # V P                  4       # )name:notrl   )	r%   r;   r   r   r5   r   Notrb  parse_compare)r.   r5   s   & r   rb  Parser.parse_not*  sX    ;;##J//$++&--F99T^^-f==!!##r"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!   0  s     7 7uzz 7r"   c                   V P                   P                  P                  pV P                  4       p. p V P                   P                  P                  pV\
        9   dK   \        V P                   4       VP                  \        P                  ! W@P                  4       4      4       EMV P                   P                  R4      '       d6   VP                  \        P                  ! RV P                  4       4      4       MV P                   P                  P                  R4      '       d   V P                   P                  4       P                  R4      '       dQ   V P                   P                  ^4       VP                  \        P                  ! RV P                  4       4      4       MM#V P                   P                  P                  pEK  V'       g   V# \        P                  ! W#VR7      # )Tr   inrg  notinrl   )r%   r;   r5   parse_math1rd   _compare_operatorsr   rK   r   Operandr   r   r   r   Compare)r.   r5   r   ops
token_types   &    r   ri  Parser.parse_compare0  sL   $$++!,,11J//T[[!

5==5E5E5GHI$$Y//

5==t/?/?/ABC$$))*55$++:J:J:L:Q:Q; ;   #

5==$2B2B2DEF[[((//FK}}Tv66r"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!   G       	 	UZZ 	r"   c                   V P                   P                  P                  pV P                  4       pV P                   P                  P                  R9   d}   \
        V P                   P                  P                  ,          p\        V P                   4       V P                  4       pV! W$VR7      pV P                   P                  P                  pK  V# )r
   rl   )r
   r   )r%   r;   r5   parse_concatrd   _math_nodesr   r.   r5   r\  clsr]  s   &    r   ro  Parser.parse_math1G  s    $$++  "kk!!&&.8dkk11667C%%'Et62D[[((//Fr"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!   R  s     1 1ejj 1r"   c                z   V P                   P                  P                  pV P                  4       .pV P                   P                  P                  R 8X  d7   \        V P                   4       VP                  V P                  4       4       K[  \        V4      ^8X  d
   V^ ,          # \        P                  ! W!R7      # )tilderl   )
r%   r;   r5   parse_math2rd   r   rK   lenr   Concat)r.   r5   r  s   &  r   ry  Parser.parse_concatR  s    $$++  "#kk!!&&'1KK((*+t9>7N||D00r"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!   \  rw  r"   c                   V P                   P                  P                  pV P                  4       pV P                   P                  P                  R9   d}   \
        V P                   P                  P                  ,          p\        V P                   4       V P                  4       pV! W$VR7      pV P                   P                  P                  pK  V# )r   rl   )r   r   r   r   )r%   r;   r5   	parse_powrd   rz  r   r{  s   &    r   r  Parser.parse_math2\  s    $$++~~kk!!&&*KKdkk11667CNN$Et62D[[((//Fr"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!   g  s      5:: r"   c                n   V P                   P                  P                  pV P                  4       pV P                   P                  P                  R 8X  d`   \        V P                   4       V P                  4       p\        P                  ! W#VR7      pV P                   P                  P                  pK  V# )powrl   )r%   r;   r5   parse_unaryrd   r   r   Powr[  s   &   r   r  Parser.parse_powg  s    $$++!kk!!&&%/$$&E99T8D[[((//Fr"   c                :   < V ^8  d   QhRS[ RS[P                  /# )r   with_filterr   rG  )r   r   s   "r   r    r!   q  s      t uzz r"   c                
   V P                   P                  P                  pV P                   P                  P                  pVR 8X  d>   \	        V P                   4       \
        P                  ! V P                  R4      VR7      pMTVR8X  d>   \	        V P                   4       \
        P                  ! V P                  R4      VR7      pMV P                  4       pV P                  V4      pV'       d   V P                  V4      pV# )r   Frl   r
   )r%   r;   rd   r5   r   r   Negr  PosrB  parse_postfixparse_filter_expr)r.   r  rt  r5   r   s   &&   r   r  Parser.parse_unaryq  s    [[((--
$$++ 99T--e4VDD5 99T--e4VDD%%'D!!$'))$/Dr"   c                :   < V ^8  d   QhRS[ RS[P                  /# )r   r   r   rG  )r   r   s   "r   r    r!     s     ( (D (UZZ (r"   c                   V P                   P                  pVP                  R8X  EdS   \        V P                   4       VP                  R9   d2   \
        P                  ! VP                  R9   VP                  R7      pV# VP                  R9   d%   \
        P                  ! RVP                  R7      pV# V'       d   V P                   P                  P                  R8X  dj   \        V P                   4       V P                   P                  R4      p\
        P                  ! VP                  VP                  VP                  R7      pV# \
        P                  ! VP                  RVP                  R7      p V# VP                  R8X  d   \        V P                   4       VP                  .pVP                  pV P                   P                  P                  R8X  dG   VP                  V P                   P                  P                  4       \        V P                   4       Kk  \
        P                  ! RP                  V4      VR7      pV# VP                  R9   dD   \        V P                   4       \
        P                  ! VP                  VP                  R7      pV# VP                  R8X  dE   \        V P                   4       V P                  R	R
7      pV P                   P                  R4       V# VP                  R8X  d   V P                  4       pV# VP                  R8X  d   V P                  4       pV# V P!                  R\#        V4      : 2VP                  4       X# )zxParse a name or literal value. If ``with_namespace`` is enabled, also
parse namespace attr refs, for use in assignments.r   rl   Ndotloadstring r  T)explicit_parenthesesrc   lbracketlbracezunexpected )truefalseTrueFalse)r  r  )noneNone)integerfloat)r%   r;   rd   r   rz   r   Constr5   r   r<  r5  rK   rI   r   
parse_list
parse_dictr<   r   )r.   r   r   r   attrbufr5   s   &&     r   rB  Parser.parse_primary  s    ##::{{@@{{5;;2B#B5<<X@ ?  00{{4=< ;  DKK$7$7$<$<$E T[[!{{))&1{{5;;

5<<P0 - zz%++vellK, + ZZ8#;;-C\\F++%%**h6

4;;..445T[[!;;rwws|F;D  ZZ//;;u{{5<<@D  ZZ8####>DKKx(  ZZ:%??$D
 	 ZZ8#??$D  IIN5$9#<=u||Lr"   c                   < V ^8  d   QhRS[ RS[ RS[P                  S[P                  S[R3,          ,          RS[ RS[ RS[P
                  S[P                  S[P                  3,          /# )r   rA  r   r^   .r  r   r   )r_   r   r   rA   r   ru   r   rH  )r   r   s   "r   r    r!     s{     C8 C8C8 C8 AGGCH$56	C8
 #C8 C8 
ejj(	)C8r"   c                  a aa S P                   P                  P                  pV'       d   R V V3R llpM
R V V3R llp. pRp	 V'       d   S P                   P                  R4       S P	                  V4      '       d   MaVP                  V! 4       4       S P                   P                  P                  R8X  d   Rp	MM"S P                   P                  P                  pK  V	'       gL   V'       d
   V^ ,          # V'       g3   S P                  R\        S P                   P                  4      : 24       \        P                  ! VR	VR
7      # )ao  Works like `parse_expression` but if multiple expressions are
delimited by a comma a :class:`~jinja2.nodes.Tuple` node is created.
This method could also return a regular expression instead of a tuple
if no commas where found.

The default parsing mode is a full tuple.  If `simplified` is `True`
only names and literals are parsed; ``with_namespace`` allows namespace
attr refs as well. The `no_condexpr` parameter is forwarded to
:meth:`parse_expression`.

Because tuples do not require delimiters and may end in a bogus comma
an extra hint is needed that marks the end of a tuple.  For example
for loops support tuples between `for` and `in`.  In that case the
`extra_end_rules` is set to ``['name:in']``.

`explicit_parentheses` is true if the parsing was triggered by an
expression in parentheses.  This is used to figure out if an empty
tuple is a valid expression or not.
c                8    V ^8  d   QhR\         P                  /# rt   rO  )r   s   "r   r    (Parser.parse_tuple.<locals>.__annotate__  s     I I5:: Ir"   c                  (   < S P                  SR 7      # )r   )rB  )r.   r   s   r   r*   !Parser.parse_tuple.<locals>.parse  s    )))HHr"   c                8    V ^8  d   QhR\         P                  /# rt   rO  )r   s   "r   r    r    s     J J5:: Jr"   c                  (   < S P                  SR 7      # )r   )r   rL  s   r   r*   r    s    ,,=,IIr"   FTr   zExpected an expression, got r  rl   )r%   r;   r5   r   rf   rK   rd   r<   r   r   rA   )
r.   rA  r   r^   r  r   r5   r*   r  is_tuples
   f&f&&f    r   r   Parser.parse_tuple  s   6 $$++I I
J J $&""7+  11KK {{""''72[[((//FAw (		*4;;+>+>?BD
 {{477r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   r@   )r   r   s   "r   r    r!     s     
6 
6EJJ 
6r"   c                   V P                   P                  R 4      p. pV P                   P                  P                  R8w  dk   V'       d   V P                   P                  R4       V P                   P                  P                  R8X  d   M!VP	                  V P                  4       4       K  V P                   P                  R4       \        P                  ! W!P                  R7      # )r  rbracketr   rl   )	r%   r   r;   rd   rK   r   r   r@   r5   )r.   r   itemss   &  r   r  Parser.parse_list  s    "":.$&kk!!&&*4""7+{{""'':5LL..01:&zz%55r"   c                4   < V ^8  d   QhRS[ P                  /# rt   )r   Dict)r   r   s   "r   r    r!     s     6 6EJJ 6r"   c                l   V P                   P                  R 4      p. pV P                   P                  P                  R8w  d   V'       d   V P                   P                  R4       V P                   P                  P                  R8X  d   MnV P	                  4       pV P                   P                  R4       V P	                  4       pVP                  \        P                  ! W4VP                  R7      4       K  V P                   P                  R4       \        P                  ! W!P                  R7      # )r  rbracer   r   rl   )
r%   r   r;   rd   r   rK   r   Pairr5   r  )r.   r   r  keyrz   s   &    r   r  Parser.parse_dict  s    ""8,$&kk!!&&(2""7+{{""''83'')CKKw'))+ELLCszzBC8$zz%55r"   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# r   r   r   rO  )r   r   s   "r   r    r!     s#      %**  r"   c                     V P                   P                  P                  pVR8X  g   VR8X  d   V P                  V4      pKB  VR8X  d   V P	                  V4      pK\   V# )Tr  r  r  )r%   r;   rd   parse_subscript
parse_callr.   r   rt  s   && r   r  Parser.parse_postfix  sY    ,,11JU"jJ&>++D1 x't,r"   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# r  rO  )r   r   s   "r   r    r!     s#      ejj UZZ r"   c                0    V P                   P                  P                  pVR8X  d   V P                  V4      pK;  VR8X  d9   V P                   P                  P                  R8X  d   V P                  V4      pKz  VR8X  d   V P                  V4      pK   V# )Tpiper   isr  )r%   r;   rd   r   rz   
parse_testr  r  s   && r   r  Parser.parse_filter_expr  s    ,,11JV#((.v%$++*=*=*C*Ct*Kt, x't,r"   c                   < V ^8  d   QhRS[ P                  RS[P                  S[ P                  S[ P
                  3,          /# r  )r   rH  r   ru   GetattrGetitem)r   r   s   "r   r    r!   )  s;     A AJJA	
-	.Ar"   c                B   \        V P                  4      pVP                  R 8X  d   V P                  P                  p\        V P                  4       VP                  R8X  d.   \        P
                  ! WP                  RVP                  R7      # VP                  R8w  d   V P                  RVP                  4       \        P                  ! VP                  VP                  R7      p\        P                  ! WRVP                  R7      # VP                  R8X  d   . pV P                  P                  P                  R8w  dE   V'       d   V P                  P                  R4       VP                  V P                  4       4       Ki  V P                  P                  R4       \        V4      ^8X  d   V^ ,          pM#\        P                  ! VRVP                  R7      p\        P                  ! WRVP                  R7      # V P                  R	VP                  4       R
# )r  r   r  rl   r  zexpected name or numberr  r  r   zexpected subscript expressionN)r   r%   rd   r;   r   r  rz   r5   r<   r  r  r   rK   parse_subscribedr  rA   )r.   r   r   
attr_tokenr  r  s   &&    r   r  Parser.parse_subscript)  sx    T[[! ::,,J&(}}**F5<<  I-		3Z5F5FG++j..z7H7HIC==F5<<HH::#')D++%%**j8KK&&w/D1134KKz*4yA~1gkk$u||D==F5<<HH		15<<@r"   c                4   < V ^8  d   QhRS[ P                  /# rt   rO  )r   r   s   "r   r    r!   H  s     1 1%** 1r"   c                   V P                   P                  P                  pV P                   P                  P                  R 8X  d   \	        V P                   4       R.pMOV P                  4       pV P                   P                  P                  R 8w  d   V# \	        V P                   4       V.pV P                   P                  P                  R 8X  d   VP                  R4       MVV P                   P                  P                  R9  d!   VP                  V P                  4       4       MVP                  R4       V P                   P                  P                  R 8X  dm   \	        V P                   4       V P                   P                  P                  R9  d!   VP                  V P                  4       4       M#VP                  R4       MVP                  R4       \        P                  ! VRV/ # )r   Nr5   )r  r   )	r%   r;   r5   rd   r   r   rK   r   Slice)r.   r5   r  r   s   &   r   r  Parser.parse_subscribedH  s^   $$++ ;;##w.6D((*D{{""''726D;;##w.KK[[  %%-BBKK--/0KK;;##w.{{""''/DDD1134D!KK{{40&00r"   c                2  < V ^8  d   QhRS[ P                  S[ P                  S[P                  ,          S[ P                  S[P
                  ,          S[ P                  S[P                  ,          S[ P                  S[P                  ,          3,          /# rt   )r   rA   r@   r   rH  r   r   )r   r   s   "r   r    r!   h  sc     62 62	
	uzz	u}}	

5::	

5::	 
62r"   c                .  a a	 S P                   P                  R 4      o	. p. pRpRpRpR V V	3R llpS P                   P                  P                  R8w  Ed!   V'       dC   S P                   P                  R4       S P                   P                  P                  R8X  d   EMS P                   P                  P                  R8X  d>   T! VRJ ;'       d    VRJ 4       \	        S P                   4       S P                  4       pEMoS P                   P                  P                  R8X  d2   V! VRJ 4       \	        S P                   4       S P                  4       pEMS P                   P                  P                  R	8X  d   S P                   P                  4       P                  R
8X  d   V! VRJ 4       S P                   P                  P                  pS P                   P                  ^4       S P                  4       pVP                  \        P                  ! WxVP                  R7      4       MDT! VRJ ;'       d    VRJ ;'       d    V'       * 4       VP                  S P                  4       4       RpEKF  S P                   P                  R4       WW43# )r  NFc                (    V ^8  d   QhR\         RR/# )r   r   r   Nr
  )r   s   "r   r    ,Parser.parse_call_args.<locals>.__annotate__w  s     	W 	W 	W$ 	Wr"   c                 T   < V '       g   SP                  R SP                  4       R# R# )z+invalid syntax for function call expressionN)r<   r5   )r   r.   r   s   &r   ensure&Parser.parse_call_args.<locals>.ensurew  s    		GV r"   rc   r   r   r  r   r   rl   T)r%   r   r;   rd   r   r   r   rz   r   rK   r   r   r5   )
r.   r  kwargsdyn_args
dyn_kwargsrequire_commar  r  rz   r   s
   f        @r   parse_call_argsParser.parse_call_argsh  s    ""8,
	W 	W kk!!&&(2""7+ ;;&&++x7{{""''50x4'>>J$,>?T[[!002$$))U2zT)*T[[!!224
 KK'',,6((*//8; :-.++--33CKK$$Q' 113EMM%--5<<"PQ 8t+QQ
d0BQQ6zRKK 5 5 78 M8$X11r"   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# r  )r   rH  r"  )r   r   s   "r   r    r!     s'     Y Yuzz Yejj Yr"   c           	         V P                   P                  pV P                  4       w  r4rV\        P                  ! WWEWbP
                  R 7      # r   )r%   r;   r  r   r"  r5   )r.   r   r   r  r  r  r  s   &&     r   r  Parser.parse_call  s=     ##-1-A-A-C*hzz$f
<<XXr"   c                   < V ^8  d   QhRS[ P                  S[P                  ,          RS[RS[ P                  S[P                  ,          /# )r   r   r(  r   )r   r   r   rH  r_   )r   r   s   "r   r    r!     s?      JJuzz*:>	
EJJ	r"   c           
        V P                   P                  P                  R 8X  g
   V'       Ed   V'       g   \        V P                   4       V P                   P	                  R4      pVP
                  pV P                   P                  P                  R8X  dK   \        V P                   4       VRV P                   P	                  R4      P
                  ,           ,          pKo  V P                   P                  P                  R8X  d   V P                  4       w  rVrxM. p. pR;rx\        P                  ! WWVWxVP                  R7      pRpEKJ  V# )r  r   r  rC   r  Nrl   F)
r%   r;   rd   r   r   rz   r  r   Filterr5   )	r.   r   r(  r   r   r  r  r  r  s	   &&&      r   r   Parser.parse_filter  s     kk!!&&&0LLT[[!KK&&v.E;;D++%%**e3T[[!dkk008>>>>{{""''83595I5I5K2h
(,,<<D(u||D !Lr"   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# r  rO  )r   r   s   "r   r    r!     s#     $ $uzz $ejj $r"   c           
     b   \        V P                  4      pV P                  P                  P                  R 4      '       d   \        V P                  4       RpMRpV P                  P	                  R4      P
                  pV P                  P                  P                  R8X  dK   \        V P                  4       VRV P                  P	                  R4      P
                  ,           ,          pKo  R;rV. pV P                  P                  P                  R8X  d   V P                  4       w  rrVMV P                  P                  P                  R9   d   V P                  P                  P                  RR	R
4      '       gb   V P                  P                  P                  R4      '       d   V P                  R4       V P                  4       p	V P                  V	4      p	V	.pM. p\        P                  ! WWWVVP                  R7      pV'       d"   \        P                  ! WP                  R7      pV# )rg  TFr   r  rC   Nr  r   rX  ra  zname:isz'You cannot chain multiple tests with isrl   >   r   r  r  r  r  r  r  )r   r%   r;   r   r   rz   rd   r  re   r<   rB  r  r   Testr5   rh  )
r.   r   r   negatedr   r  r  r  r  arg_nodes
   &&        r   r  Parser.parse_test  s   T[[!;;##J//GG{{!!&)//kk!!&&%/C$++,,V4::::D $$(*;;##x/151E1E1G.D(J[[  %% *
 
 ++%%..{IzRR{{""''	22		CD))+H))(3H:DDzzh5<<
 99T,,7Dr"   c                   < V ^8  d   QhRS[ P                  S[ P                  S[R3,          ,          RS[ P                  S[P                  ,          /# )r   rW   .r   )r   r   rA   r   r@   r   ro   )r   r   s   "r   r    r!     s@     / /**QWWS#X%67/	


	/r"   c                  aa . o. oSP                   pVe   V P                  P                  V4       R VV3R llp V P                  '       Ed   V P                  P                  pVP                  R8X  d\   VP
                  '       d3   V! \        P                  ! VP
                  VP                  R7      4       \        V P                  4       K  VP                  R8X  dK   \        V P                  4       V! V P                  RR7      4       V P                  P                  R4       K  VP                  R	8X  d   V! 4        \        V P                  4       VeL   V P                  P                  P                  ! V!  '       d"   SVe   V P                  P                  4        # # V P                  4       p\        V\         4      '       d   SP#                  V4       MSP                  V4       V P                  P                  R
4       EK  \%        R4      hV! 4        Ve   V P                  P                  4        S#   Te   T P                  P                  4        i i ; i)Nc                    V ^8  d   QhRR/# )r   r   Nr7  )r   s   "r   r    %Parser.subparse.<locals>.__annotate__  s     	# 	#D 	#r"   c                     < S'       dG   S^ ,          P                   p SP                  \        P                  ! SR,          V R7      4       SR R# R# )    :NNNrl   N)r5   rK   r   r   )r5   r   data_buffers    r   
flush_data#Parser.subparse.<locals>.flush_data  s<    $Q..ELLQGHN r"   r   rl   variable_beginTr   ra   block_beginrb   zinternal parsing error)rK   r-   r%   r;   rd   rz   r   r   r5   r   r   r   re   r}   r   r   rY   extendAssertionError)r.   rW   add_datar  r   rp   r   r  s   &&    @@r   r   Parser.subparse  s    $&*,%%!!!((4	# 	#	,+++++::'{{{ !3!3EKK!UV%ZZ#33%T--D-ABKK&&~6ZZ=0L%!-$++2E2E2N2N#3 3  $ %%%))+ & --/B!"d++BBKK&&{3()ABBL%%%))+ %%%))+ &s%   I 8I 	C>I I )A9I !I#c                4   < V ^8  d   QhRS[ P                  /# rt   )r   Template)r   r   s   "r   r    r!     s      u~~ r"   c                    \         P                  ! V P                  4       ^R7      pVP                  V P                  4       V# )z0Parse the whole template into a `Template` node.rl   )r   r  r   set_environmentr   )r.   r   s   & r   r*   Parser.parse  s1    :t//0r"   )	r-   r+   r,   r&   r   r'   r   r   r%   )NNNr   )NN)F)..)TFNF)T)FTNFF)=rD  
__module____qualname____firstlineno____doc__r1   r   r<   rP   rT   r[   rf   rq   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r~   r   r-  r1  typingoverloadr   r   rJ  rK  rY  rb  ri  ro  ry  r  r  r  rB  r   r  r  r  r  r  r  r  r  r   r  r   r*   __static_attributes____classdictcell__)r   s   @r   r   r   0   s^    > >4 #'+>	9 9&- &-P? ?	/ 	/  & &: :	K 	KT T& $ "# # @ 

 

5 
56 6( (T% %      __   __< < <% %N    $ $7 7.	 	1 1	 	  $( (TC8 C8J
6 
66 6  A A>1 1@62 62pY Y .$ $L/ /b r"   r   c                    V ^8  d   Qh/ ^ \         9   dD   \        P                  \        \        P                  \
        P                  ,          3,          ;R&   # )r   rz  )__conditional_annotations__r   r  r   r9   r   rH  )r   s   "r   r    r       s;     > >J QVVC

++, K ?r"   )forifblockextendsprintmacroincludefromimportrF   r   r   )eqneltlteqgtgteq)$r  r  r  r   r  r   
exceptionsr   r   lexerr   r   TYPE_CHECKINGtyping_extensionster   r   TypeVarr   r   r   r+  r   r	   	frozensetr{   rp  AddSubMulDivFloorDivModrz  r   r    )r  s   @r   <module>r0     s    >    . + ! &???"(+U\\5==IYY|U[[%//B
   GH  
599	599	599	599	5990 i ir"   