Files
intellecton/venv/lib/python3.12/site-packages/jinja2/__pycache__/compiler.cpython-312.pyc
T

562 lines
102 KiB
Plaintext
Raw Normal View History

Ë
j“!ãó dZddlZddlmZddlmZddlmZddl m
Z
ddl m Z
ddlmZdd lmZd
d lmZd
d lmZd
d
lmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlmZd
dlm Z d
dl!m"Z"ejFr
ddl$Z%d
dl&m'Z'ejPdejRdejTf¬«Z+dddddd d!d"d#œZ,d$e+d%e+fd&„Z-d'e.d%ejRd(ej^d)gdffd*„Z0d'e.d%ejRd(ejbd)gdffd+„Z2 dFd,ejfd-d.d/ejhe.d0ejhe.d1ejhejjd2e6d3e6d%ejhe.fd4„Z7d5ejTd%e6fd6„Z8d7ejrejtd8ejre.d%ejve.fd9„Z<Gd:„d;«Z=Gd<„d)«Z>Gd=„d>e?«Z@Gd?„d@e"«ZAGdA„dBe"«ZBGdC„dDeC«ZDGdE„d(e"«ZEy)Gz0Compiles nodes from the parser into Python code.éN)Úcontextmanager)Úupdate_wrapper)ÚStringIO)Úchain)Ú iskeyword)Úescape)ÚMarkupé)Únodes)ÚTemplateAssertionError)ÚSymbols)ÚVAR_LOAD_ALIAS)ÚVAR_LOAD_PARAMETER)ÚVAR_LOAD_RESOLVE)ÚVAR_LOAD_UNDEFINED)Ú EvalContext)Ú Optimizer)Ú_PassArg)Úconcat)Ú NodeVisitor)Ú EnvironmentÚF.)Úboundz==z!=ú>z>=ú<z<=Úinznot in)ÚeqÚneÚgtÚgteqÚltÚlteqrÚnotinÚreturnc
ódddtjdddtjdtjf
ˆfd }t |«S) NÚselfÚ
CodeGeneratorÚnodeÚframeÚFrameÚkwargsr%cóØ|jS|jjs=|jj||j«}||k7r|j||«S|||fi|¤ŽS©N)Ú optimizerÚeval_ctxÚvolatileÚvisit)r'r)r*r,Únew_noder$s €úR/home/antigravity/intellecton/venv/lib/python3.12/site-packages/jinja2/compiler.pyÚnew_funczoptimizeconst.<locals>.new_func.sbø€ð >‰>Ð %¨e¯n©n×.EÒ.EØ—~‘~×+¨D°%·.±.ÓAˆHà˜4ÒØ—z‘z (¨EÓt˜- )r ÚExprÚAnyr)r$r5s` r4Ú
optimizeconstr:-sKø€ð
ð
.Ü%*§Z¡Zð
.Ø8?ð
.ÜKLÏ5É5ð

õ
 ˜(  &r6Úopr(r+c óZtdddtjdtddfˆfd «}|S)Nr'r(r)r*r%cóþ|jjrw‰|jjvr_|jdd«|j |j
|«|jd«|j |j |«n^|jd«|j |j
|«|jdd«|j |j |«|jd«y)Nz environment.call_binop(context, ú, ú ú))Ú environmentÚ sandboxedÚintercepted_binopsÚwriter2ÚleftÚright©r'r)r*r;s €r4Úvisitorz_make_binop.<locals>.visitor>ø€ð
× Ñ × &¨2°×1AÑ1A×1TÑ1TÑ+Tà J‰JÐ9¸"¸¸ J‰Jt—yy  J‰J Ø J‰Jt—zz  J‰JsŒOØ J‰Jt—yy  J‰J˜˜2˜$˜a J‰Jt—zz  
3r6)r:r ÚBinExprr+©r;rIs` r4Ú _make_binoprL=s<ø€Üð¬U¯]©]ðÄ5ðÈTôóðð €Nr6c óZtdddtjdtddfˆfd «}|S)Nr'r(r)r*r%cóH|jjrJ‰|jjvr2|jdd«|j |j
|«n0|jdz«|j |j
|«|jd«y)Nzenvironment.call_unop(context, r>r?rA)rBrCÚintercepted_unopsrEr2r)rHs €r4rIz_make_unop.<locals>.visitorUs|ø€ð
× Ñ × &¨2°×1AÑ1A×1SÑ1SÑ+Sà J‰JÐ8¸¸¸bÐ J‰Jt—yy  J‰Js˜R Ø J‰Jt—yy  
3r6)r:r Ú UnaryExprr+rKs` r4Ú
_make_unoprQRs>ø€ôð

¬U¯_©_ð
ÄUð
Ètô
óð
ð €Nr6r)rBrÚnameÚfilenameÚstreamÚ
defer_initÚ optimizedcóÔt|tj«s td«|j ||||||«}|j |«||j j«Sy)z+Generate the python source for a node tree.z Can't compile non template nodesN)Ú
isinstancer ÚTemplateÚ TypeErrorÚcode_generator_classr2rTÚgetvalue)r)rBrRrSrTrUrVÚ generators r4Úgenerater^esfô dœEŸN™NÔ Ð×T˜8 V¨Z¸ó€Ið‡OOà
€~Ø×Ñ× r6ÚvaluecóT||tus|turyt|«ttt
t ttthvryt|«tttthvrtd|D««St|«tur td|j!«D««Sy)z)Does the node have a safe representation?Tc3ó2K|]}t|«Œy­wr.©Ú
has_safe_repr)Ú.0Úvs r4ú <genexpr>z has_safe_repr.<locals>.<genexpr>†sèø€Ò”= ×3ùsc3óRK|]\}}t|«xr t|«Œ!y­wr.rb©rdÚkres r4rfz has_safe_repr.<locals>.<genexpr>‰s&èø€ÒS¹T¸”= Ó
°aÓ(8ÓSùs%'F)ÚNotImplementedÚEllipsisÚtypeÚboolÚintÚfloatÚcomplexÚrangeÚstrr ÚtupleÚlistÚsetÚ frozensetÚallÚdictÚitems©r_s r4rcrc}sà €}˜¤Ñ/°5¼HÑ3DØä ˆEƒ{”tœS¤%¬´%¼¼fÐä ˆEƒ{”uœd¤C¬ÐÑ3¨UÔ ˆEƒ{”dÑÜÑSÀUÇ[Á[Ã]Ô r6r Únamescó˜t|«} |D]}|j|«Œ |jS#t$rY|jSwxYw)z”Check if the names passed are accessed undeclared. The return value
is a set of all the undeclared names from the sequence of names found.
)ÚUndeclaredNameVisitorr2Ú VisitorExitÚ
undeclared)r r{rIr)s r4Úfind_undeclaredr€Žs\ô $ EÓ*€Gð
Øò ˆDØ M‰M˜$Õ ñ ð × Ñ Ðøô ò
Ø Ø × Ñ Ðð
ús2² A ÁA cóbeZdZdejej ejfddfdZy)ÚMacroRefr)r%Ncó<||_d|_d|_d|_y©NF)r)Úaccesses_callerÚaccesses_kwargsÚaccesses_varargs©r'r)s r4Ú__init__zMacroRef.__init__žs!؈Œ ØÔØÔØ %ˆÕr6) Ú__name__Ú
__module__Ú __qualname__r8ÚUnionr ÚMacroÚ CallBlockr‰©r6r4rrs+ð&˜QŸW™W U§[¡[°%·/±/Ð%AÑ&Àtô&r6rc óˆeZdZdZ d dedej ddej eddfdZd
dZ dd e
ddfd
Z d
d Z e Z
y)r+z&Holds compile time information for us.Nr0ÚparentÚlevelr%cóV||_||_|€'t|¬«|_d|_d|_d|_nOt|j|¬«|_|j|_|j
|_|j |_d|_d|_d|_ d|_
d|_ y)r“F) r0rr
ÚsymbolsÚrequire_output_checkÚbufferÚblockÚtoplevelÚ rootlevelÚ
loop_frameÚ block_frameÚ
soft_frame)r'r0rr“s r4r‰zFrame.__init__¨ð !ˆŒ
ðˆŒ à ˆÔ/ˆDŒLð).ˆ ,0ˆDŒKð+/ˆD# 6§>¡>¸Ô?ˆDŒLØ(.×(CÑ(Cˆ  Ÿ-™-ˆDŒKØŸˆDŒJðˆŒ
ð
ˆŒð ˆŒØ ˆÔð
 ˆr6cóÌtj|j«}|jj |j«|j
