ó
    Rì?g¡“  ã                   ó
  • S r SSKrSSKJr  SSKrSSKrSSKrSSKrSSK	r	SSK
Jr  SSKJr  SSKJrJrJr  SSKJrJrJrJrJrJrJrJr  SSKr\R6                  (       a  SSKJrJr  S	r " S
 S5      r\" 5       r S\!S\!S\!4S jr" " S S\#5      r$ " S S\#5      r% " S S\%5      r& " S S\%5      r' " S S\#5      r( " S S\(5      r) " S S\(5      r* " S S\(5      r+ " S  S!\(5      r, " S" S#\(5      r- " S$ S%\(5      r. " S& S'\(5      r/ " S( S)\(5      r0 " S* S+\(5      r1 " S, S-\(5      r2 " S. S/\25      r3 " S0 S1\(5      r4 " S2 S3\55      r6 " S4 S5\#5      r7 " S6 S7\#5      r8S8\!S\!4S9 jr9  S?S:\8S;\$S<\\!   S=\\!   S\*4
S> jjr:g)@aŒ  A simple template system that compiles templates to Python code.

Basic usage looks like::

    t = template.Template("<html>{{ myvalue }}</html>")
    print(t.generate(myvalue="XXX"))

`Loader` is a class that loads templates from a root directory and caches
the compiled templates::

    loader = template.Loader("/home/btaylor")
    print(loader.load("test.html").generate(myvalue="XXX"))

We compile all templates to raw Python. Error-reporting is currently... uh,
interesting. Syntax for the templates::

    ### base.html
    <html>
      <head>
        <title>{% block title %}Default title{% end %}</title>
      </head>
      <body>
        <ul>
          {% for student in students %}
            {% block student %}
              <li>{{ escape(student.name) }}</li>
            {% end %}
          {% end %}
        </ul>
      </body>
    </html>

    ### bold.html
    {% extends "base.html" %}

    {% block title %}A bolder title{% end %}

    {% block student %}
      <li><span style="bold">{{ escape(student.name) }}</span></li>
    {% end %}

Unlike most other template systems, we do not put any restrictions on the
expressions you can include in your statements. ``if`` and ``for`` blocks get
translated exactly into Python, so you can do complex expressions like::

   {% for student in [p for p in people if p.student and p.age > 23] %}
     <li>{{ escape(student.name) }}</li>
   {% end %}

Translating directly to Python means you can apply functions to expressions
easily, like the ``escape()`` function in the examples above. You can pass
functions in to your template just like any other variable
(In a `.RequestHandler`, override `.RequestHandler.get_template_namespace`)::

   ### Python code
   def add(x, y):
      return x + y
   template.execute(add=add)

   ### The template
   {{ add(1, 2) }}

We provide the functions `escape() <.xhtml_escape>`, `.url_escape()`,
`.json_encode()`, and `.squeeze()` to all templates by default.

Typical applications do not create `Template` or `Loader` instances by
hand, but instead use the `~.RequestHandler.render` and
`~.RequestHandler.render_string` methods of
`tornado.web.RequestHandler`, which load templates automatically based
on the ``template_path`` `.Application` setting.

Variable names beginning with ``_tt_`` are reserved by the template
system and should not be used by application code.

Syntax Reference
----------------

Template expressions are surrounded by double curly braces: ``{{ ... }}``.
The contents may be any python expression, which will be escaped according
to the current autoescape setting and inserted into the output.  Other
template directives use ``{% %}``.

To comment out a section so that it is omitted from the output, surround it
with ``{# ... #}``.


To include a literal ``{{``, ``{%``, or ``{#`` in the output, escape them as
``{{!``, ``{%!``, and ``{#!``, respectively.


``{% apply *function* %}...{% end %}``
    Applies a function to the output of all template code between ``apply``
    and ``end``::

        {% apply linkify %}{{name}} said: {{message}}{% end %}

    Note that as an implementation detail apply blocks are implemented
    as nested functions and thus may interact strangely with variables
    set via ``{% set %}``, or the use of ``{% break %}`` or ``{% continue %}``
    within loops.

``{% autoescape *function* %}``
    Sets the autoescape mode for the current file.  This does not affect
    other files, even those referenced by ``{% include %}``.  Note that
    autoescaping can also be configured globally, at the `.Application`
    or `Loader`.::

        {% autoescape xhtml_escape %}
        {% autoescape None %}

``{% block *name* %}...{% end %}``
    Indicates a named, replaceable block for use with ``{% extends %}``.
    Blocks in the parent template will be replaced with the contents of
    the same-named block in a child template.::

        <!-- base.html -->
        <title>{% block title %}Default title{% end %}</title>

        <!-- mypage.html -->
        {% extends "base.html" %}
        {% block title %}My page title{% end %}

``{% comment ... %}``
    A comment which will be removed from the template output.  Note that
    there is no ``{% end %}`` tag; the comment goes from the word ``comment``
    to the closing ``%}`` tag.

``{% extends *filename* %}``
    Inherit from another template.  Templates that use ``extends`` should
    contain one or more ``block`` tags to replace content from the parent
    template.  Anything in the child template not contained in a ``block``
    tag will be ignored.  For an example, see the ``{% block %}`` tag.

``{% for *var* in *expr* %}...{% end %}``
    Same as the python ``for`` statement.  ``{% break %}`` and
    ``{% continue %}`` may be used inside the loop.

``{% from *x* import *y* %}``
    Same as the python ``import`` statement.

``{% if *condition* %}...{% elif *condition* %}...{% else %}...{% end %}``
    Conditional statement - outputs the first section whose condition is
    true.  (The ``elif`` and ``else`` sections are optional)

``{% import *module* %}``
    Same as the python ``import`` statement.

``{% include *filename* %}``
    Includes another template file.  The included file can see all the local
    variables as if it were copied directly to the point of the ``include``
    directive (the ``{% autoescape %}`` directive is an exception).
    Alternately, ``{% module Template(filename, **kwargs) %}`` may be used
    to include another template with an isolated namespace.

``{% module *expr* %}``
    Renders a `~tornado.web.UIModule`.  The output of the ``UIModule`` is
    not escaped::

        {% module Template("foo.html", arg=42) %}

    ``UIModules`` are a feature of the `tornado.web.RequestHandler`
    class (and specifically its ``render`` method) and will not work
    when the template system is used on its own in other contexts.

``{% raw *expr* %}``
    Outputs the result of the given expression without autoescaping.

``{% set *x* = *y* %}``
    Sets a local variable.

``{% try %}...{% except %}...{% else %}...{% finally %}...{% end %}``
    Same as the python ``try`` statement.

``{% while *condition* %}... {% end %}``
    Same as the python ``while`` statement.  ``{% break %}`` and
    ``{% continue %}`` may be used inside the loop.

``{% whitespace *mode* %}``
    Sets the whitespace mode for the remainder of the current file
    (or until the next ``{% whitespace %}`` directive). See
    `filter_whitespace` for available options. New in Tornado 4.3.
é    N)ÚStringIO)Úescape)Úapp_log)Ú
ObjectDictÚexec_inÚunicode_type)ÚAnyÚUnionÚCallableÚListÚDictÚIterableÚOptionalÚTextIO)ÚTupleÚContextManagerÚxhtml_escapec                   ó   • \ rS rSrSrg)Ú_UnsetMarkeréÜ   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú2/usr/lib/python3/dist-packages/tornado/template.pyr   r   Ü   s   † Úr   r   ÚmodeÚtextÚreturnc                 óÚ   • U S:X  a  U$ U S:X  a2  [         R                  " SSU5      n[         R                  " SSU5      nU$ U S:X  a  [         R                  " SSU5      $ [        S	U -  5      e)
ar  Transform whitespace in ``text`` according to ``mode``.

Available modes are:

* ``all``: Return all whitespace unmodified.
* ``single``: Collapse consecutive whitespace with a single whitespace
  character, preserving newlines.
* ``oneline``: Collapse all runs of whitespace into a single space
  character, removing all newlines in the process.

.. versionadded:: 4.3
ÚallÚsinglez([\t ]+)Ú z
(\s*\n\s*)Ú
Úonelinez(\s+)zinvalid whitespace mode %s)ÚreÚsubÚ	Exception)r   r    s     r   Úfilter_whitespacer+   ã   sm   € ð ˆuƒ}ØˆØ	�Ó	Ü�vŠv�k 3¨Ó-ˆÜ�vŠv�m T¨4Ó0ˆØˆØ	�Ó	Ü�vŠv�h  TÓ*Ð*äÐ4°tÑ;Ó<Ð<r   c                   óÄ   • \ rS rSrSrSS\\S4S\\\4   S\S\	S   S	\\
\4   S
\	\\\4      S\	\   SS4S jjrS\S\4S jrS\	S   S\4S jrS\	S   S\S   4S jrSrg)ÚTemplateéü   z‹A compiled template.

