|ǎP{4UdZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ej r ddl Z dd lmZejd ejejZejd ejejZegd Zegd ZejejejejejejdZ ej!e"ej#ej$fe%d<GddZ&dS)z8Parse tokens from the lexer into nodes for the compiler.N)nodes)TemplateAssertionError)TemplateSyntaxError)describe_token)describe_token_expr) Environment_ImportInclude _MacroCall) forifblockextendsprintmacroincludefromimportsetwith autoescape)eqneltlteqgtgteq)addsubmuldivfloordivmod _math_nodescl eZdZdZ dUdddedejedejedejed df d Zdefd ed eje d ej ed dfdZ dejedej ej edfd eje d dfdZ dVded eje d dfdZ dWdejej edfd eje d dfdZ dVdejej edfd efdZdVd eje d ejfdZd ejejej ejffdZ dXdej edfded ej ejfdZd ejejejffdZd ejfdZd ejfdZ d ej!fd Z"d ej#fd!Z$d ej%fd"Z&d ej'fd#Z(d$e)d%ed e)fd&Z*d ej+fd'Z,d ej-fd(Z.d ej/fd)Z0d$e1d dfd*Z2d ej3fd+Z4d ej5fd,Z6d ej7fd-Z8d ej9fd.Z:e;j< dYd/ed0d1d ej=fd2Z>e;j< dZd/ed0edejej edfd4ed ejej?ej=ej ff d5Z> dZd/ed0edejej edfd4ed ejej?ej=ej ff d6Z>d[d7ed ej@fd8ZAd ej@fd9ZBd ej@fd:ZCd ej@fd;ZDd ej@fd<ZEd ej@fd=ZFd ej@fd>ZGd ej@fd?ZHd ej@fd@ZId ej@fdAZJd[dBed ej@fdCZKd ej@fdDZL d\dEed7edejej edfdFed ejej ej@ff dGZMd ej fdHZNd ejOfdIZPd$ej@d ej@fdJZQd$ej@d ej@fdKZRd$ej@d ejejSejTffdLZUd ej@fdMZVd ej fdNZWd$ej@d ejXfdOZY dXd$ejej@dPed ejej@fdQZZd$ej@d ej@fdRZ[ dVdejej edfd ej ejfdSZ\d ej]fdTZ^dS)]ParserzThis is the central parsing class Jinja uses. It's passed to extensions and can be used to parse expressions or statements. N environmentr sourcenamefilenamestatereturnc||_||||||_||_||_d|_i|_|D]}|jD]}|j |j|<d|_ g|_ g|_ dS)NFr) r' _tokenizestreamr)r*closed extensionsiter_extensionstagsparse_last_identifier _tag_stack_end_token_stack)selfr'r(r)r*r+ extensiontags /srv/buildsys-work-dir/castor/build_node/builder-2/WGSG1/unpkd_srcs/cloudlinux-venv-1.0.6/venv/lib/python3.11/site-packages/jinja2/parser.py__init__zParser.__init__3s'!++FD(EJJ       %4466 7 7I ~ 7 7'0$$ 7 !');=msglinenoexcz te.NoReturncX||jjj}||||j|j)zConvenience method that raises `exc` with the message, passed line number or last line number as well as the current name and filename. )r/currentr?r)r*)r8r>r?r@s r;failz Parser.failJs0 >[(/Fc#vty$-888r=end_token_stack.c @t}|D]*}|tt|+|rBdtt tt|d}nd}|dg}nd|dg}|r9|||vr|d|dn|d|d|jr$|d|jdd|d ||dS) Nz or zUnexpected end of template.zEncountered 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  ) rupdatemaprjoinreprappendr6rC)r8r)rDr?expectedexprscurrently_lookingmessages r; _fail_ut_eofzParser._fail_ut_eofXs #uu$ = =E OOC 3U;; < < < <  %17D#1?23FGGHH22  !%  <45GG;$;;;|||j|dS)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)rRr7)r8r)r?s r;fail_unknown_tagzParser.fail_unknown_tags% $ 5v>>>>>r= end_tokensct|j}||||d||dS)z9Like fail_unknown_tag but for end of template situations.N)listr7rMrR)r8rUr?stacks r;fail_eofzParser.fail_eofsJ T*++  ! LL $ $ $ $v.....r=extra_end_rulescr|jjjdvrdS||jj|SdS)zAre we at the end of a tuple?) variable_end block_endrparenTNF)r/rBtypetest_any)r8rZs r; is_tuple_endzParser.is_tuple_endsA ;  #'N N N4  (;&//@@ @ur=c|xjdz c_ttj}tj|d|j||S)zDReturn a new free identifier as :class:`~jinja2.nodes.InternalName`.rfir?)r5object__new__r InternalNameNoder<)r8r?rvs r;free_identifierzParser.free_identifiersX " ^^E. / / B +D"F"FGGqss  &##%%%% &{f$$,,.. &##%%%% &{h&&..00 &##%%%% &/%%ek22Cs4yy &##%%%% & O   ! ! !G  ! !%+u| < < < &##%%%%% & &w &##%%%% &s$9G+G&G!+G);GG!F drop_needlec|jd|jd||}|jjjdkr|||rt|j|S)aRParse 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. colonr]eof)r/skip_ifexpectsubparserBr_rYnext)r8rUr{results r;parse_statementszParser.parse_statementss G$$$ ;'''z** ;  #u , , MM* % % %       r=crt|jj}|d}|jdr+|}t j|||S|d}| dd}t j ||||S)zParse an assign statement.T)with_namespaceassignrdN)z name:endsetr{) rr/r?parse_assign_targetr parse_tuplerAssign parse_filterr AssignBlock)r8r?targetexpr filter_nodebodys r; parse_setzParser.parse_setsdk""))))>> ;  x ( ( =##%%D<V<<< <''-- $$%54$HH d6JJJJr=c 0|jdj}|d}|jd|dd}d}|jd r|}|jd }|d }t|jj d krg}n|d d}tj |||||||S)zParse a for loop.zname:for)name:in)rZrF)name:recursive) with_condexprrZNname:ifr) name:endfor name:elseendfor)rTrrd) r/rr?rrrparse_expressionrrrorFor)r8r?ritertest recursiverelse_s r; parse_forzParser.parse_fors##J//6)),)GG 9%%%1D    ;  y ) ) +((**DK''(899 $$%ABB    "h . .EE))*:)MMEytUD)FSSSSr=c*tj|jdjx}} |d|_|d|_g|_ g|_ t|j}|dr?tj|jj j}|j ||dr|d d |_ |S) zParse an if construct.rrdTFr) name:elifr name:endifrr)rr)rIfr/rr?rrrrelif_rrrBrM)r8noderrvs r;parse_ifzParser.parse_ifs (:(:9(E(E(LMMMMv ((u(==DI--.VWWDIDJDJ%%Ezz+&& Xxt{':'ABBB ##D)))K(( X#44_RV4WW  r=cDtjt|jj}g}g}|jjjdkr|r|jd|}| d| ||jd| | |jjjdk||_ ||_ |dd|_|S) Nrdr]commaparamr)z name:endwithTr)rWithrr/r?rBr_rrset_ctxrMrtargetsvaluesrr)r8rrrrs r; parse_withzParser.parse_withs zdk!2!2!9:::&(%'k!&+55 , ""7+++--//F NN7 # # # NN6 " " " K  x ( ( ( MM$//11 2 2 2k!&+55  ))*;)NN  r=ctjt|jj}tjd|g|_|dd|_ tj |gS)Nrdr)zname:endautoescapeTr) rScopedEvalContextModifierrr/r?KeywordroptionsrrScoper8rs r;parse_autoescapezParser.parse_autoescape sq.d4;6G6G6NOOO lD4I4I4K4KLLM ))*At)TT {D6"""r=cftjt|jj}|jdj|_|jd|_ |jd|_ |jj j dkr| d|dd |_|j r3t!d |jDs| d |jd |jz|S) Nrdr)z name:scopedz name:requiredrzpBlock names in Jinja have to be valid Python identifiers and may not contain hyphens, use an underscore instead.)z name:endblockTrc3K|]A}|jD]7}t|tjo|jV8BdSN)r isinstance TemplateDatadataisspace).0rchilds r; z%Parser.parse_block..:so% % % %  ue0 1 1 Jej6H6H6J6J% % % % % % % r=z7Required blocks can only contain comments or whitespacezname:)rBlockrr/r?rror)rscopedrequiredrBr_rCrrallrs r; parse_blockzParser.parse_block&s*{$t{"3"3":;;;K&&v..4 k))-88  ++O<< ;  #u , , II?    ))*<$)OO = Q% %  % % % " "  Q IIO P P P Gdi/000 r=ctjt|jj}||_|SNrd)rExtendsrr/r?rtemplaters r; parse_extendszParser.parse_extendsDs9}D$5$5$<===--//  r=rdefaultc$|jjddrh|jdr>C ((u555r=ctjtjj_jdg_dtffd } jrjdjj j dkr|rn d}|j d r"d |jt jd r= d}j|j |j fnj|j |sjj j dkrnnjdGt'd sd_S)Nrdz name:importr,cjjjdvrijdr=t jjdk_jdSdS)N>rwithoutrrTF)r/rBrorrrrr)rr8sr; parse_contextz(Parser.parse_from..parse_contextns} #) K$$&&++N;; %)$5$5$;v$E!   """t5r=Trr)r_z4names starting with an underline can not be imported)r@rrF)r FromImportrr/r?rrrnamesboolrBr_rr) startswithrCrrrMhasattrr)r8rraliasrs` @r; parse_fromzParser.parse_fromhstDK'8'8'?@@@--//  =)))  t        +z , ""7+++{"'611 =??11D1AA;))#..IIN 2 ;&&y113 44t4DDEJ%%v{EJ&?@@@@J%%fk222 =??dk&9&>'&I&I'J ""6***+ +,t^,, & %D  r=cPgx}|_gx}|_|jd|jjjdkr|r|jd|d}|d|jdr(| | n|r| d| ||jjjdk|jddS) Nlparenr^rTrrrz-non-default argument follows default argument) argsdefaultsr/rrBr_rrrrMrrC)r8rrrargs r;parse_signaturezParser.parse_signatures$ty#%%4= 8$$$k!&(22 , ""7+++**T*::C KK {""8,, K 5 5 7 78888 K IJJJ KK   k!&(22 8$$$$$r=ctjt|jj}|jjjdkr||ng|_g|_ | }t|tj s| d|j||_|dd|_|S)Nrdrz expected call)z name:endcallTr)r CallBlockrr/r?rBr_rrrrrCallrCrmrr)r8r call_nodes r;rszParser.parse_call_blocksd4;&7&7&>??? ;  #x / /   & & & &DIDM))++ )UZ00 4 IIot{ 3 3 3 ))*;)NN  r=ctjt|jj}|dd|_|dd|_|S)NrdT) start_inline)zname:endfilterr) r FilterBlockrr/r?rrnrrrs r;rtzParser.parse_filter_blocks\ T[(9(9(@AAA''4'@@ ))*=4)PP  r=ctjt|jj}|dj|_|||dd|_ |S)NrdTr)z name:endmacror) rMacrorr/r?rr)rrrrs r; parse_macrozParser.parse_macrosp{$t{"3"3":;;;,,t,<<A  T"""))*<$)OO  r=cZtjt|jj}g|_|jjjdkrb|jr|jd|j| |jjjdkb|S)Nrdr]r) rOutputrr/r?rBr_rrMrrs r; parse_printzParser.parse_prints|4 #4#4#;<<< k!&+55z , ""7+++ J  d3355 6 6 6k!&+55 r= with_tuplerzte.Literal[True]cdSr)r8rrs r;rzParser.parse_assign_targets  r=TrcdSrr)r8rrrZrs r;rzParser.parse_assign_targets  r=c|r|jjdkro|jd}t |j|jd}t j|j|j|j}n|r<|jd}t j |jd|j}nC|r| d|}n| }| d| sB|dt|j|j|S)aParse 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. dotr)rdstoreT) simplifiedrZzcan't assign to )r/rr_rrrNSRefror?Namer parse_primaryr can_assignrC__name__lower)r8rrrZrrvattrrs r;rzParser.parse_assign_targets["  $dk..005>>K&&v..E    ;%%f--D[djNNNFF  $K&&v..EZ WU\JJJFF .))#_*++-- NN7 # # #  ""  IID4<<#8#>#>#@#@DDfm    r=rcV|r|S|S)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_condexprparse_or)r8rs r;rzParser.parse_expressions,  )&&(( (}}r=c|jjj}|}|jdr|}|jdr|}nd}t j||||}|jjj}|jd|S)Nrrrd)r/rBr?rrrrCondExpr)r8r?expr1expr2expr3s r;rzParser.parse_condexprs$+ k!!),, 0MMOOE{"";// ++--N5%vFFFE[(/Fk!!),, 0 r=c0|jjj}|}|jdrV|}t j|||}|jjj}|jdV|S)Nname:orrd)r/rBr? parse_andrrOrr8r?leftrights r;rzParser.parse_ors$+~~k!!),, 0NN$$E8D%777D[(/Fk!!),, 0 r=c0|jjj}|}|jdrV|}t j|||}|jjj}|jdV|S)Nname:andrd)r/rBr? parse_notrrAndrs r;rzParser.parse_and&s$+~~k!!*-- 0NN$$E9T5888D[(/Fk!!*-- 0 r=c|jjdrAt|jj}t j||S|S)Nname:notrd) r/rBrrr?rNotr parse_compare)r8r?s r;rzParser.parse_not/s` ;  # #J / / >$+&&-F9T^^--f=== =!!###r=cl|jjj}|}g} |jjj}|t vrOt |j|tj ||n|j dr;|tj d|n|jj dr|j drU|j d|tj d|nn|jjj}r|s|Stj|||S)NTrinr!rnotinrd)r/rBr? parse_math1r__compare_operatorsrrMrOperandrrrrCompare)r8r?rops token_types r;r#zParser.parse_compare5s$+!! 0,1J///T[!!! 5=T5E5E5G5GHHIIII$$Y//  5=t/?/?/A/ABBCCCC$))*55 $+:J:J:L:L:Q:Q;;    ### 5=$2B2B2D2DEEFFFF[(/F 0 K}T3v6666r=cb|jjj}|}|jjjdvrvt |jjj}t |j|}||||}|jjj}|jjjdvv|S)N)rrrd)r/rBr? parse_concatr_r$rr8r?rclsrs r;r'zParser.parse_math1Ls$+  ""k!&.88dk167C    %%''E3tU6222D[(/F k!&.88  r=cz|jjj}|g}|jjjdkrPt |j|||jjjdkPt|dkr|dStj ||S)Ntilderrrd) r/rBr? parse_math2r_rrMlenrConcat)r8r?rs r;r.zParser.parse_concatWs$+  ""#k!&'11     KK((** + + +k!&'11 t99>>7N|D0000r=cb|jjj}|}|jjjdvrvt |jjj}t |j|}||||}|jjj}|jjjdvv|S)N)r r!r"r#rd)r/rBr? parse_powr_r$rr/s r;r3zParser.parse_math2as$+~~k!&*KKKdk167C    NN$$E3tU6222D[(/F k!&*KKK  r=cD|jjj}|}|jjjdkret |j|}t j|||}|jjj}|jjjdke|S)Npowrd)r/rBr? parse_unaryr_rrPowrs r;r7zParser.parse_powls$+!!k!&%//    $$&&E9T5888D[(/F k!&%//  r= with_filterc|jjj}|jjj}|dkr>t |jt j|d|}nX|dkr>t |jt j|d|}n| }| |}|r| |}|S)NrFrdr) r/rBr_r?rrNegr:Posr parse_postfixparse_filter_expr)r8r<r,r?rs r;r:zParser.parse_unaryvs[(- $+       9T--e44VDDDDD 5    9T--e44VDDDDD%%''D!!$''  0))$//D r=c|jj}|jdkr|jdvr#t j|jdv|j}nF|jdvrt jd|j}n!t j|jd|j}t|jn|jdkrt|j|jg}|j}|jjjdkrM| |jjjt|j|jjjdkMt jd ||}n|jd vr5t|jt j|j|j}n|jd krEt|j| d }|j d nk|jdkr| }nK|jdkr|}n+|dt!||j|S)Nr))truefalseTrueFalse)rCrErd)noneNoneloadstring)integerfloatrT)explicit_parenthesesr^lbracketlbracez unexpected )r/rBr_rorConstr?rrrMrKrr parse_list parse_dictrCr)r8rvrbufr?s r;rzParser.parse_primarys' # :  {@@@{5;2B#B5<XXX 000{4 ===z%+velKKK      Z8 # #    ;-C\F+%*h66 4;.4555T[!!!+%*h66;rwws||F;;;DD Z/ / /    ;u{5<@@@DD Z8 # #    ###>>D K  x ( ( ( ( Z: % %??$$DD Z8 # #??$$DD II=N5$9$9==u| L L L r=rrNcjjj}|rj}n|rj}ndt jffd }g}d} |rjd|rnH| |jjj dkrd}nnjjj}z|s;|r|dS|s/ dtjjt j |d| S) aWorks 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. 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. r,c0dS)NFr)r)r8sr;r4z!Parser.parse_tuple..parses,,5,AAAr=FTrrzExpected an expression, got rIrd)r/rBr?rrrExprrrarMr_rCrTuple) r8rrrZrNr?r4ris_tuples ` r;rzParser.parse_tuplesk2$+  B&EE  B)EE B5: B B B B B B$& 0 , ""7+++  11  KK {"'722[(/F 0  Aw (  D*4;+>??DD {47777r=c|jd}g}|jjjdkrn|r|jd|jjjdkrn<|||jjjdkn|jdt j||jS)NrOrbracketrrd) r/rrBr_rMrrListr?)r8rvitemss r;rRzParser.parse_lists "":..$&k!&*44 , ""7+++{"':55 LL..00 1 1 1 k!&*44 :&&&z% 5555r=c>|jd}g}|jjjdkr|r|jd|jjjdkrn|}|jd|}|t j|||j|jjjdk|jdt j ||jS)NrPrbracerr}rd) r/rrBr_rrMrPairr?Dict)r8rvr]keyros r;rSzParser.parse_dicts ""8,,$&k!&(22 , ""7+++{"'833''))C K  w ' ' '))++E LLCszBBB C C Ck!&(22 8$$$z% 5555r=c |jjj}|dks|dkr||}n|dkr||}nnQ|S)NTrrOr)r/rBr_parse_subscript parse_callr8rr,s r;r@zParser.parse_postfixsm ,1JU""jJ&>&>++D11x''t,,  r=c |jjj}|dkr||}nN|dkr+|jjjdkr||}n|dkr||}nn||S)NTpiper)isr)r/rBr_rro parse_testrerfs r;rAzParser.parse_filter_exprs ,1JV##((..v%%$+*=*Ct*K*Kt,,x''t,,  r=ct|j}|jdkr|jj}t|j|jdkr"t j||jd|jS|jdkr|d|jt j |j|j}t j ||d|jS|jdkrg}|jjjdkrX|r|j d | | |jjjdkX|j dt|d kr |d }nt j|d|j}t j ||d|jS|d |jdS) Nrr)rIrdrLzexpected name or numberrOr[rrrzexpected subscript expression)rr/r_rBrGetattrror?rCrQGetitemrrMparse_subscribedr4rX)r8rrv attr_tokenrrs r;rdzParser.parse_subscript#sT[!! :  ,J    &((}**F5<I-- 3Z5FGGG+j.z7HIIIC=sF5<HHH H : # #')D+%*j880K&&w/// D1133444+%*j88 K  z * * *4yyA~~1gk$u|DDD=sF5<HHH H 15<@@@@@r=c8|jjj}|jjjdkrt |jdg}nB|}|jjjdkr|St |j|g}|jjjdkr|dnP|jjjdvr(||n|d|jjjdkret |j|jjjdvr(||n+|dn|dtj|d|iS)Nr})r[rr?) r/rBr?r_rrrMrSlice)r8r?rrs r;rnzParser.parse_subscribedBs$+ ;  #w . .    6DD((**D{"'722    6D ;  #w . . KK     [ %-B B B KK--// 0 0 0 0 KK    ;  #w . .    {"'/DDD D11334444 D!!!! KK   {40&000r=c jd g}g}d}d}d}dtddf fd }jjjdkr|r1jdjjjdkrnjjjdkr;||duo|dut j}n9jjjd kr6||dut j}njjjd krjjd kr|||dujjj}j d }| tj |||j n;||duo|duo| | d}jjjdkԉjd||||fS)NrFrr,cF|sdjdSdS)Nz+invalid syntax for function call expression)rCr?)rr8rvs r;ensurez&Parser.parse_call_args..ensurejs5 W GVVVVV W Wr=r^rr r9r)rrrdT)r/rrrBr_rrrrorrMrrr?) r8rkwargsdyn_args dyn_kwargs require_commartrbrorvs ` @r;parse_call_argszParser.parse_call_argsbs ""8,,   W W$ W W W W W W Wk!&(22  ""7+++;&+x77{"'500x4'>J$,>???T[!!!0022$)U22zT)***T[!!!!2244 K',66 ((**/8;;F:-...+-3CK$$Q''' 1133EMM%-U5<"P"P"PQQQQF8t+Q d0BQ6zRRRKK 5 5 7 7888 MAk!&(22D 8$$$VXz11r=c|jj}|\}}}}tj||||||jSr)r/rBryrrr?)r8rrvrrurvrws r;rezParser.parse_callsG #-1-A-A-C-C*fh z$fh 5<XXXXr=rc N|jjjdks|r |st|j|jd}|j}|jjjdkrNt|j|d|jdjzz }|jjjdkN|jjjdkr|\}}}}ng}g}dx}}tj|||||||j }d}|jjjdk | |S)Nrhr)rrGrrdF) r/rBr_rrroryrFilterr?) r8rrrvr)rrurvrws r;rzParser.parse_filters>k!&&00L0 "T[!!!K&&v..E;D+%*e33T[!!!dk0088>>>+%*e33{"'833595I5I5K5K2fh (,,:<dD&(Ju|D!L#k!&&00L0$ r=c t|j}|jjdrt|jd}nd}|jdj}|jjjdkrNt|j|d|jdjzz }|jjjdkNdx}}g}|jjjdkr|\}}}}n|jjjdvr|jjd d d sa|jjd r| d | } | | } | g}ng}tj |||||||j}|rtj||j}|S)Nr!TFr)rrGr>r)rMrPrrJrLrOrrrzname:isz'You cannot chain multiple tests with isrd)rr/rBrrror_ryr`rCrr@rTestr?r") r8rrvnegatedr)rvrwrurarg_nodes r;rjzParser.parse_testsT[!! ;  # #J / /     GGG{!!&))/k!&%//     C$+,,V44:: :Dk!&%//!%$: ;  #x / /151E1E1G1G .D&(JJ K  $  K'00iTT {"'' 22 E CDDD))++H))(33H:DDDz $fh 5<     89T%,777D r=c8ggj}||j|d fd } |jr|jj}|jdkrF|jr)|t j|j|jt|jn4|jdkrNt|j|| d|j dn|jd kr|t|j|2|jjj |r||j SS|}t|t r|n||j d nt%d |j|||j n!#||j wwxYwS) Nr,crEdj}tjdd|dd=dSdS)Nrrd)r?rMrr)r?r data_buffers r; flush_dataz#Parser.subparse..flush_datasY #$Q. ELQQQGGGHHHNNN # #r=rrdvariable_beginTrr\ block_beginr]zinternal parsing error)r,N)rMr7r/rBr_rorrr?rrrr`rrrzrrWextendAssertionError)r8rUadd_datarrvrirrs @@r;rzParser.subparsesZ$&*, %  !  ! ( ( 4 4 4 # # # # # # #  ,+ C +:''{W !3EK !U!U!UVVV%%%%Z#333%%%HT--D-AABBBK&&~6666Z=00JLLL%%%!-2N$+2E2N#3- $%%))++++&--//B!"d++( B BK&&{3333()ABBB1+ C4 JLLL%%))+++%%))++++& sC>G9 BG99Hctj|d}||j|S)z0Parse the whole template into a `Template` node.rrd)rTemplaterset_environmentr')r8rs r;r4z Parser.parse s: :::t/000 r=)NNNr)NN)F)..)TFNF)T)FTNF)_r  __module__ __qualname____doc__strtOptionalr<rintTyperCr\rXrRrTrYrrarrgrjUnionrhrzrrrrrrrrrrrrrrrrr rrrrrrrr rrrsrrtrrrrtypingoverloadrrrrWrrrrrr#r'r.r3r7r:rrrRrarSr@rArlrmrdrnryrrerrjrrr4rr=r;r&r&.s !%$(!% >>">>jo > *S/ > z# > >>>>4#'+> 9 9  9 3 9V' ( 9  9 9 9 9&-jo&-S 12&- 3 &-  &-&-&-&-R48???!"C? ????59"& / /JqwsCx01 / 3 /  / / / /@D z!'#s(*;< ajoAS&QVEJ5G)G!H&&&&<BG'#s(+:>  : K175<1B#BC K K K KT59TTTT&%($EJ"#%+#### U[<u} " -1       5u} 5 5 5 56el6666,E,,,,,\%J%4%%%% %/    E$5 U[U\ _FI   1C    _  _ 9=$     AGCH$56    ej%+5 6    _  9=$ ((((AGCH$56 (  ( ej%+5 6 ((((Tdej     %*5:$5:$$$$ 7uz7777. UZ    1ej1111 UZ    5:tuz$ uz    H!"9=%* @8@8@8@8AGCH$56 @8 # @8 ej( ) @8@8@8@8D 6EJ 6 6 6 6 6EJ 6 6 6 6 %*      ej UZ    AJA  - .AAAA>1%*1111@/2/2/2/2/2bYuzYejYYYYBGJuz*:> EJ .(uz(ej((((V;?//*QWS#X%67/  ////bu~r=r&)'rrrrKr exceptionsrrlexerrr TYPE_CHECKINGtyping_extensionster'r TypeVarrrr rrr frozensetrpr(AddSubMulDivFloorDivModr$rarrrW__annotations__r&rr=r;rs>>> ......++++++!!!!!!&&&&&&?)""""((((((+U\5=II QY|U[%/ B B i    YGGGHH 9 9 9 9 9 00 QVC ++ ,bbbbbbbbbbr=