j
«|_|S)z!Create a copy of the current one.)ÚobjectÚ__new__Ú __class__Ú__dict__ÚupdaterÚcopy©r'Úrvs r4z
Frame.copyÛsCä
^‰^˜DŸN™NÓ
+ˆØ
×ј4Ÿ=™=Ô—\\×(ˆŒ
؈ r6ÚisolatedcóŽ|r.t|j|jjdz¬«St|j|«S)zReturn an inner frame.r
r•)r+r0rr“)r's r4Úinnerz Frame.innerâs6á ܘŸ¨d¯l©l×.@Ñ.@À1Ñ.DÔ T—]] )r6cóB|j«}d|_d|_|S)a&Return a soft frame. A soft frame may not be modified as
standalone thing as it shares the resources with the frame it
was created of, but it's not a rootlevel frame any longer.
This is only used to implement if-statements and conditional
expressions.
FT)rs r4Úsoftz
Frame.softès"ðY‰Y‹[ˆØˆŒ ؈Œ
؈ r6)NN)r%zte.Self©F)rÚ__doc__rr8ÚOptionalrnr‰rmÚ__copy__rr6r4r+r+¥snÙ
'+Ø!%ñ 1 àð1 ð
˜7Ñ1 ðz‰z˜#‰ð 1 ð
ó 1 ófñ*˜dð*¨wó ðHr6cóeZdZdZy)r~z?Exception used by the `UndeclaredNameVisitor` to signal a stop.N©rrr6r4r~r~øsÚIr6r~có„eZdZdZd dZdej ddfdZdejddfdZ dejddfdZ y)
ÚDependencyFinderVisitorz.A visitor that collects filter and test calls.r%Ncó@t«|_t«|_yr.)ruÚfiltersÚtests©r's r4r‰z DependencyFinderVisitor.__init__ÿsÜ#&£5ˆŒ Ü!$£ˆ
r6r)cóp|j|«|jj|j«yr.)Ú
generic_visitr¶ÚaddrRrˆs r4Ú visit_Filterz$DependencyFinderVisitor.visit_Filters&Ø ×ј4Ô Ø ×јŸÕ#r6cóp|j|«|jj|j«yr.)rRrˆs r4Ú
visit_Testz"DependencyFinderVisitor.visit_Tests$Ø ×ј4Ô Ø
t—y!r6cóy)zStop visiting at blocks.Nrrˆs r4Ú visit_Blockz#DependencyFinderVisitor.visit_Block ór6©r%N) rr‰r ÚFilterr¼ÚTestr¾ÚBlockrÀrr6r4r´r´üsOÙ§¡ð$°$ó"˜uŸz™zð"¨dó' § ¡ ðô'r6r´có‚eZdZdZdej
eddfdZdejddfdZ
dejddfdZ y) r}z¡A visitor that checks if a name is accessed without being
declared. This is different from the frame visitor as it will
not stop at closure frames.
r{r%NcóBt|«|_t«|_yr.)rur{r)r'r{s r4r‰zUndeclaredNameVisitor.__init__sܘ“ZˆŒ
Ü&)£eˆr6r)có.|jdk(ra|j|jvrI|jj |j«|j|jk(r
t «y|jj
|j«y)load)ÚctxrRr{rr~Údiscardrˆs r4Ú
visit_Namez UndeclaredNameVisitor.visit_NameshØ 8‰8  $§)¡)¨t¯z©zÑ"9Ø O‰O× Ñ  § ¡ Ô  $§*¡*Ò!“mÐ
J‰J× Ñ ˜tŸy™yÕ )r6cóy)zStop visiting a blocks.Nrrˆs r4z!UndeclaredNameVisitor.visit_Block!r6)
rr8ÚIterablerrr‰r ÚNamerÌrr6r4r}r}sPñð
,˜aŸj™j¨™oð,°$ó*˜uŸz™zð*¨dó& § ¡ ðô&r6r}cóeZdZdZy)Ú CompilerExitz¼Raised if the compiler encountered a situation where it just
doesn't make sense to further process the code. Any block that
raises such an exception is not further processed.
Nr²rr6r4%sòr6cóZeZdZU dŠdddejedejedejej deded dfd
Ze d efd «Z
d ed
e d dfdZ d efdZ
ded dfdZ ddeded dfdZdŒdZdde d dfdZdŽdedejej(d dfdZded dfdZ dŽdededejej(d dfdZdej0ej(ded dfdZded dfd „Z ddedejej(d!e d dfd"„Zddejej(d!e d dfd#„Z dŽdej:ej<ej>ej@fded$ejejBeejDfd dfd%„Z#dej0ej(d dfd&„Z$ded dfd'„Z%dded(ed dfd)„Z&dd*ed+ed efd,„Z'ded efd-„Z(dej:ejRejTfded ejVee,ffd.„Z-d/e,ded dfd0„Z.dej(d efd1„Z/ded efd2„Z0dŒd3„Z1ded dfd4„Z2dŒd5„Z3d6ed dfd7„Z4d6ed dfd8„Z5dŒd9„Z6d efd:„Z7d efd;„Z8ded efd<„Z9d6ed efd=„Z:dŒd>„Z;ded dfd?„Z< dŽdejzdejed dfd@„Z>dej~ded dfdA„Z@dejded dfdB„ZBdej†ded dfdC„ZDdej:eefded dfdD„ZGdeded dfdE„ZHdeded dfdF„ZIdej”ded dfdG„ZKdej˜ded dfdH„ZMdejRded dfdI„ZNdejTded dfdJ„ZOdej ded dfdK„ZQdeded dfdL„ZSdeded dfdM„ZUGdN„dOe«ZWeXdPejDd ejDfdQ„«ZYdZZejeWe[dR<d eWfdS„Z\dTej0ejDd efdU„Z]dededVeWd efdW„Z_dededVeWd dfdX„Z`dededVeWd dfdY„Zadeded dfdZ„Zcdeded dfd[„Zededed dfd\„Zgdeded dfd]„Zideded dfd^„Zkdeded dfd_„Zmdeded dfd`„ZodejVded dfda„Zpdeded dfdb„Zrdeded dfdc„Zteudd«Zveude«Zweudf«Zxeudg«Zyeudh«Zzeudi«Z{eudj«Z|eudk«Z}eudl«Z~edd«Z€ede«Zedm«Zeƒdejded dfdn„«Z…eƒdej ded dfdo„«Z‡dejded dfdp„Z‰eƒdejded dfdq„«Zeƒdejded dfdr„«Zdejded dfds„Zedej:ej>ej@fdedted ej"dfdu„«Zeƒdej>ded dfdv„«Z“eƒdej@ded dfdw„«Z”eƒdej*ded dfdx„«Zddej<dedyed dfdz„«Z—dej0ded dfd{„Z™dej4ded dfd|„Zdej8ded dfd}„Zdej<ded dfd~„ZŸdej@ded dfdZ¡dejDded dfd€„Z£dejHded dfdZ¥dejLded dfd‚„Z§dejPded dfdƒ„Z©dejTded dfd„„Z«dejXded dfd…„Z­dej\ded dfd†„Z¯dej`ded dfd‡„Z±dejdded dfdˆ„Z³dejhded dfd‰„Zµy)r(NrBrrRrSrTrUrVr%có’|
t«}||_||_||_||_d|_||_d|_|rt|«|_i|_ i|_
d|_ d|_ d|_
i|_i|_g|_d|_d|_d|_d|_d|_d|_g|_g|_dg|_y)NFrr
context)rrBrRrSrTÚcreated_block_contextrUr/rÚimport_aliasesÚblocksÚextends_so_farÚhas_known_extendsÚ code_linenor·Ú
debug_infoÚ_write_debug_infoÚ
_new_linesÚ
_last_lineÚ _first_writeÚ_last_identifierÚ _indentationÚ
_assign_stackÚ_param_def_blockÚ_context_reference_stack)r'rBrRrSrTrUrVs r4r‰zCodeGenerator.__init__-𠈓ZˆFØÔ؈Œ Ø ˆŒ
؈Œ Ø%*ˆÔ$ˆŒØ04ˆŒá Ü& {Ó3ˆDŒNð13ˆÔð13ˆŒ ð ˆÔð
"'ˆÔðˆÔð(*ˆŒ
Ø)+ˆŒ ð68ˆŒØ26ˆÔðˆŒðˆŒðÔð!"ˆÔðˆÔð24ˆÔð57ˆÔð*3¨ ˆÕ%r6có|jduSr.)r/r¸s r4rVzCodeGenerator.optimizedvsà~‰~ )r6ÚmsgÚlinenoz te.NoReturncóFt|||j|j«)z*Fail with a :exc:`TemplateAssertionError`.)r rRrS)r's r4ÚfailzCodeGenerator.fail|sä$ S¨&°$·)±)¸T¿]¹]ÓKr6cóJ|xjdz
c_d|jS)zGet a new unique identifier.r
Út_)r¸s r4Útemporary_identifierz"CodeGenerator.temporary_identifier€s'à ×Ò ÑØD×+r6r*cój|j«|_|j|jd«y)z7Enable buffering for the frame from that point onwards.z = []N)r˜Ú writeline©r'r*s r4r˜zCodeGenerator.buffer…s)à׌ Ø ˜%Ÿ,™,˜ .r6Úforce_unescapedcó |sí|jjr¡|jd«|j«|jd|jd«|j «|jd«|j«|jd|jd«|j «y|jj r |jd|jd«y|jd|jd«y)z(Return the buffer contents of the frame.zif context.eval_ctx.autoescape:zreturn Markup(concat(ú))úelse:zreturn concat(rAN)r0r1Úindentr˜ÚoutdentÚ
autoescape)r'r*s r4Úreturn_buffer_contentsz$CodeGenerator.return_buffer_contentsŠñØ~‰~×Ð
ØÐ!6°u·|±|°nÀBРؘwÔ
Ø °· ± ¨~¸QÐ ØØ×Ð!6°u·|±|°nÀBÐØ ˜¨¯ ©  ~°QÐ8r6có.|xjdz
c_y)zIndent by one.r
r¸s r4zCodeGenerator.indentžsà ×Ò˜QÑÖr6Ústepcó.|xj|zc_y)zOutdent by step.Nrù)r's r4zCodeGenerator.outdent¢sà ×Ò˜TÑr6r)có€|j|jd|«y|j|jd|«y)z%Yield or write into the frame buffer.Núyield ú.append()r˜)r'r*r)s r4Ú start_writezCodeGenerator.start_write¦s3à <‰<Ð Ø N‰N˜8  N‰N˜eŸl™l˜^¨8Ð4°dÕ ;r6có@|j|jd«yy)z1End the writing process started by `start_write`.NrA)r˜rEs r4Ú end_writezCodeGenerator.end_write­sà <‰<Ð J‰Js $r6Úscól|j||«|j|«|j|«y)z4Simple shortcut for start_write + write + end_write.N)rÿrEr)r'rr*r)s r4Ú simple_writezCodeGenerator.simple_write²s+ð
×ј Ô
Ø r6r cóx |jd«|D]}|j||«Œy#t$rYywxYw)z•Visit a list of nodes as block in a frame. If the current frame
is no buffer a dummy ``if 0: yield None`` is written automatically.
ÚpassN)r2)r'r r*r)s r4Ú
blockvisitzCodeGenerator.blockvisitºsBð Ø N‰N˜ ò
(Ø
˜4 Õ
(øäò Ù ð ús *-­ 9¸9Úxcóì|jrÍ|js|jjd|jz«|xj|jz
c_|j
8|j j|j
|jf«d|_d|_|jjd|jz«d|_|jj|«y)z&Write a string into the output stream.ú
NFz r) rÝrTrEÚappendrá)r'rs r4rEzCodeGenerator.writeÅà ?Š?Ø× ×! $¨¯©Ñ"8Ô× Ò  D§O¡OÑ Ø×—O‘O×*¨D×,BÑ,BÀD×DTÑDTÐ+UÔVØ-1*Ø %ˆ Ø K‰K× Ñ ˜f t×'8Ñ'8Ñ ˆDŒOØ ×јr6ÚextracóJ|j||«|j|«y)z!Combination of newline and write.N)ÚnewlinerE)r'rr)r s r4zCodeGenerator.writelineÓsð
T˜
1
r6có¾t|jd|z«|_|=|j|jk7r#|j|_|j|_yyy)z/Add one or more newlines before the next write.r
N)ÚmaxrÝ)r'r)r s r4rzCodeGenerator.newlineÚsLä˜dŸo™o¨q°5©yÓŒØ Ð  § ¡ ¨t¯©Ò >Ø%)§[¡[ˆ "Ÿk™kˆD!?Ð r6Ú extra_kwargscóºtdtd|jD«|xsd«D««}|jD]%}|j d«|j ||«Œ'|se|jD]%}|j d«|j ||«Œ'|/|j
«D]\}}|j d|d|«Œ|jr-|j d«|j |j|«|r|j|j d«n|j d «|jD]M}|j |jd
«|j |j|«|j d«ŒO|/|j
«D]\}}|j |d
|d«Œ|j?|j d «|j |j|«|j d «y|j d
«y|j.|j d«|j |j|«yy)a+Writes a function call to the stream for the current node.
A leading comma is added automatically. The extra keyword
arguments may not include python keywords otherwise a syntax
error could occur. The extra keyword arguments should be given
as python dict.
c3óbK|]'}ttjt|««Œ)y­wr.)Úis_python_keywordr8Úcastrr)rdris r4rfz*CodeGenerator.signature.<locals>.<genexpr>ïs'èø€ò
àô
œaŸf™f¤S¨!›n× 
ùs-/c3ó4K|]}|jŒy­wr.)Úkey©rdrs r4rfz*CodeGenerator.signature.<locals>.<genexpr>ñsèø€Ò7 a˜AŸE7ùórr>=z, *z
, **dict({z, **{ú: z}, **rAú}z, **) Úanyrr,ÚargsrEr2ryÚdyn_argsÚ
dyn_kwargsrr_) r'r)r*rÚkwarg_workaroundÚargÚkwargrr_s r4Ú signaturezCodeGenerator.signatureás
ôñ
äÑ7¨4¯;©;ÔÒ9KÈÓ
ó
Ðð
—9 #ˆCØ J‰J Ø J‰Js˜  ØŸò
)Ø
˜ Ø
˜5 
Ð'Ø".×"4Ñ"4Ó"6ò3JC˜Ø—J C 5¨¨%¨Ð =Š=Ø J‰J Ø J‰Jt—}‘} eÔ ØÐ
˜
˜Ÿò
!Ø
˜eŸi™i˜]¨"Ð
˜5Ÿ;™;¨Ô
˜ ð
Ð'Ø".×"4Ñ"4Ó"6ò6JC˜Ø—JJ # ¨¨5¨'°ÐÐ
˜
˜4Ÿ?™?¨EÔ
˜3•à
˜3•à
_‰_Ð
J‰J Ø J‰Jt—¨Õ )r6c
óÖt«}|D]}|j|«Œ|j|jdf|j|jdffD]\}}}t |«D}||vr|j «||<|j
d«|j«|j
||d|d|d«|j«|j
d«|j«|j
d«|j
d ||d
«|j«|j
d |d d
d|d«|j«|j«ŒþŒy )Find all filter and test names used in the template and
assign them to variables in the compiled namespace. Checking
that the names are registered with the environment is done when
compiling the Filter and Test nodes. If the node is in an If or
CondExpr node, the check is done at runtime instead.
.. versionchanged:: 3.0
Filters and tests in If and CondExpr nodes are checked at
runtime instead of compile time.
útry:z = environment.ú]zexcept KeyError:z
@internalcodeúdef z
(*unused):zraise TemplateRuntimeError("No Néÿÿÿÿú named z found.")) r´r2Úsortedrì)r'r rIr)Úid_mapr{Ú
dependencyrRs r4Úpull_dependencieszCodeGenerator.pull_dependenciess\ôàò ˆDØ M‰M˜$Õ ð ð\‰\˜7Ÿ?™?¨IÐ 
Ø
Øð
ð*
ó Ñ %ˆFE˜:ô˜u
ò
ؘ%Ø#'×#<Ñ#<Ó#>F˜4˜
Ø &¨¡, ¨¸z¸lÈ!ÈDÈ8ÐSTÐ ØÐ
ؘԠ f¨T¡l ^°:Ð
ØØ5°jÀÀ"°oÐ5Fؘd˜X Yðð Ø ò)
ñ r6c ó´g}|jjj«D]‰\}\}}|tk(rŒ|tk(r)|j |d|j
«d|d«ŒE|tk(r|j |d|«Œe|tk(r|j|«Œ€td«|r$|j dj|«d«yy) = r?rAzunknown load instructionú
= missing) rÚloadsryrrÚget_resolve_funcrrr ÚNotImplementedErrorÚjoin)r'r*ÚundefsÚtargetÚactionÚparams r4Ú enter_framezCodeGenerator.enter_frameH؈Ø',§}¡}×':Ñ':×'@Ñ'@Ó'Bò
FÑ #ˆF‘OV˜UØÔØÔ & ¨¨T×-BÑ-BÓ-DÐ,EÀQÀuÀiÈqМ>Ò & ¨¨U¨GÐÔ
˜)Ð*DÓ
Fñ Ø N‰N˜eŸj™j¨ÓÐ  r6Úwith_python_scopecó²|sUg}|jjD]}|j|«Œ|r$|jdj |«d«yyy)Nr1r2)rr3r r6)r'r*r<r7r8s r4Ú leave_framezCodeGenerator.leave_frameXsY٠؈Ÿ-™-×
&Ø
˜
Ø %§*¡*¨VÓ"4Ð!5°ZÐð !r6Ú async_valueÚ
sync_valuecó6|jjr|S|Sr.)rBÚis_async)r'r?r@s r4Ú choose_asynczCodeGenerator.choose_async`sØ"×.×7ˆG¸Gr6có,|j«d|S)Nr))rC)r'rRs r4ÚfunczCodeGenerator.funccsØ×& d¨4¨&Ð1r6c
óè|j«}|jj|«t|«}d}t «}g}t |j «D]s\}}|jdk(r|}|jdvr|j|j«|j|jj|j««Œut|jd«} d| vrZ|' |j|t|j «z
n*|j|jj%d««d|_d| vr5d|vr1|j|jj%d««d|_d| vr5d|vr1|j|jj%d««d|_d |_|jj|«|j/|j1d
«d d j3|«d
|«|j5«|j7|«|j9|«|j;|«t |j «D\}}|jj|j«}
|j/d|
d«|j5« |j|t|j «z
} |j/|
d«|j=| |«|j?|
«|jA«Œ¾|jC«|jE|j|«|jG|d¬«|jI|d¬«|jA«||fS#t$r |j!d|j"«YŒvwxYw#t$r1|j/|
d|jd|jd«YŒîwxYw)z/Dump the function def of a macro or call block.NÚcaller)r,Úvarargs)rGr,rHzhWhen defining macros or call blocks the special "caller" argument must be omitted or be given a default.Tr,rHmacror?r>ú):úif ú is missing:r1z = undefined("parameter z was not provided", name=rA)©r<)%rªrÚ analyze_noderruÚ enumeraterrRr Úrefr€ÚbodyÚdefaultsÚlenÚ
IndexErrorréÚdeclare_parameterr…r†r‡r—rEr6r˜r;Úpush_parameter_definitionsr2Úmark_parameter_storedrõÚpop_parameter_definitionsrr>) r'r)r*Ú macro_refÚexplicit_callerÚskip_special_paramsrÚidxr"rrPÚdefaults r4Ú
macro_bodyzCodeGenerator.macro_bodyfsbð
ˆØ
×" ˜T“Nˆ àˆÜ!›eÐØˆä! $§)¡)Ó 5‰HˆCØx‰x˜#Ø"%Øx‰xÐ#ׯ©Ô K‰K˜Ÿ
×)¨#¯(©(Ó % T§Y¡YÐ0OÓPˆ
à  ÐØ—MM /´C¸¿ ¹ ³NÑ"BÓ ˜EŸM™M×;¸HÓFØ(,ˆ  ! hÐ6IÑ&IØ K‰K˜Ÿ
×Ó BØ(,ˆIÔ ˜
Ñ " yÐ8KÑ'KØ K‰K˜Ÿ
×7¸ Ó CØ)-ˆ &+ˆÔ
×"  ˜$Ÿ)™) GÓ-¨Q¨t¯y©y¸«Ð.?¸rÐBÀDÔ Œ
à Ø ×јÔà ×Ô! $§)¡)Ó ‰HˆCØ—-‘-×# C§H¡HÓ-ˆ N‰N˜S    K‰KŒMð
Ÿ-™-¨¬c°$·)±)«nÑ(<Ñ=ð #  c˜{Ô
˜7  × &  L‰L ð
× ˜Ÿ ™   ×# E¸4Ð ×ј°$ÐÔ ŒàÐøôeØ—I‘IðŸ ÷ ðûôBò
ØØ3°C·H±H°<ð@Ø ŸX™X˜L¨ðð
ús$Ã-%N Ê7%N7Î %N4Î3N4Î77O1Ï0O1rYc
óVdjd|jjD««}t|jdd«}t |jj«dk(r|dz
}|j d|d|d |j d|jd|jd
«y) z<Dump the macro definition for the def created by macro_body.r>c3óFK|]}t|j«Œy­wr.)ÚreprrRrs r4rfz*CodeGenerator.macro_def.<locals>.<genexpr>»sèø€ÒH¨qœd 1§6¡6ŸlÑHùs!rRNr
ú,zMacro(environment, macro, z, (z), z, context.eval_ctx.autoescape)) r6r)rÚgetattrrSrEr†r‡r…)r'rYr*Ú arg_tuplerRs r4Ú macro_defzCodeGenerator.macro_def¹à—IH°I·N±N×4GÑ4GÔHˆ Üy—~~ v¨tÓ4ˆÜ ˆy~‰~× #  ˜Ñ ˆ
ب°°I°;ð?Ø×,¨B¨y×/IÑ/IÐ.LðMØ×,Ð,Jð
Lõ
r6có^d|j}|j|d|j}|S)z.Return a human readable position for the node.zline ú in )rR)r'r)s r4ÚpositionzCodeGenerator.positionÅs5àT—[[
"ˆØ 9‰9Ð Ø4t˜DŸI™I˜)ˆˆ r6cóŠdjd|jj«j«D««}d|dS)Nr>c3ó0K|]\}}|d|Œy­w©rNr)rdrRr8s r4rfz3CodeGenerator.dump_local_context.<locals>.<genexpr>Ís'èø€ò
áˆh˜Ô 
ùóú{r)r6rÚ dump_storesry)r'r*Úitems_kvs r4Údump_local_contextz CodeGenerator.dump_local_contextÌsDØ—9
à %§
¡
× 9Ñ 9Ó ;× AÑ AÓ Cô
ó
ˆðH:˜ Ð r6có®|jd«|jd«|jd«|jd«|jd«y)z·Writes a common preamble that is used by root and block functions.
Primarily this sets up common local helpers and enforces a generator
through a dead branch.
z$resolve = context.resolve_or_missingz!undefined = environment.undefinedzconcat = environment.concatzcond_expr_undefined = Undefinedzif 0: yield NoneN©r¸s r4Ú
write_commonszCodeGenerator.write_commonsÓsGð
Ð Ð Ð
Ð Ð*r6cój|jj|jj««y)aQPushes all parameter targets from the given frame into a local
stack that permits tracking of yet to be assigned parameters. In
particular this enables the optimization from `visit_Name` to skip
undefined expressions for parameters in macros as macros can reference
otherwise unbound parameters.
N)r rÚdump_param_targetsrïs r4rVz(CodeGenerator.push_parameter_definitionsàs%ð
×Ñ×$ U§]¡]×%EÑ%EÓ%GÕHr6có8|jj«y)z+Pops the current parameter definitions set.N)Úpopr¸s r4rXz'CodeGenerator.pop_parameter_definitionsésà ×Ñ×#r6r8cóZ|jr|jdj|«yy)z€Marks a parameter in the current parameter definitions as stored.
This will skip the enforced undefined checks.
r*N)©r'r8s r4rWz#CodeGenerator.mark_parameter_storedís+ð × Ò Ø × !  %× -¨fÕ  !r6có:|jj|«yr.)r rys r4Úpush_context_referencez$CodeGenerator.push_context_referenceôsØ ×%×,¨VÕ4r6có8|jj«yr.)rwr¸s r4Úpop_context_referencez#CodeGenerator.pop_context_reference÷sØ ×%×+r6có |jdS)Nr*©r¸s r4Úget_context_refzCodeGenerator.get_context_refúsØ×,¨RÑ0r6có6|jd}|dk(ry|dS)Nr*Úresolvez.resolverrys r4r4zCodeGenerator.get_resolve_funcýs*Ø×.¨rÑØ  ØØ˜Ð"r6cóL|j«d|j|«dS)Nz .derived(rA)r€rps r4Úderive_contextzCodeGenerator.derive_contexts,Ø×°4×3JÑ3JÈ5Ó3QÐ2RÐRSÐTr6có>|jsy||jdvS)z4Checks if a given target is an undeclared parameter.Fr*)rys r4Úparameter_is_undeclaredz%CodeGenerator.parameter_is_undeclareds$àר˜×.¨rÑ2r6cóJ|jjt««y)z+Pushes a new layer for assignment tracking.N)r rur¸s r4Úpush_assign_trackingz"CodeGenerator.push_assign_tracking sà ×Ñ×!¤#£%Õ(r6cóx|jj«}|js|js |jr|sy|Dcgc]
}|dddk7sŒ |Œ}}t |«dk(rt
t|««}|jj|«}|jr|jd|d|«y|jr|jd|d|«y|jd|d|«n¾|jr|jd«n/|jr|jd «n|jd
«tt|««D]I\}}|r|jd «|jj|«}|j|d |«ŒK|jd
«|jsu|jsh|ret |«dk(r|jd|dd«yd jtt t|«««}|jd|d«yyyycc}w)zoPops the topmost level for assignment tracking and updates the
context variables if necessary.
Nr
Ú_z _loop_vars[ú] = z _block_vars[ú
context.vars[z_loop_vars.update({z_block_vars.update({úcontext.vars.update({r>rú})úcontext.exported_vars.add(rrAzcontext.exported_vars.update((rò)rwrrSÚnextÚiterrrPrOr,rEr6Úmapra) r'r*ÚvarsrÚ public_namesrRrPr\Ú names_strs r4Úpop_assign_trackingz!CodeGenerator.pop_assign_trackingsÿð×'ˆà××—Nà Ø#'Ö8˜a¨1¨R¨a¨5°C«<šÐ8ˆ Ð ˆt‹9˜Š>Üœ˜T›
Ó#ˆDØ—-‘-×# DÓ)ˆCØ×ÒØ ¨T¨H°D¸¸ÐØ× Ò Ø ¨d¨X°T¸#¸ÐØ N‰N˜]¨4¨(°$°s°eÐ ×ÒØÐ×ÐÐ&¤v¨d£|Ó
/‘ Ø—JJ˜—mm×Ó-Ø
˜d˜X  
J‰J Ø× Ò ¨×)9Ò)9¹lÜ  Ð!;¸LȹOÐ;NÈaÐ ŸI™I¤c¬$´°|Ó0DÓ&EÓF ØÐ!?À ¸{È"Ð ?KÐ)9Ð ùò19s Á
H7ÁH7c ó
|Jd«t|j|j«}ddlm}ddlm}|jj rt||z«}n t|«}|jddj|«z«|jrdnd}|jtj«du}|jtj«D]]} | j|j vr*|j#d | jd
| j$«| |j | j<Œ_|jtj&«D]}
|
j(|j*vsŒ|
j(} |j-«x|j*| <} d | vr0| j/d d«\}
}|jd |
d
|d| «Œ{|jd| d| «Œ“|jd|j«|j|j1d«d|dd¬«|j3«|j5«t7|«}dt9|j:d«vr/|j<j?d«}|j|d«|j<jA|«dx|_!|_"|xr
|jF |_$|r|jd«|jK|«|jM|j:«|jO|j:|«|jQ|d¬«|jS«|r|jFs!|j3«|jd«|j3«|jj s|jd«n•|jd«|jd«|j3«|jd«|j3«|jd «|jS«|jS«|jd!«|jSd|jF z«|j jU«D\}} |j|j1d"|z«d|d| d«|j3«|j5«t7|«}d|_+t9| j:d#«}d|vr/|j<j?d«}|j|d«d$|vr5|j<j?d$«}|j|d%|d&|d'«|j<jA| «||_,|jd(«|jK|«|jM| j:«|jO| j:|«|jQ|d¬«|jS«Œ†djd)„|j D««}|jd*|d+d¬«d,jd-„|jZD««}|jd.|«y)/Nzno root frame allowedr
)Úasync_exported)Úexportedzfrom jinja2.runtime import r>Úz, environment=environmentzblock z defined twiceú.zfrom z import z as zimport zname = Úrootz(context, missing=missingrJ)r r'r¸z = TemplateReference(context)Tzparent_template = NonerMúif parent_template is not None:z4yield from parent_template.root_render_func(context)z0agen = parent_template.root_render_func(context)r&zasync for event in agen:z yield eventzfinally: await agen.aclose()Úblock_)r'ÚsuperrŸz = context.super(z, block_rAz_block_vars = {}c3ó*K|] }|d|Œ
y­w)z: block_Nrrs r4rfz/CodeGenerator.visit_Template.<locals>.<genexpr>²sèø€Ò!K¸! Q °!°Ô"5Ñ!Kùsz
blocks = {rú&c3ó0K|]\}}|d|Œy­w)rNrrhs r4rfz/CodeGenerator.visit_Template.<locals>.<genexpr>´sèø€ÒG©t¨q°! 1 # Q q 
ÑGùrlz
debug_info = ).rrBrRÚruntimer˜r™rBr,r6rUÚfindr ÚExtendsÚfind_allrÅr×Ú ImportedNameÚ
importnamerÖÚrsplitrErsr+r€rQrrUrNrr—r;r/rr>ryrr™)r'r)r*r0r˜r™Úexported_namesÚenvenvÚ have_extendsr™Úimport_ÚimpÚaliasÚmoduleÚobjrPrRrrÚ
blocks_kv_strÚ debug_kv_strs r4Úvisit_TemplatezCodeGenerator.visit_Template=sðˆ5ˆ}ܘt×·±Óå × Ñ × # H¨~Ñ$=Ó>‰Nä# -ˆ Ð4°t·y±yÀÓ7PÑÐ,Gˆð—y‘y¤§¡Ó/°tÐ ð—]‘]¤5§;¡;Ó ,ˆEØz‰z˜TŸ[™[Ñ— ‘ ˜F 5§:¡: .°ÐÇÁÔNØ&+ˆDK‰K˜Ÿ
Ò  —}}¤U×%7Ñ%7Ó ?ˆ××)<Ñ)<Ò×(Ø37×3LÑ3LÓ3NÐN×# (¨5ؘ#:Ø"%§*¡*¨S°!Ó"4KF˜—NN U¨6¨(°(¸3¸%¸tÀEÀ7Ð#KÕ—NN W¨S¨E°°e°WÐ#=Õ
˜ §¡ 
Ð
Øy‰y˜Ó Ð!Ð!:¸6¸(À"Ð EÈQð ô
ð
Œ
Ø ×ÑÔôh“ˆØ ”_ T§Y¡Y° Ó —--×1°&Ó9ˆ N‰N˜c˜UÐ"?Ð 
×" (Ø+/Ð/ˆŒ˜œØ%1Ò%P¸$×:PÑ:PÐ6PˆÔ Ø N‰NÐ  ×Ñ˜ÔØ ×јtŸy™yÔ ˜Ÿ ™  5Ô ×ј°$ÐÔ Œò Ø×
ØÐ K‰KŒMØ×ÐИvÔ
ØÐ
ؘ}Ô Ø ØÐ L‰L˜ $×"8Ñ"8Ð  Ÿ;™;× ‰KˆD N‰NØ—9‘9˜X¨™_Ó.Ð.GÈÀxÈrÐØô
ð
K‰KŒMØ × Ñ Ô ô  ›/ˆKØ&*ˆ ¯©Ð5FÓGˆJؘÑ;¸FÓCØ # Ð&CИ!×;¸GÓDØ # Ð&7¸°x¸xÈÀvÈQÐ × Ñ × ,¨UÔ 3Ø $ˆKÔ Ø N‰NÐ × Ñ ˜ × " 5§:¡:Ô O‰O˜EŸJ™J¨ Ô × Ñ ˜[¸DÐ Ô L‰LŽNð7 ð:Ÿ ™ Ñ!K¸t¿{¹{Ô!KÓKˆ
Ø ˜ ] O°2Ð6¸aˆÔ—x‘xÑG°t·±Ô Ø ˜ |Ð&6Ð8r6cód}|jrB|jry|jdkDr&|jd«|j «|dz
}|j
r|j
|«}n|j«}|jr`|jd|jd|«|j «|jd|jd|«|j«|jjs0|j€$|jd |jd
|d |«nÌ|jd |jd
|d «|jd
«|j «|j|j«d|«|j «|jd|«|j«|j«|jd|jdd««|j|«y)z.Call a block and register it for the template.rif parent_template is None:r
zif len(context.blocks[z]) <= 1:z+raise TemplateRuntimeError("Required block z not found")zyield from context.blocks[z][0](rAzgen = context.blocks[r&úfor event in gen:Úeventú finally: úawait gen.aclose()ú gen.close())Úscopedr„r€ÚrequiredrRrBrBr˜rCr)r'r)r*r“s r4zCodeGenerator.visit_Block·àˆØ >Š>ðר×" Ð
ؘ
à ;Š;Ø×)¨%Ó0‰Gà×,ˆGà =Š=Ø N‰NÐ3°D·I±I°=ÀÐIÈ4Ô K‰KŒMØ N‰NØ=¸d¿i¹i¸]È,Ðô
ð
L‰LŒNà×Ñ×(¨U¯\©\Ð-AØ N‰NØ,¨T¯Y©Y¨M¸¸w¸iÀqÐIÈ4õ
ð
N‰NÐ2°4·9±9°-¸uÀWÀIÈQÐ N‰N˜ K‰KŒMØ N‰NØ×'Ð'8Ðô
ð
K‰KŒMØ × Ñ ˜g uÔ L‰LŒNØ L‰LŒNØ N‰NؘD×-Ð.BÀMÓ
ð
r6có¨|js|jd|j«|jdkDrd|js!|j d«|j
«|j d«|jr
t«|j«|j d|«|j|j|«|jd|jd«|j d«|j
«|j d «|j«|jrd
|_|xjd z
c_y )
zCalls the extender.z,cannot use extend from a non top-level scoperrz5raise TemplateRuntimeError("extended multiple times")z+parent_template = environment.get_template(r>rAz9for name, parent_block in parent_template.blocks.items():z8context.blocks.setdefault(name, []).append(parent_block)Tr
N)r2ÚtemplaterErRr©r'r)r*s r4Ú
visit_ExtendszCodeGenerator.visit_Extendsèsà~Š~Ø I‰IÐDÀdÇkÁkÔ
× Ñ  Ò
×Ð
Ø N‰NÐ ×"“nÐ à ÐDÀdÔ
4—== 
R˜Ÿ ™ }  Ð Œ
Ø Ð Œð
?Š?Ø%)ˆ 
×Ò˜qÑ Ör6cóˆ|jr!‰jd«j«d}t|jt
j «rTt|jjt«rd}nct|jjttf«r9d}n6t|jt
jt
jf«rd}jd|d|«j|j«jdjd«|jrs‰j!«jd «j«jd
«j!«jd «j«dˆˆfd
}|j"r£‰jdj%«d«jd«j«jj'«d«|«j!«jdj'dd««n@‰j(j*rjd«|«njd«|jrj!«y y )zHandles includes.r&Úget_or_select_templateÚ get_templateÚselect_templateztemplate = environment.r?r>rAzexcept TemplateNotFound:rNcójj«jd«j«y)Nr¸)r)r*r's€€r4Ú loop_bodyz.CodeGenerator.visit_Include.<locals>.loop_body-s%ø€Ø K‰KŒMØ × Ñ ˜g  L‰LNr6zNgen = template.root_render_func(template.new_context(context.get_all(), True, ròzGfor event in (await template._get_default_module_async())._body_stream:z6yield from template._get_default_module()._body_streamrÂ)Úignore_missingrîrXr¿r ÚConstr_rrrsrtÚTupleÚListr2rErRÚ with_contextrprCrBrB)r'r)r*Ú func_namerÇs` ` r4Ú
visit_IncludezCodeGenerator.visit_Includesù€à × Ò Ø N‰N˜6Ô K‰KŒMà,ˆ Ü d—m‘m¤U§[¡[Ô ˜$Ÿ-™-×-¬sÔ*‘ ܘDŸM™M×/´%¼°Ô-‘ Ü
˜Ÿ
¬¯ © ´U·Z±ZÐ'@Ô
)ˆIà а ¸1Ð=¸tÔ
4—== 
R˜Ÿ ™ }  × Ò Ø L‰LŒNØ N‰NÐ K‰KŒMØ N‰N˜ L‰LŒNØ N‰N˜ K‰KŒMö ð
× Ò Ø N‰Nðà×+¨EÓ3°2ð
ð
N‰N˜ K‰KŒMØ N‰N˜d×2Ð2CÐ ŒKØ L‰LŒNØ N‰NؘD×-Ð.BÀMÓ
ð×
Ñ
×
N‰Nð
ñ
 N‰NÐ × Ò Ø L‰L r6có–|j|jd«d«|j|j|«|jd|jd«|j
r;d|jd«}|j|d|j
|«d«y|jd |jd«d
«y) await zenvironment.get_template(r>z).Ú make_moduleÚ_asyncz(context.get_all(), True, rAÚ_get_default_modulez (context))rErCr2r¿rRrp)r'r)r*Úf_names r4Ú_import_commonzCodeGenerator._import_commonLð
d×Ó2Ð2KÐ
4—== 
R˜Ÿ ™ }  × Ò Ø" 4×#4Ñ#4°XÓ#>Ð"?Ð@ˆ J‰JØ4°T×5LÑ5LÈUÓ5SÐ4TÐTUÐ
ð
J‰JÐ,¨T×->Ñ->¸xÓ-HÐ,IÈÐ Tr6có~|j|jj|j«d|«|jr|j d|jd«|j
||«|jr<|jjd«s |jd|jd«yyy)zVisit regular imports.r1rúcontext.exported_vars.discard(rAN)rrPr8rEÚ
startswithrÀs r4Ú visit_ImportzCodeGenerator.visit_Import[s”à ˜%Ÿ-™-×+¨D¯K©KÓ9¸Ð=¸ >Š>Ø J‰J˜ t§{¡{ o°TÐ  ×јD  >Š> $§+¡+×"8Ñ"8¸Ô"=Ø N‰NÐ;¸D¿K¹K¸?È!Ð #>ˆ>r6c óÌ|j|«|jd«|j|«g}g}|jD]H}t |t
«r|\}}n|}|j
jj|«d|d«|j
djj|«d«|j«|j|«jdd«jdd «}d
|d |}|j
jj|«d |d
|d«|j«jsŒ|j|«|jd«rŒ8|j|«ŒK|rst!|«dk(r6|d}|j
d|djj|««n/dj#ˆfd|D««} |j
d| d«|r\t!|«dk(r|j
d|dd«ydj#t%t&|««}
|j
d|
d«yy)zVisit named imports.zincluded_template = z = getattr(included_template, z
, missing)rKrLrmz{{rz}}z9the template {included_template.__name__!r} (imported on z%) does not export the requested name z = undefined(fz, name=rAr
rrr>c3ó^K|]$}|djj|«Œ&y­wrk)rrP)rdrRr*s €r4rfz1CodeGenerator.visit_FromImport.<locals>.<genexpr>s1øèø€ò%Ø?Cth˜b §¡×!2Ñ!2°4Ó!8Ð 9Ô%ùsƒ*-rr×z)context.exported_vars.difference_update((ròN)rrEr{rXrsrrPrhÚreplacerõr rSr6rra) r'r)r*Ú var_namesÚdiscarded_namesrRrhÚmessageÚnames_kvr•s ` r4Úvisit_FromImportzCodeGenerator.visit_FromImportfsTø€à Ø
Ð ×јD %Ôˆ ؈ؗJ‘Jó 2ˆ˜Ô" Ø N‰NØ—=‘=×$ -/Ø/3¨h°jðBô
ð
N‰N˜S §¡×!2Ñ!2°5Ó!9Ð :¸ K‰KŒMð
—}‘} TÓ2°3¸ÓEÀcÈ4ÓPˆ!Ø!) 
ð+7Ø7;°hð@ð
ð
N‰NØ—==×$ ,¨N¸7¸+ÀWÈTÈHÐTUÐ
ð
L‰LŒNØ~Œ~Ø× Ñ  Ô×Ö#×*¨5Ö1ð9 2ñ< Ü9~ Ò  ‘|Ø ¨t¨h°d¸5¿=¹=×;LÑ;LÈTÓ;RÐ:SП9™9ó%ØGPô%óðÐ!7¸°zÀÐ Ü# qÒÐ!?ÀÐPQÑ@RÐ?UÐUVÐ ŸI™I¤c¬$°Ó&@ÓA ØØ¸{È"Ðð r6có"|j«}d|_|j«}|j«}|jxsOdt|j d¬«d«vxs/t d|j
tj«D««}d}|r|jjd«}|jj|d¬«|jr|jj|d ¬«|jr¶|j«}|jj|d
¬«|j|j!|«d |j«|j#«|j%|«|j|j'd d
««|j)|j*|«|j-d«|j-|j'dd««|j-d«|j#«|jd|j«|j)|j|«|j-d«|j#«|jd«|j)|j*|«|j/d«|j1|d¬«|jrV|j|j!d«d|«|j#«|j3|«|j2|_|r|j|d«|j
tj4«D]>} | j6dk(sŒ| j8dk(sŒ#|j;d| j<«Œ@|jr$|j«}
|j|
d«|j|j'd d
«|«|j)|j*|«|r(|j-d|d|j'd«d«n|j-d«|jr|j-d«|jr|j-d«nn|j>j@r|s|j-d «|j)|jB|«|j>j@r|s|j-d!«|jr|j-d!«|jr|j-d"«n|j-|rd#nd«|j#«|j%|«|jd$«|jE|jF|«|jr|j
d%«|j/«|j1||jxr
|j ¬«|jrs|jd
d«|j#«|j%|«|jE|j|«|j1|«|j/«|jrâ|jI|«|j/«|jK||«|j-|j'd&«d'«|j>j@r|j-d «|j)|jB|«|j>j@r|j-d!«|j-d(«|jM|«|jNr3|jNd)jQ|jjR«yy)*NTÚloop)rQ)Úonly)c3ó4K|]}|jŒy­wr.))rdr™s r4rfz*CodeGenerator.visit_For.<locals>.<genexpr>ªsèø€ÒH E5—<•<ÑHùrrQ)Ú
for_branchÚelseÚtestz(fiter):z
async for zfor rgzauto_aiter(fiter)Úfiterú:rKérMz%(reciter, loop_render_func, depth=0):r2Ústorez8Can't assign to special loop variable in for-loop targetz = 1r>ÚAsyncz LoopContext(r?Úreciterz auto_aiter(rAz&, undefined, loop_render_func, depth):z
, undefined):z_loop_vars = {}z = 0rÐzloop(z, loop)r*)*rªÚ recursiver€Úiter_child_nodesrr rrUrNÚelse_rèrEr;rCr2r8rEr>r˜rRrBrBrrrQrÿrÚdifference_updateÚstores) r'r)r*Ú
test_frameÚ
else_frameÚ
extended_loopÚloop_refÚloop_filter_funcrRÚiteration_indicators r4Ú visit_ForzCodeGenerator.visit_ForØ—[[“]ˆ
Ø $ˆ
ÔØ—[[“]ˆ
Ø—[[“]ˆ
ð
N‰Nò
IØÜ˜t×4¸)ÐDÀiÓQò
IôÑH¨T¯]©]¼5¿;¹;Ó-GÔ ðˆÙ Ø;¸FÓCˆHà×Ñ׸Р:Š:Ø × Ñ × +¨D¸VÐ 9‹9Ø Ø × Ñ × +¨D¸VÐ N‰N˜dŸi™iÐ(8Ó:¸CÀTÇYÁYÔ K‰KŒMØ × Ñ ˜ZÔ N‰N˜4×,¨\¸6Ó J‰Jt—{{  J‰J Ø J‰Jt×(Ð)<¸ J‰JsŒOØ K‰KŒMØ N‰N˜5 $§)¡)Ô J‰Jt—yy  J‰JsŒOØ K‰KŒMØ N‰N˜ J‰Jt—{{ JÔ L‰L˜ŒOØ × Ñ ˜Z¸4Ð Ô
>Š>Ø N‰NØ—99˜%Ð%JÐKÈTô
ð
K‰KŒMØ K‰K˜
Ô !+× 1Ñ 1ˆJÔ ñ Ø N‰N˜h˜Z zÐ —M‘M¤%§*¡*Ó ˆx‰x˜" t§y¡y°FÓ':Ø Ø—Kð ð :Š:Ø"&×";Ñ";Ó"=Ð Ø N‰NÐ2°$Ð  °vÓÔ
4—;; 
Ô Ø J‰J˜˜H˜: T¨$×*;Ñ*;¸GÓ*DÐ)EÀ\Ð J‰J à 9Š9Ø J‰JÐ+¨1Ð >Š>Ø J‰J ×Ñר
˜ J‰Jt—y‘y %Ô ×Ñר
˜3”Ø 9Š9Ø J‰JsŒOà >Š>Ø J‰JÐ J‰J©-‘¸SÔ  Œ
Ø ×Ñ˜Ô Ð ˜Ÿ ™  :Ô :Š:Ø N‰NÐ2°$Ð  ŒØ ×ÑØ ¨$¯.©.Ò*KÀÇÁ¸^ð ô
ð :Š:Ø N‰N˜SÐ!4Ð 5°QÐ K‰KŒMØ × Ñ ˜ZÔ O‰O˜DŸJ™J¨
Ô × Ñ ˜ZÔ L‰LŒNð >Š>Ø ×
Ô L‰LŒNØ × Ñ ˜U DÔ J‰J˜$×+¨HÓ6°eÐ ×Ñ×
˜ J‰Jt—y‘y %Ô ×Ñ×
˜3”Ø J‰J N‰N˜5Ô  × Ò Ø × Ñ ˜rÑ "× 4°Z×5GÑ5G×5NÑ5NÕ  r6cóæ|j«}|jd|«|j|j|«|j d«|j «|j
|j|«|j«|jD]}}|jd|«|j|j|«|j d«|j «|j
|j|«|j«Œ|jrN|jd«|j «|j
|j|«|j«yy)NrKzelif ró) r2rErrQÚelif_rñ)r'r)r*Úif_framerüs r4Úvisit_IfzCodeGenerator.visit_If(Ø—::“<ˆØ u˜
4—99˜
Ø Œ
Ø ˜Ÿ ™  8Ô ŒØ—Z‘Zò ˆEØ N‰N˜7  J‰Ju—zz  J‰JsŒOØ K‰KŒMØ O‰O˜EŸJ™J¨Ô L‰L
 ð :Š:Ø N‰N˜7Ô K‰KŒMØ O‰O˜DŸJ™J¨Ô L‰L r6cóª|j||«\}}|j«|jrY|jj d«s|j d|jd«|j