We compile into Python from the given template_string. You can generate
the template from variables with generate().
z<string>NÚtemplate_stringÚnameÚloaderÚ
BaseLoaderÚcompress_whitespaceÚ
autoescapeÚ
whitespacer!   c                 óö  • [         R                  " U5      U l        U[        La  Ub  [	        S5      eU(       a  SOSnUcV  U(       a  UR
                  (       a  UR
                  nO1UR                  S5      (       d  UR                  S5      (       a  SnOSnUc   e[        US5        [        U[        5      (       d  XPl
        O$U(       a  UR                  U l
        O[        U l
        U(       a  UR                  O0 U l        [        U[         R                  " U5      U5      n[        U [        Xp5      5      U l        U R#                  U5      U l        X0l         [)        [         R*                  " U R$                  5      SU R                  R-                  S	S
5      -  SSS9U l        g! [         aG    [1        U R$                  5      R3                  5       n[4        R6                  " SU R                  U5        e f = f)a;  Construct a Template.

:arg str template_string: the contents of the template file.
:arg str name: the filename from which the template was loaded
    (used for error message).
:arg tornado.template.BaseLoader loader: the `~tornado.template.BaseLoader` responsible
    for this template, used to resolve ``{% include %}`` and ``{% extend %}`` directives.
:arg bool compress_whitespace: Deprecated since Tornado 4.3.
    Equivalent to ``whitespace="single"`` if true and
    ``whitespace="all"`` if false.
:arg str autoescape: The name of a function in the template
    namespace, or ``None`` to disable escaping by default.
:arg str whitespace: A string specifying treatment of whitespace;
    see `filter_whitespace` for options.

.. versionchanged:: 4.3
   Added ``whitespace`` parameter; deprecated ``compress_whitespace``.
Nz2cannot set both whitespace and compress_whitespacer$   r#   z.htmlz.jsÚ z%s.generated.pyÚ.Ú_ÚexecT)Údont_inheritz%s code:
%s)r   Ú
native_strr0   Ú_UNSETr*   r5   Úendswithr+   Ú
isinstancer   r4   Ú_DEFAULT_AUTOESCAPEÚ	namespaceÚ_TemplateReaderÚ_FileÚ_parseÚfileÚ_generate_pythonÚcoder1   ÚcompileÚ
to_unicodeÚreplaceÚcompiledÚ_format_codeÚrstripr   Úerror)	Úselfr/   r0   r1   r3   r4   r5   ÚreaderÚformatted_codes	            r   Ú__init__ÚTemplate.__init__  s”  € ô6 ×%Ò% dÓ+ˆŒ	à¤fÒ,àÑ%ÜÐ TÓUÐUÞ%8™¸eˆJØÑÞ˜&×+×+Ø#×.Ñ.‘
ð —=‘= ×)Ñ)¨T¯]©]¸5×-AÑ-AØ!)‘Jà!&�JàÑ%Ð%Ð%Ü˜* bÔ)ä˜*¤l×3Ñ3Ø(�OÞØ$×/Ñ/ˆD�Oä1ˆDŒOæ-3˜×)Ò)¸ˆŒÜ  ¤v×'8Ò'8¸Ó'IÈ:ÓVˆÜ˜$¤ vÓ 4Ó5ˆŒ	Ø×)Ñ)¨&Ó1ˆŒ	ØŒð	ô
 $Ü×!Ò! $§)¡)Ó,Ø! D§I¡I×$5Ñ$5°c¸3Ó$?Ñ?ØØ!ñ	ˆD�Møô ó 	Ü)¨$¯)©)Ó4×;Ñ;Ó=ˆNÜ�MŠM˜.¨$¯)©)°^ÔDØð	ús   ÅAF' Æ'AG8Úkwargsc                 óT  ^ • [         R                  [         R                  [         R                  [         R                  [         R                  [         R
                  [        [         R                  [        [        4T R                  R                  SS5      [        U 4S jS9S.nUR                  T R                  5        UR                  U5        [        T R                   U5        ["        R$                  " [&        / [        4   US   5      n[(        R*                  " 5         U" 5       $ )z0Generate this template with the given arguments.r8   r9   c                 ó   >• TR                   $ ©N)rG   )r0   rO   s    €r   Ú<lambda>Ú#Template.generate.<locals>.<lambda>`  s	   ø€ ¸T¿YºYr   )Ú
get_source)r   r   Ú
url_escapeÚjson_encodeÚsqueezeÚlinkifyÚdatetimeÚ_tt_utf8Ú_tt_string_typesr   Ú
__loader__Ú_tt_execute)r   r   r[   r\   r]   r^   r_   Úutf8r   Úbytesr0   rJ   r   ÚupdaterA   r   rK   ÚtypingÚcastr   Ú	linecacheÚ
clearcache)rO   rT   rA   Úexecutes   `   r   ÚgenerateÚTemplate.generateQ  sÓ   ø€ ô ×)Ñ)Ü"×/Ñ/Ü ×+Ñ+Ü!×-Ñ-Ü—~‘~Ü—~‘~Ü ÜŸ™Ü!-¬uÐ 5ð Ÿ	™	×)Ñ)¨#¨sÓ3Ü$Ô0FÑGñ
ˆ	ð 	×Ñ˜Ÿ™Ô(Ø×Ñ˜Ô Ü�—‘˜yÔ)Ü—+’+œh r¬5 yÑ1°9¸]Ñ3KÓLˆô 	×ÒÔÙ‹yÐr   c                 óV  • [        5       n 0 nU R                  U5      nUR                  5         U H  nUR                  X5        M     [	        X#XS   R
                  5      nUS   R                  U5        UR                  5       UR                  5         $ ! UR                  5         f = f©Nr   )	r   Ú_get_ancestorsÚreverseÚfind_named_blocksÚ_CodeWriterÚtemplaterl   ÚgetvalueÚclose)rO   r1   ÚbufferÚnamed_blocksÚ	ancestorsÚancestorÚwriters          r   rF   ÚTemplate._generate_pythonl  sŒ   € Ü“ˆð	àˆLØ×+Ñ+¨FÓ3ˆIØ×ÑÔÛ%�Ø×*Ñ*¨6Ö@ñ &ä  °vÈ¹|×?TÑ?TÓUˆFØ�a‰L×!Ñ! &Ô)Ø—?‘?Ó$à�L‰L�NøˆF�L‰L�Nús   ŒA9B ÂB(rC   c                 óL  • U R                   /nU R                   R                  R                   Hr  n[        U[        5      (       d  M  U(       d  [        S5      eUR                  UR                  U R                  5      nUR                  UR                  U5      5        Mt     U$ )Nz1{% extends %} block found, but no template loader)
rE   ÚbodyÚchunksr?   Ú_ExtendsBlockÚ
ParseErrorÚloadr0   Úextendrp   )rO   r1   ry   Úchunkrt   s        r   rp   ÚTemplate._get_ancestors{  s€   € Ø—Y‘Y�Kˆ	Ø—Y‘Y—^‘^×*Ô*ˆEÜ˜%¤×/Ó/ÞÜ$ØNóð ð "Ÿ;™; u§z¡z°4·9±9Ó=�Ø× Ñ  ×!8Ñ!8¸Ó!@ÖAñ +ð Ðr   )r4   rG   rK   rE   r1   r0   rA   )r   r   r   r   Ú__doc__r=   r
   Ústrre   r   Úboolr   rR   r	   rl   rF   r   rp   r   r   r   r   r-   r-   ü   sÜ   † ñð Ø)-Ø9?Ø9?Ø$(ñIà˜s E˜zÑ*ðIð ðIð ˜Ñ&ð	Ið
 # 4¨Ð#5Ñ6ðIð ˜U 3¨Ð#4Ñ5Ñ6ðIð ˜S‘MðIð 
õIðV ð ¨ô ð6 x°Ñ'=ð À#ô ð
 X¨lÑ%;ð 
ÀÀWÁ÷ 
r   r-   c            	       ó®   • \ rS rSrSr\SS4S\S\\\\	4      S\\   SS4S jjr
SS	 jrSS
\S\\   S\4S jjrSS
\S\\   S\4S jjrS
\S\4S jrSrg)r2   iˆ  zÐBase class for template loaders.

You must use a template loader to use template constructs like
``{% extends %}`` and ``{% include %}``. The loader caches all
templates after they are loaded the first time.
Nr4   rA   r5   r!   c                 ó~   • Xl         U=(       d    0 U l        X0l        0 U l        [        R
                  " 5       U l        g)a0  Construct a template loader.

:arg str autoescape: The name of a function in the template
    namespace, such as "xhtml_escape", or ``None`` to disable
    autoescaping by default.
:arg dict namespace: A dictionary to be added to the default template
    namespace, or ``None``.
:arg str whitespace: A string specifying default behavior for
    whitespace in templates; see `filter_whitespace` for options.
    Default is "single" for files ending in ".html" and ".js" and
    "all" for other files.

.. versionchanged:: 4.3
   Added ``whitespace`` parameter.
N)r4   rA   r5   Ú	templatesÚ	threadingÚRLockÚlock)rO   r4   rA   r5   s       r   rR   ÚBaseLoader.__init__�  s0   € ð* %ŒØ"Ÿ bˆŒØ$ŒØˆŒô —O’OÓ%ˆ�	r   c                 ó^   • U R                      0 U l        SSS5        g! , (       d  f       g= f)z'Resets the cache of compiled templates.N)rŽ   r‹   ©rO   s    r   ÚresetÚBaseLoader.reset°  s   € à�Y‹YØˆDŒN÷ �YŽYús   �ž
,r0   Úparent_pathc                 ó   • [        5       e)z@Converts a possibly-relative path to absolute (used internally).©ÚNotImplementedError©rO   r0   r”   s      r   Úresolve_pathÚBaseLoader.resolve_pathµ  s   € ä!Ó#Ð#r   c                 óæ   • U R                  XS9nU R                     XR                  ;  a  U R                  U5      U R                  U'   U R                  U   sSSS5        $ ! , (       d  f       g= f)zLoads a template.)r”   N)r™   rŽ   r‹   Ú_create_templater˜   s      r   r‚   ÚBaseLoader.load¹  sU   € à× Ñ  Ð Ð?ˆØ�Y‹YØŸ>™>Ó)Ø'+×'<Ñ'<¸TÓ'B�—‘˜tÑ$Ø—>‘> $Ñ'÷ �Y�Yús   œ<A"Á"
A0c                 ó   • [        5       erW   r–   ©rO   r0   s     r   rœ   ÚBaseLoader._create_templateÁ  ó   € Ü!Ó#Ð#r   )r4   rŽ   rA   r‹   r5   )r!   NrW   )r   r   r   r   r†   r@   r‡   r   r   r	   rR   r’   r™   r-   r‚   rœ   r   r   r   r   r2   r2   ˆ  s£   † ñð .Ø.2Ø$(ñ	&àð&ð ˜D  c ™NÑ+ð&ð ˜S‘Mð	&ð
 
õ&ô@ ñ
$ ð $°8¸C±=ð $ÈCõ $ñ(˜ð (¨8°C©=ð (ÀHõ (ð$ Sð $¨X÷ $r   r2   c                   ón   ^ • \ rS rSrSrS\S\SS4U 4S jjrSS\S	\\   S\4S
 jjr	S\S\
4S jrSrU =r$ )ÚLoaderiÅ  z:A template loader that loads from a single root directory.Úroot_directoryrT   r!   Nc                 ón   >• [         TU ]  " S0 UD6  [        R                  R	                  U5      U l        g ©Nr   )ÚsuperrR   ÚosÚpathÚabspathÚroot)rO   r¤   rT   Ú	__class__s      €r   rR   ÚLoader.__init__È  s'   ø€ Ü‰ÒÑ"˜6Ò"Ü—G‘G—O‘O NÓ3ˆ�	r   r0   r”   c                 óV  • U(       Ga   UR                  S5      (       Gd	  UR                  S5      (       dó  UR                  S5      (       dÝ  [        R                  R                  U R                  U5      n[        R                  R                  [        R                  R                  U5      5      n[        R                  R                  [        R                  R                  XA5      5      nUR                  U R                  5      (       a  U[        U R                  5      S-   S  nU$ )NÚ<Ú/é   )Ú
startswithr¨   r©   Újoinr«   Údirnamerª   Úlen)rO   r0   r”   Úcurrent_pathÚfile_dirÚrelative_paths         r   r™   ÚLoader.resolve_pathÌ  sÀ   € çØ×*Ñ*¨3×/Ò/Ø×*Ñ*¨3×/Ñ/Ø—O‘O C×(Ñ(äŸ7™7Ÿ<™<¨¯	©	°;Ó?ˆLÜ—w‘w—‘¤r§w¡w§¡°|Ó'DÓEˆHÜŸG™GŸO™O¬B¯G©G¯L©L¸Ó,HÓIˆMØ×'Ñ'¨¯	©	×2Ñ2Ø$¤S¨¯©£^°aÑ%7Ð%9Ð:�Øˆr   c                 óØ   • [         R                  R                  U R                  U5      n[	        US5       n[        UR                  5       XS9nUsS S S 5        $ ! , (       d  f       g = f)NÚrb©r0   r1   )r¨   r©   r³   r«   Úopenr-   Úread)rO   r0   r©   Úfrt   s        r   rœ   ÚLoader._create_templateÚ  sG   € Ü�w‰w�|‰|˜DŸI™I tÓ,ˆÜ�$˜Ô Ü §¡£¨tÑAˆHØ÷ ××ús   ·AÁ
A))r«   rW   )r   r   r   r   r†   r‡   r	   rR   r   r™   r-   rœ   r   Ú__classcell__©r¬   s   @r   r£   r£   Å  sV   ø† ÙDð4 sð 4°cð 4¸d÷ 4ñ ð °8¸C±=ð ÈCõ ð Sð ¨X÷ ò r   r£   c                   óx   ^ • \ rS rSrSrS\\\4   S\SS4U 4S jjrSS\S	\	\   S\4S
 jjr
S\S\4S jrSrU =r$ )Ú
DictLoaderiá  z/A template loader that loads from a dictionary.ÚdictrT   r!   Nc                 ó2   >• [         TU ]  " S0 UD6  Xl        g r¦   )r§   rR   rÅ   )rO   rÅ   rT   r¬   s      €r   rR   ÚDictLoader.__init__ä  s   ø€ Ü‰ÒÑ"˜6Ò"Ø�	r   r0   r”   c                 ó  • U(       a‚  UR                  S5      (       dl  UR                  S5      (       dV  UR                  S5      (       d@  [        R                  " U5      n[        R                  " [        R                  " X15      5      nU$ )Nr¯   r°   )r²   Ú	posixpathr´   Únormpathr³   )rO   r0   r”   r·   s       r   r™   ÚDictLoader.resolve_pathè  sd   € æØ×*Ñ*¨3×/Ñ/Ø×*Ñ*¨3×/Ñ/Ø—O‘O C×(Ñ(ä ×(Ò(¨Ó5ˆHÜ×%Ò%¤i§n¢n°XÓ&DÓEˆDØˆr   c                 ó0   • [        U R                  U   XS9$ )Nr¼   )r-   rÅ   rŸ   s     r   rœ   ÚDictLoader._create_templateó  s   € Ü˜Ÿ	™	 $™¨dÑ@Ð@r   )rÅ   rW   )r   r   r   r   r†   r   r‡   r	   rR   r   r™   r-   rœ   r   rÁ   rÂ   s   @r   rÄ   rÄ   á  sb   ø† Ù9ð˜T # s (™^ð °sð ¸t÷ ñ	 ð 	°8¸C±=ð 	ÈCõ 	ðA Sð A¨X÷ Aò Ar   rÄ   c                   óX   • \ rS rSrS\S    4S jrSS jrS\\   S\	\
S4   SS4S	 jrS
rg)Ú_Nodei÷  r!   c                 ó   • gr¦   r   r‘   s    r   Ú
each_childÚ_Node.each_childø  s   € Ør   Nc                 ó   • [        5       erW   r–   ©rO   r{   s     r   rl   Ú_Node.generateû  r¡   r   r1   rx   Ú_NamedBlockc                 óT   • U R                  5        H  nUR                  X5        M     g rW   )rÑ   rr   )rO   r1   rx   Úchilds       r   rr   Ú_Node.find_named_blocksþ  s#   € ð —_‘_Ö&ˆEØ×#Ñ# FÖ9ò 'r   r   ©r{   rs   r!   N)r   r   r   r   r   rÑ   rl   r   r2   r   r‡   rr   r   r   r   r   rÏ   rÏ   ÷  sD   † ð˜H WÑ-ô ô$ð:Ø˜zÑ*ð:Ø:>¸sÀMÐ?QÑ:Rð:à	÷:r   rÏ   c                   óH   • \ rS rSrS\SSSS4S jrSS jrS\S	   4S
 jrSr	g)rC   i  rt   r~   Ú
_ChunkListr!   Nc                 ó*   • Xl         X l        SU l        g ro   )rt   r~   Úline)rO   rt   r~   s      r   rR   Ú_File.__init__  s   € Ø ŒØŒ	Øˆ�	r   c                 ón  • UR                  SU R                  5        UR                  5          UR                  SU R                  5        UR                  SU R                  5        U R                  R	                  U5        UR                  SU R                  5        S S S 5        g ! , (       d  f       g = f)Nzdef _tt_execute():ú_tt_buffer = []ú_tt_append = _tt_buffer.appendú$return _tt_utf8('').join(_tt_buffer))Ú
write_linerÞ   Úindentr~   rl   rÔ   s     r   rl   Ú_File.generate  s{   € Ø×ÑÐ.°·	±	Ô:Ø�]‰]�_Ø×ÑÐ/°·±Ô;Ø×ÑÐ>ÀÇ	Á	ÔJØ�I‰I×Ñ˜vÔ&Ø×ÑÐDÀdÇiÁiÔP÷	 �_Ž_ús   ­A0B&Â&
B4rÏ   c                 ó   • U R                   4$ rW   ©r~   r‘   s    r   rÑ   Ú_File.each_child  ó   € Ø—	‘	ˆ|Ðr   )r~   rÞ   rt   rÚ   )
r   r   r   r   r-   rR   rl   r   rÑ   r   r   r   r   rC   rC     s3   † ð ð °ð À$ô ô
Qð˜H WÑ-÷ r   rC   c                   óJ   • \ rS rSrS\\   SS4S jrS
S jrS\S   4S jr	S	r
g)rÜ   i  r   r!   Nc                 ó   • Xl         g rW   ©r   )rO   r   s     r   rR   Ú_ChunkList.__init__  s   € Ø�r   c                 óL   • U R                    H  nUR                  U5        M     g rW   )r   rl   )rO   r{   r„   s      r   rl   Ú_ChunkList.generate  s   € Ø—[”[ˆEØ�N‰N˜6Ö"ò !r   rÏ   c                 ó   • U R                   $ rW   rí   r‘   s    r   rÑ   Ú_ChunkList.each_child  s   € Ø�{‰{Ðr   rí   rÚ   )r   r   r   r   r   rÏ   rR   rl   r   rÑ   r   r   r   r   rÜ   rÜ     s/   † ð˜t E™{ð ¨tô ô#ð˜H WÑ-÷ r   rÜ   c            
       óv   • \ rS rSrS\S\S\S\SS4
S jrS\	S	   4S
 jr
SS jrS\\   S\\S 4   SS4S jrSrg)rÖ   i#  r0   r~   rt   rÞ   r!   Nc                 ó4   • Xl         X l        X0l        X@l        g rW   )r0   r~   rt   rÞ   )rO   r0   r~   rt   rÞ   s        r   rR   Ú_NamedBlock.__init__$  s   € ØŒ	ØŒ	Ø ŒØ�	r   rÏ   c                 ó   • U R                   4$ rW   rè   r‘   s    r   rÑ   Ú_NamedBlock.each_child*  rê   r   c                 óì   • UR                   U R                     nUR                  UR                  U R                  5         UR
                  R                  U5        S S S 5        g ! , (       d  f       g = frW   )rx   r0   Úincludert   rÞ   r~   rl   )rO   r{   Úblocks      r   rl   Ú_NamedBlock.generate-  sJ   € Ø×#Ñ# D§I¡IÑ.ˆØ�^‰^˜EŸN™N¨D¯I©IÕ6Ø�J‰J×Ñ Ô'÷ 7×6Ö6ús   Á A%Á%
A3r1   rx   c                 óL   • XU R                   '   [        R                  XU5        g rW   )r0   rÏ   rr   )rO   r1   rx   s      r   rr   Ú_NamedBlock.find_named_blocks2  s    € ð #'�T—Y‘YÑÜ×Ñ ¨lÕ;r   )r~   rÞ   r0   rt   rÚ   )r   r   r   r   r‡   rÏ   r-   ÚintrR   r   rÑ   rl   r   r2   r   rr   r   r   r   r   rÖ   rÖ   #  sm   † ð˜Sð ¨ð ¸ð Èð ÐQUô ð˜H WÑ-ô ô(ð
<Ø˜zÑ*ð<Ø:>¸sÀMÐ?QÑ:Rð<à	÷<r   rÖ   c                   ó&   • \ rS rSrS\SS4S jrSrg)r€   i9  r0   r!   Nc                 ó   • Xl         g rW   ©r0   rŸ   s     r   rR   Ú_ExtendsBlock.__init__:  s   € Ø�	r   r  )r   r   r   r   r‡   rR   r   r   r   r   r€   r€   9  s   † ð˜Sð  T÷ r   r€   c                   ó^   • \ rS rSrS\SSS\SS4S jrS	\\   S
\	\\
4   SS4S jrSS jrSrg)Ú_IncludeBlocki>  r0   rP   rB   rÞ   r!   Nc                 ó>   • Xl         UR                   U l        X0l        g rW   )r0   Útemplate_namerÞ   )rO   r0   rP   rÞ   s       r   rR   Ú_IncludeBlock.__init__?  s   € ØŒ	Ø#Ÿ[™[ˆÔØ�	r   r1   rx   c                 ó�   • Uc   eUR                  U R                  U R                  5      nUR                  R	                  X5        g rW   )r‚   r0   r  rE   rr   )rO   r1   rx   Úincludeds       r   rr   Ú_IncludeBlock.find_named_blocksD  s<   € ð Ñ!Ð!Ð!Ø—;‘;˜tŸy™y¨$×*<Ñ*<Ó=ˆØ�‰×'Ñ'¨Õ=r   c                 ó6  • UR                   c   eUR                   R                  U R                  U R                  5      nUR	                  X R
                  5         UR                  R                  R                  U5        S S S 5        g ! , (       d  f       g = frW   )	r1   r‚   r0   r  rù   rÞ   rE   r~   rl   )rO   r{   r	  s      r   rl   Ú_IncludeBlock.generateK  sf   € Ø�}‰}Ñ(Ð(Ð(Ø—=‘=×%Ñ% d§i¡i°×1CÑ1CÓDˆØ�^‰^˜H§i¡iÕ0Ø�M‰M×Ñ×'Ñ'¨Ô/÷ 1×0Ö0ús   Á&B
Â

B)rÞ   r0   r  rÚ   )r   r   r   r   r‡   rþ   rR   r   r2   r   rÖ   rr   rl   r   r   r   r   r  r  >  sU   † ð˜Sð Ð*;ð À3ð È4ô ð
>Ø˜zÑ*ð>Ø:>¸sÀKÐ?OÑ:Pð>à	ô>÷0r   r  c                   óL   • \ rS rSrS\S\S\SS4S jrS\S   4S	 jr	SS
 jr
Srg)Ú_ApplyBlockiR  ÚmethodrÞ   r~   r!   Nc                 ó(   • Xl         X l        X0l        g rW   )r  rÞ   r~   )rO   r  rÞ   r~   s       r   rR   Ú_ApplyBlock.__init__S  s   € ØŒØŒ	Ø�	r   rÏ   c                 ó   • U R                   4$ rW   rè   r‘   s    r   rÑ   Ú_ApplyBlock.each_childX  rê   r   c                 ó  • SUR                   -  nU=R                   S-  sl         UR                  SU-  U R                  5        UR                  5          UR                  SU R                  5        UR                  SU R                  5        U R                  R                  U5        UR                  SU R                  5        S S S 5        UR                  SU R                  < SU< S	3U R                  5        g ! , (       d  f       N>= f)
Nz_tt_apply%dr±   z	def %s():rá   râ   rã   z_tt_append(_tt_utf8(Ú(z()))))Úapply_counterrä   rÞ   rå   r~   rl   r  )rO   r{   Úmethod_names      r   rl   Ú_ApplyBlock.generate[  sÅ   € Ø# f×&:Ñ&:Ñ:ˆØ×Ò Ñ!ÕØ×Ñ˜+¨Ñ3°T·Y±YÔ?Ø�]‰]�_Ø×ÑÐ/°·±Ô;Ø×ÑÐ>ÀÇ	Á	ÔJØ�I‰I×Ñ˜vÔ&Ø×ÑÐDÀdÇiÁiÔP÷	 ð
 	×ÒØ04·´»[ÐIÈ4Ï9É9õ	
÷ �_ús   ÁA0C<Ã<
D
)r~   rÞ   r  rÚ   ©r   r   r   r   r‡   rþ   rÏ   rR   r   rÑ   rl   r   r   r   r   r  r  R  s9   † ð˜sð ¨#ð °Uð ¸tô ð
˜H WÑ-ô ÷
r   r  c                   óL   • \ rS rSrS\S\S\SS4S jrS\\   4S jr	SS	 jr
S
rg)Ú_ControlBlockii  Ú	statementrÞ   r~   r!   Nc                 ó(   • Xl         X l        X0l        g rW   )r  rÞ   r~   )rO   r  rÞ   r~   s       r   rR   Ú_ControlBlock.__init__j  s   € Ø"ŒØŒ	Ø�	r   c                 ó   • U R                   4$ rW   rè   r‘   s    r   rÑ   Ú_ControlBlock.each_childo  rê   r   c                 ó  • UR                  SU R                  -  U R                  5        UR                  5          U R                  R                  U5        UR                  SU R                  5        S S S 5        g ! , (       d  f       g = f)Nú%s:Úpass)rä   r  rÞ   rå   r~   rl   rÔ   s     r   rl   Ú_ControlBlock.generater  sX   € Ø×Ñ˜% $§.¡.Ñ0°$·)±)Ô<Ø�]‰]�_Ø�I‰I×Ñ˜vÔ&à×Ñ˜f d§i¡iÔ0÷ �_Ž_ús   º8A;Á;
B	)r~   rÞ   r  rÚ   r  r   r   r   r  r  i  s8   † ð #ð ¨Sð ¸ð À$ô ð
˜H U™Oô ÷1r   r  c                   ó4   • \ rS rSrS\S\SS4S jrS	S jrSrg)
Ú_IntermediateControlBlockiz  r  rÞ   r!   Nc                 ó   • Xl         X l        g rW   ©r  rÞ   ©rO   r  rÞ   s      r   rR   Ú"_IntermediateControlBlock.__init__{  ó   € Ø"ŒØ�	r   c                 ó²   • UR                  SU R                  5        UR                  SU R                  -  U R                  UR                  5       S-
  5        g )Nr#  r"  r±   )rä   rÞ   r  Úindent_sizerÔ   s     r   rl   Ú"_IntermediateControlBlock.generate  sD   € à×Ñ˜& $§)¡)Ô,Ø×Ñ˜% $§.¡.Ñ0°$·)±)¸V×=OÑ=OÓ=QÐTUÑ=UÕVr   ©rÞ   r  rÚ   ©	r   r   r   r   r‡   rþ   rR   rl   r   r   r   r   r&  r&  z  s"   † ð #ð ¨Sð °Tô ÷Wr   r&  c                   ó4   • \ rS rSrS\S\SS4S jrS	S jrSrg)
Ú
_Statementi…  r  rÞ   r!   Nc                 ó   • Xl         X l        g rW   r(  r)  s      r   rR   Ú_Statement.__init__†  r+  r   c                 óP   • UR                  U R                  U R                  5        g rW   )rä   r  rÞ   rÔ   s     r   rl   Ú_Statement.generateŠ  s   € Ø×Ñ˜$Ÿ.™.¨$¯)©)Õ4r   r/  rÚ   r0  r   r   r   r2  r2  …  s!   † ð #ð ¨Sð °Tô ÷5r   r2  c            	       ó<   • \ rS rSrS
S\S\S\SS4S jjrSS jrS	r	g)Ú_ExpressioniŽ  Ú
expressionrÞ   Úrawr!   Nc                 ó(   • Xl         X l        X0l        g rW   ©r9  rÞ   r:  )rO   r9  rÞ   r:  s       r   rR   Ú_Expression.__init__�  s   € Ø$ŒØŒ	Ø�r   c                 ó´  • UR                  SU R                  -  U R                  5        UR                  SU R                  5        UR                  SU R                  5        U R                  (       dJ  UR                  R
                  b3  UR                  SUR                  R
                  -  U R                  5        UR                  SU R                  5        g )Nz_tt_tmp = %szEif isinstance(_tt_tmp, _tt_string_types): _tt_tmp = _tt_utf8(_tt_tmp)z&else: _tt_tmp = _tt_utf8(str(_tt_tmp))z_tt_tmp = _tt_utf8(%s(_tt_tmp))z_tt_append(_tt_tmp))rä   r9  rÞ   r:  Úcurrent_templater4   rÔ   s     r   rl   Ú_Expression.generate”  s¨   € Ø×Ñ˜.¨4¯?©?Ñ:¸D¿I¹IÔFØ×ÑØVØ�I‰Iô	
ð 	×ÑÐBÀDÇIÁIÔNØ�x�x˜F×3Ñ3×>Ñ>ÑJð ×ÑØ1°F×4KÑ4K×4VÑ4VÑVØ—	‘	ôð 	×ÑÐ/°·±Õ;r   r<  )FrÚ   )
r   r   r   r   r‡   rþ   rˆ   rR   rl   r   r   r   r   r8  r8  Ž  s(   † ñ 3ð ¨cð ¸ð Èõ ÷
<r   r8  c                   ó8   ^ • \ rS rSrS\S\SS4U 4S jjrSrU =r$ )Ú_Modulei¥  r9  rÞ   r!   Nc                 ó*   >• [         TU ]  SU-   USS9  g )Nz_tt_modules.T©r:  )r§   rR   )rO   r9  rÞ   r¬   s      €r   rR   Ú_Module.__init__¦  s   ø€ Ü‰Ñ˜¨*Ñ4°dÀÐÒEr   r   )	r   r   r   r   r‡   rþ   rR   r   rÁ   rÂ   s   @r   rB  rB  ¥  s'   ø† ðF 3ð F¨cð F°d÷ Fõ Fr   rB  c                   ó8   • \ rS rSrS\S\S\SS4S jrS
S jrS	rg)Ú_Textiª  ÚvaluerÞ   r5   r!   Nc                 ó(   • Xl         X l        X0l        g rW   )rH  rÞ   r5   )rO   rH  rÞ   r5   s       r   rR   Ú_Text.__init__«  s   € ØŒ
ØŒ	Ø$�r   c                 óÊ   • U R                   nSU;  a  [        U R                  U5      nU(       a4  UR                  S[        R
                  " U5      -  U R                  5        g g )Nz<pre>z_tt_append(%r))rH  r+   r5   rä   r   rd   rÞ   )rO   r{   rH  s      r   rl   Ú_Text.generate°  sP   € Ø—
‘
ˆð ˜%ÓÜ% d§o¡o°uÓ=ˆEæØ×ÑÐ.´·²¸UÓ1CÑCÀTÇYÁYÕOð r   )rÞ   rH  r5   rÚ   r0  r   r   r   rG  rG  ª  s)   † ð%˜cð %¨ð %¸#ð %À$ô %÷
	Pr   rG  c            	       óL   • \ rS rSrSr SS\S\\   S\SS4S jjrS\4S	 jr	S
r
g)r�   i¼  zÙRaised for template syntax errors.

``ParseError`` instances have ``filename`` and ``lineno`` attributes
indicating the position of the error.

.. versionchanged:: 4.3
   Added ``filename`` and ``lineno`` attributes.
NÚmessageÚfilenameÚlinenor!   c                 ó(   • Xl         X l        X0l        g rW   ©rN  rO  rP  )rO   rN  rO  rP  s       r   rR   ÚParseError.__init__Æ  s   € ð Œð !ŒØ�r   c                 óN   • SU R                   U R                  U R                  4-  $ )Nz%s at %s:%drR  r‘   s    r   Ú__str__ÚParseError.__str__Ï  s    € Ø §¡¨d¯m©m¸T¿[¹[ÐIÑIÐIr   )rO  rP  rN  ro   )r   r   r   r   r†   r‡   r   rþ   rR   rU  r   r   r   r   r�   r�   ¼  sE   † ñð KLñØðØ&.¨s¡mðØDGðà	õðJ˜÷ Jr   r�   c            
       ó–   • \ rS rSrS\S\\\4   S\\	   S\
SS4
S jrS\4S	 jrSS jrS\
S\SS
4S jr SS\S\S\\   SS4S jjrSrg)rs   iÓ  rE   rx   r1   r?  r!   Nc                 ó^   • Xl         X l        X0l        X@l        SU l        / U l        SU l        g ro   )rE   rx   r1   r?  r  Úinclude_stackÚ_indent)rO   rE   rx   r1   r?  s        r   rR   Ú_CodeWriter.__init__Ô  s1   € ð Œ	Ø(ÔØŒØ 0ÔØˆÔØˆÔØˆ�r   c                 ó   • U R                   $ rW   ©rZ  r‘   s    r   r-  Ú_CodeWriter.indent_sizeã  s   € Ø�|‰|Ðr   r   c                 ó6   ^ •  " U 4S jS[         5      nU" 5       $ )Nc                   ó>   >• \ rS rSrSU 4S jjrS\SS4U 4S jjrSrg)	Ú$_CodeWriter.indent.<locals>.Indenteriç  r!   c                 ó2   >• T=R                   S-  sl         T$ )Nr±   r]  ©r9   rO   s    €r   Ú	__enter__Ú._CodeWriter.indent.<locals>.Indenter.__enter__è  s   ø€ Ø—’ Ñ!•Ø�r   ÚargsNc                 óT   >• TR                   S:”  d   eT=R                   S-  sl         g )Nr   r±   r]  ©r9   rf  rO   s     €r   Ú__exit__Ú-_CodeWriter.indent.<locals>.Indenter.__exit__ì  s#   ø€ Ø—|‘| aÓ'Ð'Ð'Ø—’ Ñ!–r   r   ©r!   rs   ©r   r   r   r   rd  r	   ri  r   r‘   s   €r   ÚIndenterra  ç  s    ø† ÷ð" 3ð "¨4÷ "ò "r   rm  )Úobject)rO   rm  s   ` r   rå   Ú_CodeWriter.indentæ  s   ø€ ÷	"”vô 	"ñ ‹zÐr   rt   rÞ   c                 ó’   ^ • T R                   R                  T R                  U45        UT l         " U 4S jS[        5      nU" 5       $ )Nc                   ó>   >• \ rS rSrSU 4S jjrS\SS4U 4S jjrSrg)	Ú,_CodeWriter.include.<locals>.IncludeTemplateiö  r!   c                 ó   >• T$ rW   r   rc  s    €r   rd  Ú6_CodeWriter.include.<locals>.IncludeTemplate.__enter__÷  s   ø€ Ø�r   rf  Nc                 óJ   >• TR                   R                  5       S   Tl        g ro   )rY  Úpopr?  rh  s     €r   ri  Ú5_CodeWriter.include.<locals>.IncludeTemplate.__exit__ú  s   ø€ Ø(,×(:Ñ(:×(>Ñ(>Ó(@ÀÑ(C�Õ%r   )r?  rk  rl  r‘   s   €r   ÚIncludeTemplaterr  ö  s$   ø† ÷ðD 3ð D¨4÷ Dò Dr   rx  )rY  Úappendr?  rn  )rO   rt   rÞ   rx  s   `   r   rù   Ú_CodeWriter.includeò  sC   ø€ Ø×Ñ×!Ñ! 4×#8Ñ#8¸$Ð"?Ô@Ø (ˆÔ÷	Dœfô 	Dñ Ó Ð r   Úline_numberrå   c                 ó^  • Uc  U R                   nSU R                  R                  U4-  nU R                  (       aO  U R                   VVs/ s H  u  pVSUR                  U4-  PM     nnnUSSR	                  [        U5      5      -  -  n[        SU-  U-   U-   U R                  S9  g s  snnf )Nz	  # %s:%dz%s:%dz	 (via %s)z, z    )rE   )rZ  r?  r0   rY  r³   ÚreversedÚprintrE   )rO   rÞ   r{  rå   Úline_commentÚtmplrP  ry   s           r   rä   Ú_CodeWriter.write_lineÿ  s©   € ð ‰>Ø—\‘\ˆFØ" d×&;Ñ&;×&@Ñ&@À+Ð%NÑNˆØ××àDH×DVÒDVôÚDV±.°4�˜4Ÿ9™9 fÐ-Ô-ÑDVð ñ ð ˜K¨$¯)©)´H¸YÓ4GÓ*HÑHÑHˆLÜˆf�v‰o Ñ$ |Ñ3¸$¿)¹)ÓDùó	s   ÁB))rZ  r  r?  rE   rY  r1   rx   )r!   r   rW   )r   r   r   r   r   r   r‡   rÖ   r   r2   r-   rR   rþ   r-  rå   rù   rä   r   r   r   r   rs   rs   Ó  s­   † ðàðð ˜3 Ð+Ñ,ðð ˜Ñ$ð	ð
 #ðð 
ôð˜Sô ô
ð! ð !°ð !Ð8Hô !ð DHñEØðEØ&)ðEØ3;¸C±=ðEà	÷Eð Er   rs   c            	       óÆ   • \ rS rSrS\S\S\SS4S jrSS\S	\S
\\   S\4S jjrSS\\   S\4S jjr	S\4S jr
S\4S jrS\\\4   S\4S jrS\4S jrS\SS4S jrSrg)rB   i  r0   r    r5   r!   Nc                 óD   • Xl         X l        X0l        SU l        SU l        g )Nr±   r   )r0   r    r5   rÞ   Úpos)rO   r0   r    r5   s       r   rR   Ú_TemplateReader.__init__  s   € ØŒ	ØŒ	Ø$ŒØˆŒ	Øˆ�r   ÚneedleÚstartÚendc                 óà   • US:¼  d   U5       eU R                   nX$-  nUc  U R                  R                  X5      nO'X4-  nX2:¼  d   eU R                  R                  XU5      nUS:w  a  XT-  nU$ )Nr   éÿÿÿÿ)r„  r    Úfind)rO   r†  r‡  rˆ  r„  Úindexs         r   r‹  Ú_TemplateReader.find  sr   € Ø˜‹zÐ ˜5Ó ˆzØ�h‰hˆØ‰ˆØ‰;Ø—I‘I—N‘N 6Ó1‰Eà‰JˆCØ“<Ð�<Ø—I‘I—N‘N 6°#Ó6ˆEØ�B‹;Ø‰LˆEØˆr   Úcountc                 ó   • Uc"  [        U R                  5      U R                  -
  nU R                  U-   nU =R                  U R                  R	                  SU R                  U5      -  sl        U R                  U R                  U nX l        U$ )Nr&   )rµ   r    r„  rÞ   rŽ  )rO   rŽ  ÚnewposÚss       r   ÚconsumeÚ_TemplateReader.consume#  sl   € Ø‰=Ü˜Ÿ	™	“N T§X¡XÑ-ˆEØ—‘˜EÑ!ˆØ�	Š	�T—Y‘Y—_‘_ T¨4¯8©8°VÓ<Ñ<�	Ø�I‰I�d—h‘h Ð(ˆØŒØˆr   c                 óF   • [        U R                  5      U R                  -
  $ rW   )rµ   r    r„  r‘   s    r   Ú	remainingÚ_TemplateReader.remaining,  s   € Ü�4—9‘9‹~ §¡Ñ(Ð(r   c                 ó"   • U R                  5       $ rW   )r•  r‘   s    r   Ú__len__Ú_TemplateReader.__len__/  s   € Ø�~‰~ÓÐr   Úkeyc                 ó\  • [        U[        5      (       ag  [        U 5      nUR                  U5      u  p4nUc  U R                  nOX0R                  -  nUb  X@R                  -  nU R
                  [        X4U5         $ US:  a  U R
                  U   $ U R
                  U R                  U-      $ ro   )r?   Úslicerµ   Úindicesr„  r    )rO   rš  Úsizer‡  ÚstopÚsteps         r   Ú__getitem__Ú_TemplateReader.__getitem__2  s™   € Ü�cœ5×!Ñ!Ü�t“9ˆDØ #§¡¨DÓ 1ÑˆE˜Ø‰}ØŸ™‘àŸ™Ñ!�ØÑØŸ™Ñ �Ø—9‘9œU 5°Ó5Ñ6Ð6Ø�1‹WØ—9‘9˜S‘>Ð!à—9‘9˜TŸX™X¨™^Ñ,Ð,r   c                 ó4   • U R                   U R                  S  $ rW   )r    r„  r‘   s    r   rU  Ú_TemplateReader.__str__B  s   € Ø�y‰y˜Ÿ™˜Ð$Ð$r   Úmsgc                 óB   • [        XR                  U R                  5      erW   )r�   r0   rÞ   )rO   r¥  s     r   Úraise_parse_errorÚ!_TemplateReader.raise_parse_errorE  s   € Ü˜Ÿi™i¨¯©Ó3Ð3r   )rÞ   r0   r„  r    r5   )r   NrW   )r   r   r   r   r‡   rR   rþ   r   r‹  r’  r•  r˜  r
   rœ  r¡  rU  r§  r   r   r   r   rB   rB     s²   † ð˜Sð ¨ð ¸ð Àô ñ˜3ð  sð °X¸c±]ð Ècõ ñ˜X c™]ð °cõ ð)˜3ô )ð ˜ô  ð-˜u S¨% ZÑ0ð -°Sô -ð %˜ô %ð4 Sð 4¨T÷ 4r   rB   rG   c           	      óà   • U R                  5       nS[        [        [        U5      S-   5      5      -  nSR                  [	        U5       VVs/ s H  u  p4X#S-   U4-  PM     snn5      $ s  snnf )Nz%%%dd  %%s
r±   r7   )Ú
splitlinesrµ   Úreprr³   Ú	enumerate)rG   ÚlinesÚformatÚirÞ   s        r   rL   rL   I  s_   € Ø�O‰OÓ€EØœc¤$¤s¨5£z°A¡~Ó"6Ó7Ñ7€FØ�7‰7¼IÀeÔ<LÔMÒ<L©y°�F !™e T˜]Ô*Ñ<LÒMÓNÐNùÓMs   ÁA*
rP   rt   Úin_blockÚin_loopc                 ó°  • [        / 5      n Sn U R                  SU5      nUS:X  d  US-   U R                  5       :X  ae  U(       a  U R                  SU-  5        UR                  R                  [        U R                  5       U R                  U R                  5      5        U$ XS-      S;  a  US-  nM§  US-   U R                  5       :  a  XS-      S:X  a  XS-      S:X  a  US-  nMÛ   US:”  aJ  U R                  U5      nUR                  R                  [        X`R                  U R                  5      5        U R                  S5      nU R                  nU R                  5       (       aL  U S   S	:X  aC  U R                  S5        UR                  R                  [        XxU R                  5      5        GM­  US
:X  a[  U R                  S5      n	U	S:X  a  U R                  S5        U R                  U	5      R                  5       n
U R                  S5        GM  US:X  a—  U R                  S5      n	U	S:X  a  U R                  S5        U R                  U	5      R                  5       n
U R                  S5        U
(       d  U R                  S5        UR                  R                  [        X¨5      5        GM«  US:X  d   U5       eU R                  S5      n	U	S:X  a  U R                  S5        U R                  U	5      R                  5       n
U R                  S5        U
(       d  U R                  S5        U
R                  S5      u  p¼nUR                  5       n[        / SQ5      [        S/5      [        S/5      [        S/5      S.nUR                  U5      nUbe  U(       d  U R                  U< SU< S35        X/;  a  U R                  U< SU< S35        UR                  R                  [        X¨5      5        GMõ  US:X  a  U(       d  U R                  S5        U$ US;   Ga‡  US :X  a  GM%  US!:X  aE  UR                  S"5      R                  S#5      nU(       d  U R                  S$5        [!        U5      nGOUS%;   a$  U(       d  U R                  S&5        [#        X¨5      nOëUS':X  aE  UR                  S"5      R                  S#5      nU(       d  U R                  S(5        [%        XÐU5      nO US):X  a$  U(       d  U R                  S*5        [#        XØ5      nOvUS+:X  a"  UR                  5       nUS,:X  a  S nUUl        GM7  US-:X  a&  UR                  5       n[)        US.5        UU l	        GMc  US/:X  a  [        XØSS09nOUS1:X  a  [+        XØ5      nUR                  R                  W5        GM£  US2;   a´  US3;   a  [-        XX»5      nO US4:X  a  [-        XUS 5      nO[-        XX³5      nUS4:X  a%  U(       d  U R                  S55        [/        XØU5      nO8US6:X  a&  U(       d  U R                  S75        [1        UUX5      nO[3        X¨U5      nUR                  R                  U5        GM]  US8;   aR  U(       d$  U R                  U< S[        S9S:/5      < S35        UR                  R                  [#        X¨5      5        GMµ  U R                  S;U-  5        GMË  )<NTr   Ú{rŠ  r±   z Missing {%% end %%} block for %s)r³  Ú%Ú#é   Ú!z{#z#}zMissing end comment #}z{{z}}zMissing end expression }}zEmpty expressionz{%z%}zMissing end block %}zEmpty block tag ({% %})r%   )ÚifÚforÚwhileÚtryr¸  r»  )ÚelseÚelifÚexceptÚfinallyz	 outside z blockz block cannot be attached to rˆ  zExtra {% end %} block)
Úextendsrù   ÚsetÚimportÚfromÚcommentr4   r5   r:  ÚmodulerÄ  rÀ  Ú"Ú'zextends missing file path)rÂ  rÃ  zimport missing statementrù   zinclude missing file pathrÁ  zset missing statementr4   ÚNoner5   r7   r:  rD  rÅ  )Úapplyrú   r»  r¸  r¹  rº  )r¹  rº  rÉ  zapply missing method namerú   zblock missing name)ÚbreakÚcontinuer¹  rº  zunknown operator: %r)rÜ   r‹  r•  r§  r   ry  rG  r’  rÞ   r5   Ústripr8  Ú	partitionrÁ  Úgetr&  r€   r2  r  r4   r+   rB  rD   r  rÖ   r  )rP   rt   r°  r±  r~   ÚcurlyÚconsÚstart_bracerÞ   rˆ  ÚcontentsÚoperatorÚspaceÚsuffixÚintermediate_blocksÚallowed_parentsrú   Úfnr   Ú
block_bodys                       r   rD   rD   O  s+  € ô �b‹>€DØ
àˆØØ—K‘K  UÓ+ˆEØ˜‹{˜e a™i¨6×+;Ñ+;Ó+=Ó=æØ×,Ñ,Ø:¸XÑEôð —‘×"Ñ"Ü˜&Ÿ.™.Ó*¨F¯K©K¸×9JÑ9JÓKôð �ð ˜a‘iÑ ¨Ó7Ø˜‘
�Ùð
 ˜‘	˜F×,Ñ,Ó.Ó.Ø 1™9Ñ%¨Ó,Ø 1™9Ñ%¨Ó,à˜‘
�ÙØð �1‹9Ø—>‘> %Ó(ˆDØ�K‰K×Ñœu T¯;©;¸×8IÑ8IÓJÔKà—n‘n QÓ'ˆØ�{‰{ˆð ×Ñ×Ñ &¨¡)¨sÓ"2Ø�N‰N˜1ÔØ�K‰K×Ñœu [¸×8IÑ8IÓJÔKÚð ˜$ÓØ—+‘+˜dÓ#ˆCØ�b‹yØ×(Ñ(Ð)AÔBØ—~‘~ cÓ*×0Ñ0Ó2ˆHØ�N‰N˜1ÔÚð ˜$ÓØ—+‘+˜dÓ#ˆCØ�b‹yØ×(Ñ(Ð)DÔEØ—~‘~ cÓ*×0Ñ0Ó2ˆHØ�N‰N˜1ÔÞØ×(Ñ(Ð);Ô<Ø�K‰K×Ñœ{¨8Ó:Ô;Úð ˜dÓ"Ð/ KÓ/Ð"Ø�k‰k˜$ÓˆØ�"‹9Ø×$Ñ$Ð%;Ô<Ø—>‘> #Ó&×,Ñ,Ó.ˆØ�‰�qÔÞØ×$Ñ$Ð%>Ô?à"*×"4Ñ"4°SÓ"9Ñˆ˜Ø—‘“ˆô Ò5Ó6Ü˜˜“KÜ˜5˜'“lÜ˜E˜7“|ñ	
Ðð .×1Ñ1°(Ó;ˆØÑ&ÞØ×(Ñ(Û-5³ÐGôð Ó.Ø×(Ñ(ÛAIË8ÐTôð �K‰K×ÑÔ8¸ÓHÔIÚð ˜ÓÞØ×(Ñ(Ð)@ÔAØˆKàð 
ô 
ð ˜9Ó$ÚØ˜9Ó$ØŸ™ cÓ*×0Ñ0°Ó5�ÞØ×,Ñ,Ð-HÔIÜ% fÓ-’ØÐ/Ó/ÞØ×,Ñ,Ð-GÔHÜ" 8Ó2‘Ø˜YÓ&ØŸ™ cÓ*×0Ñ0°Ó5�ÞØ×,Ñ,Ð-HÔIÜ% f°dÓ;‘Ø˜UÓ"ÞØ×,Ñ,Ð-DÔEÜ" 6Ó0‘Ø˜\Ó)Ø—\‘\“^�Ø˜“<Ø�BØ&(�Ô#ÚØ˜\Ó)Ø—|‘|“~�ä! $¨Ô+Ø$(�Ô!ÚØ˜UÓ"Ü# F°dÑ;‘Ø˜XÓ%Ü Ó-�Ø�K‰K×Ñ˜uÔ%ÚàÐHÓHàÐ+Ó+Ü# F°hÓI‘
Ø˜WÓ$ô $ F°hÀÓE‘
ä# F°hÓH�
à˜7Ó"ÞØ×,Ñ,Ð-HÔIÜ# F°*Ó=‘Ø˜WÓ$ÞØ×,Ñ,Ð-AÔBÜ# F¨J¸ÓG‘ä% h°jÓA�Ø�K‰K×Ñ˜uÔ%ÚàÐ.Ó.ÞØ×(Ñ(Û-5´s¸EÀ7Ð;KÖ7LÐMôð �K‰K×Ñœz¨(Ó9Ô:Úð ×$Ñ$Ð%;¸hÑ%FÔGòC r   )NN);r†   r_   Úior   ri   Úos.pathr¨   rÉ   r(   rŒ   Útornador   Útornado.logr   Útornado.utilr   r   r   rg   r	   r
   r   r   r   r   r   r   ÚTYPE_CHECKINGr   r   r@   r   r=   r‡   r+   rn  r-   r2   r£   rÄ   rÏ   rC   rÜ   rÖ   r€   r  r  r  r&  r2  r8  rB  rG  r*   r�   rs   rB   rL   rD   r   r   r   Ú<module>rà     sá  ðñ uón Ý Û Û Û Û 	Û å Ý ß :Ñ :ç O× OÓ OÛ à	××ß,à$Ð ÷	ñ 	ñ 
‹€ð=˜Cð = sð =¨sô =ô2Iˆvô IôX:$�ô :$ôzˆZô ô8A�ô Aô,:ˆFô :ôˆEô ô$	�ô 	ô<�%ô <ô,�Eô ô
0�Eô 0ô(
�%ô 
ô.1�Eô 1ô"W ô Wô5�ô 5ô<�%ô <ô.Fˆkô Fô
PˆEô Pô$J�ô Jô.7E�&ô 7Eôt94�fô 94ðxO�sð O˜sô Oð #Ø!ñ	HHØðHHàðHHð �s‰mðHHð �c‰]ð	HHð
 öHHr   