d|jd«|j |jj|j«d«|j||«y)NrŠrrArr1)
r^rrRrErrPre)r'r)r*Ú macro_framerYs r4Ú visit_MacrozCodeGenerator.visit_Macro=Ø!%§¡°°uÓ!=ш  ŒØ >Š>Ø—99×Ô
п ¹ °}ÀAÐ N‰N˜]¨4¯9©9¨-°tÐ 
e—mmׯ © Ó3°3Ð y .r6cóö|j||«\}}|jd«|j||«|j||«|j |j
|d¬«|j
|«y)Nz caller = T)Úforward_caller)r^rerÿÚ
visit_CallÚcallr)r'r)r*Ú
call_framerYs r4Úvisit_CallBlockzCodeGenerator.visit_CallBlockGscØ $§¡°°eÓ <ш
  y *Ô ×ј Ô ˜Ÿ ™  5¸ˆÔ r6cóv|j«}|jj|«|j|«|j |«|j |j |«|j||«|j|j|«|j|«|j|«yr.) rrNr;r˜rrQrÿÚfilterrr>)r'r)r*Ú filter_frames r4Úvisit_FilterBlockzCodeGenerator.visit_FilterBlockOsØ—{‘{“}ˆ Ø×Ñ×)¨$Ô ×Ñ˜Ô  ˜Ÿ ™  <Ô ×ј Ô ×ј$Ÿ+™+ |Ô Ø ×јÕ&r6có°|j«}|jj|«|j|«t |j
|j «D]J\}}|j«|j||«|jd«|j||«ŒL|j|j|«|j|«y)Nr1)
rrNr;ÚzipÚtargetsÚvaluesrr2rErrQr>)r'r)r*Ú
with_framer8Úexprs r4Ú
visit_WithzCodeGenerator.visit_WithZØ—[[“]ˆ
Ø×Ñ×Ô ×јԠ§ ¡ ¨d¯k©kÓ $‰LˆF L‰LŒNØ J‰Jv˜ J‰J Ø J‰Jt˜ 
˜Ÿ ™  :Ô ×јÕ$r6có^|j|«|j|j|«yr.)rr2r)s r4Úvisit_ExprStmtzCodeGenerator.visit_ExprStmtfs Ø Ø
4—99˜$r6cóteZdZUejej
defed<ejeed<y)úCodeGenerator._FinalizeInfo.ÚconstÚsrcN)rr8ÚCallablerrÚ__annotations__rr6r4Ú
_FinalizeInforjs,Øz‰z˜!Ÿ*™* S¨# 
Z‰Z˜‰_Ôr6rr_cót|«S)z¼The default finalize function if the environment isn't
configured with one. Or, if the environment has one, this is
called on that function's output for constants.
)rrrzs r4Ú_default_finalizezCodeGenerator._default_finalizensô 5r6Ú _finalizecóbj jSjx}Šd}jjrÌd}jjŠtj
dtj dtjdijt j««}d}|€(dtjdtjfˆˆfd }n4||d }|dk(r(dtjdtjfˆˆˆfd
}j||«_jS) a‰Build the finalize function to be used on constants and at
runtime. Cached so it's only created once for all output nodes.
Returns a ``namedtuple`` with the following attributes:
``const``
A function to finalize constant data at compile time.
``src``
Source code to output around nodes to be evaluated at
runtime.
Nzenvironment.finalize(rÔúcontext.eval_ctxrBr_r%có |««Sr.r)r_r]Ú env_finalizes €€r4Úfinalizez.CodeGenerator._make_finalize.<locals>.finalizešsø€Ù"¡<°Ó#6Ó7r6r>có6j|««Sr.)rB)r_r]r"r's €€€r4r#z.CodeGenerator._make_finalize.<locals>.finalize¢sø€Ù&¡|°D×4DÑ4DÀeÓ'LÓMr6) rrrBr#rÚ eval_contextÚgetÚfrom_objr8r9r)r'r#rÚpass_argr]r"s` @@r4Ú_make_finalizezCodeGenerator._make_finalizexsú€ð >‰>Ð —> "׈à × Ñ × )ˆCØ×4ˆLä× Ñ  ×%Ð'9Ü×$ ÷‰cÜ×! ,Óð
ðˆHàÐð8¤A§E¡Eð8¬a¯e©e÷˜˜h˜Z rÐ*à˜}ÒN¬¯©ðN´!·%±%÷Nð×+¨H°cÓŒØ~‰~Ðr6Úgroupcó*tt|««S)z™Given a group of constant values converted from ``Output``
child nodes, produce a string to write to the template module
source.
)rar)r'r*s r4Ú_output_const_reprz CodeGenerator._output_const_repr¨sô
”F˜5“MÓ"r6r#cóæ|j|j«}|jjr t|«}t |t
j «r t|«S|j|«S)aCTry to optimize a child of an ``Output`` node by trying to
convert it to constant, finalized data at compile time.