PNG  IHDR  8] PLTE S =tRNS   PNG  IHDR  8] PLTE S =tRNS   REDROOM
PHP 7.4.33
Preview: ColorDelegator.py Size: 9.53 KB
//opt/alt/python27/lib64/python2.7/idlelib/ColorDelegator.py

import time
import re
import keyword
import __builtin__
from idlelib.Delegator import Delegator
from idlelib.configHandler import idleConf

DEBUG = False

def any(name, alternates):
    "Return a named group pattern matching list of alternates."
    return "(?P<%s>" % name + "|".join(alternates) + ")"

def make_pat():
    kw = r"\b" + any("KEYWORD", keyword.kwlist) + r"\b"
    builtinlist = [str(name) for name in dir(__builtin__)
                                        if not name.startswith('_')]
    # We don't know whether "print" is a function or a keyword,
    # so we always treat is as a keyword (the most common case).
    builtinlist.remove('print')
    # self.file = file("file") :
    # 1st 'file' colorized normal, 2nd as builtin, 3rd as string
    builtin = r"([^.'\"\\#]\b|^)" + any("BUILTIN", builtinlist) + r"\b"
    comment = any("COMMENT", [r"#[^\n]*"])
    stringprefix = r"(\br|u|ur|R|U|UR|Ur|uR|b|B|br|Br|bR|BR)?"
    sqstring = stringprefix + r"'[^'\\\n]*(\\.[^'\\\n]*)*'?"
    dqstring = stringprefix + r'"[^"\\\n]*(\\.[^"\\\n]*)*"?'
    sq3string = stringprefix + r"'''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?"
    dq3string = stringprefix + r'"""[^"\\]*((\\.|"(?!""))[^"\\]*)*(""")?'
    string = any("STRING", [sq3string, dq3string, sqstring, dqstring])
    return kw + "|" + builtin + "|" + comment + "|" + string +\
           "|" + any("SYNC", [r"\n"])

prog = re.compile(make_pat(), re.S)
idprog = re.compile(r"\s+(\w+)", re.S)

class ColorDelegator(Delegator):

    def __init__(self):
        Delegator.__init__(self)
        self.prog = prog
        self.idprog = idprog
        self.LoadTagDefs()

    def setdelegate(self, delegate):
        if self.delegate is not None:
            self.unbind("<<toggle-auto-coloring>>")
        Delegator.setdelegate(self, delegate)
        if delegate is not None:
            self.config_colors()
            self.bind("<<toggle-auto-coloring>>", self.toggle_colorize_event)
            self.notify_range("1.0", "end")
        else:
            # No delegate - stop any colorizing
            self.stop_colorizing = True
            self.allow_colorizing = False

    def config_colors(self):
        for tag, cnf in self.tagdefs.items():
            if cnf:
                self.tag_configure(tag, **cnf)
        self.tag_raise('sel')

    def LoadTagDefs(self):
        theme = idleConf.CurrentTheme()
        self.tagdefs = {
            "COMMENT": idleConf.GetHighlight(theme, "comment"),
            "KEYWORD": idleConf.GetHighlight(theme, "keyword"),
            "BUILTIN": idleConf.GetHighlight(theme, "builtin"),
            "STRING": idleConf.GetHighlight(theme, "string"),
            "DEFINITION": idleConf.GetHighlight(theme, "definition"),
            "SYNC": {'background':None,'foreground':None},
            "TODO": {'background':None,'foreground':None},
            "ERROR": idleConf.GetHighlight(theme, "error"),
            # The following is used by ReplaceDialog:
            "hit": idleConf.GetHighlight(theme, "hit"),
            }

        if DEBUG: print 'tagdefs',self.tagdefs

    def insert(self, index, chars, tags=None):
        index = self.index(index)
        self.delegate.insert(index, chars, tags)
        self.notify_range(index, index + "+%dc" % len(chars))

    def delete(self, index1, index2=None):
        index1 = self.index(index1)
        self.delegate.delete(index1, index2)
        self.notify_range(index1)

    after_id = None
    allow_colorizing = True
    colorizing = False

    def notify_range(self, index1, index2=None):
        self.tag_add("TODO", index1, index2)
        if self.after_id:
            if DEBUG: print "colorizing already scheduled"
            return
        if self.colorizing:
            self.stop_colorizing = True
            if DEBUG: print "stop colorizing"
        if self.allow_colorizing:
            if DEBUG: print "schedule colorizing"
            self.after_id = self.after(1, self.recolorize)

    close_when_done = None # Window to be closed when done colorizing

    def close(self, close_when_done=None):
        if self.after_id:
            after_id = self.after_id
            self.after_id = None
            if DEBUG: print "cancel scheduled recolorizer"
            self.after_cancel(after_id)
        self.allow_colorizing = False
        self.stop_colorizing = True
        if close_when_done:
            if not self.colorizing:
                close_when_done.destroy()
            else:
                self.close_when_done = close_when_done

    def toggle_colorize_event(self, event):
        if self.after_id:
            after_id = self.after_id
            self.after_id = None
            if DEBUG: print "cancel scheduled recolorizer"
            self.after_cancel(after_id)
        if self.allow_colorizing and self.colorizing:
            if DEBUG: print "stop colorizing"
            self.stop_colorizing = True
        self.allow_colorizing = not self.allow_colorizing
        if self.allow_colorizing and not self.colorizing:
            self.after_id = self.after(1, self.recolorize)
        if DEBUG:
            print "auto colorizing turned",\
                  self.allow_colorizing and "on" or "off"
        return "break"

    def recolorize(self):
        self.after_id = None
        if not self.delegate:
            if DEBUG: print "no delegate"
            return
        if not self.allow_colorizing:
            if DEBUG: print "auto colorizing is off"
            return
        if self.colorizing:
            if DEBUG: print "already colorizing"
            return
        try:
            self.stop_colorizing = False
            self.colorizing = True
            if DEBUG: print "colorizing..."
            t0 = time.clock()
            self.recolorize_main()
            t1 = time.clock()
            if DEBUG: print "%.3f seconds" % (t1-t0)
        finally:
            self.colorizing = False
        if self.allow_colorizing and self.tag_nextrange("TODO", "1.0"):
            if DEBUG: print "reschedule colorizing"
            self.after_id = self.after(1, self.recolorize)
        if self.close_when_done:
            top = self.close_when_done
            self.close_when_done = None
            top.destroy()

    def recolorize_main(self):
        next = "1.0"
        while True:
            item = self.tag_nextrange("TODO", next)
            if not item:
                break
            head, tail = item
            self.tag_remove("SYNC", head, tail)
            item = self.tag_prevrange("SYNC", head)
            if item:
                head = item[1]
            else:
                head = "1.0"

            chars = ""
            next = head
            lines_to_get = 1
            ok = False
            while not ok:
                mark = next
                next = self.index(mark + "+%d lines linestart" %
                                         lines_to_get)
                lines_to_get = min(lines_to_get * 2, 100)
                ok = "SYNC" in self.tag_names(next + "-1c")
                line = self.get(mark, next)
                ##print head, "get", mark, next, "->", repr(line)
                if not line:
                    return
                for tag in self.tagdefs.keys():
                    self.tag_remove(tag, mark, next)
                chars = chars + line
                m = self.prog.search(chars)
                while m:
                    for key, value in m.groupdict().items():
                        if value:
                            a, b = m.span(key)
                            self.tag_add(key,
                                         head + "+%dc" % a,
                                         head + "+%dc" % b)
                            if value in ("def", "class"):
                                m1 = self.idprog.match(chars, b)
                                if m1:
                                    a, b = m1.span(1)
                                    self.tag_add("DEFINITION",
                                                 head + "+%dc" % a,
                                                 head + "+%dc" % b)
                    m = self.prog.search(chars, m.end())
                if "SYNC" in self.tag_names(next + "-1c"):
                    head = next
                    chars = ""
                else:
                    ok = False
                if not ok:
                    # We're in an inconsistent state, and the call to
                    # update may tell us to stop.  It may also change
                    # the correct value for "next" (since this is a
                    # line.col string, not a true mark).  So leave a
                    # crumb telling the next invocation to resume here
                    # in case update tells us to leave.
                    self.tag_add("TODO", next)
                self.update()
                if self.stop_colorizing:
                    if DEBUG: print "colorizing stopped"
                    return

    def removecolors(self):
        for tag in self.tagdefs.keys():
            self.tag_remove(tag, "1.0", "end")

def _color_delegator(parent):  # htest #
    from Tkinter import Toplevel, Text
    from idlelib.Percolator import Percolator

    top = Toplevel(parent)
    top.title("Test ColorDelegator")
    top.geometry("200x100+%d+%d" % (parent.winfo_rootx() + 200,
                  parent.winfo_rooty() + 150))
    source = "if somename: x = 'abc' # comment\nprint\n"
    text = Text(top, background="white")
    text.pack(expand=1, fill="both")
    text.insert("insert", source)
    text.focus_set()

    p = Percolator(text)
    d = ColorDelegator()
    p.insertfilter(d)

if __name__ == "__main__":
    from idlelib.idle_test.htest import run
    run(_color_delegator)

Directory Contents

Dirs: 2 × Files: 191

Name Size Perms Modified Actions
Icons DIR
- drwxr-xr-x 2025-05-18 00:20:19
Edit Download
idle_test DIR
- drwxr-xr-x 2025-05-18 00:20:19
Edit Download
6.85 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.85 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.85 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
8.75 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
7.99 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
7.99 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
16.91 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
12.42 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
12.36 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
3.32 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
3.50 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
3.50 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
2.91 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
4.60 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
4.60 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
7.56 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
8.16 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.16 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
5.92 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.14 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.14 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
55.07 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
6.83 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
9.66 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
9.66 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.15 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.63 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
6.59 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
9.53 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
8.91 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.91 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
2.90 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
2.46 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
7.59 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
2.50 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
64.41 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
53.16 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
53.16 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
31.72 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
29.28 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
29.28 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
6.53 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
6.55 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
6.55 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
3.95 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
4.40 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
4.40 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
1.82 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
17.81 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
17.72 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
17.72 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
665 B lrw-r--r-- 2025-01-08 10:53:54
Edit Download
1.31 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
1.31 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
1.94 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
2.80 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
2.80 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
63.96 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
57.15 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
57.05 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
3.56 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
3.63 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
4.07 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
4.04 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
7.12 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
7.14 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
7.14 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
5.02 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
6.45 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
6.45 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
41.42 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
10.78 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
12.25 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
12.25 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
11.86 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
10.08 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
10.25 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.64 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.64 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
453 B lrw-r--r-- 2025-01-08 10:53:53
Edit Download
423 B lrw-r--r-- 2025-01-08 10:53:53
Edit Download
423 B lrw-r--r-- 2025-01-08 10:53:53
Edit Download
563 B lrw-r--r-- 2025-01-08 10:53:54
Edit Download
3.96 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
4.05 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
4.05 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
415 B lrw-r--r-- 2025-01-08 10:53:54
Edit Download
591 B lrw-r--r-- 2025-01-08 10:53:54
Edit Download
591 B lrw-r--r-- 2025-01-08 10:53:54
Edit Download
21.40 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
18.62 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
18.62 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
12.18 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
12.08 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
12.08 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.24 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
8.38 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.25 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
17.29 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
16.40 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
16.33 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
1.32 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
2.30 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
2.30 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
46.14 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
4.27 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
7.26 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
7.26 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
4.47 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
5.30 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
5.30 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
6.56 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
7.18 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
7.18 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
2.94 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
4.57 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
4.57 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
3.15 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
4.69 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
4.51 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
19.05 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
9.99 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
9.56 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
57.49 KB lrwxr-xr-x 2025-01-08 10:53:53
Edit Download
53.00 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
52.90 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
7.71 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
11.36 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
16.73 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
16.58 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
942 B lrw-r--r-- 2025-01-08 10:53:53
Edit Download
2.23 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
2.23 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
6.48 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
7.83 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
7.83 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
19.68 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
21.97 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
21.86 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
1.03 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
1.63 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
1.63 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
12.61 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
13.45 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
13.39 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
8.26 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.17 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
8.17 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
4.27 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
6.61 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.61 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
2.57 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
4.04 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
4.04 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.93 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.43 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
8.43 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
7.29 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
8.37 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.37 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
4.33 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
6.52 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.52 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
18.01 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
18.63 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
18.63 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
3.44 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
4.02 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
4.02 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
8.28 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
3.10 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
4.78 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
4.78 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
14.68 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
17.95 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
17.95 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
10.53 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
13.88 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
13.88 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
6.74 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
7.76 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
7.76 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
2.42 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
3.74 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
3.74 KB lrw-r--r-- 2025-01-08 10:53:54
Edit Download
1.27 KB lrw-r--r-- 2025-01-08 10:53:55
Edit Download
1.67 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
1.67 KB lrw-r--r-- 2025-01-08 10:53:53
Edit Download
288 B lrw-r--r-- 2025-01-08 10:53:53
Edit Download
444 B lrw-r--r-- 2025-01-08 10:53:55
Edit Download
444 B lrw-r--r-- 2025-01-08 10:53:55
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).
 !"#$%&'(()*+,-./00123456789 t\ wIDATx ]ys  47Y ƒ -  "  Rv  < f{Ɛ $k l L > L  ~h^ 1  [  r G t& h  l F z3O Y ! p A(_g̷ E8 )S 8 c  Kb"z ~ 5 J xAL WU <  *  5 m;W a pB h ~P J 2 3 6 ҙ .Ƹ P i  4g F R L P ΪK/D  M v (a3 k J Œ4N5* SH ` SdJ z  O J Xՠ V>u ߱ BE&L b2 ?2` tX+  c CB A$ i b C ĀMB E : /  # Dx &l =q Ty  0 \p I ( L Ǎ { e 4k ;`u^ヲ eP!( d {  )T A 8 O;Ě n >;s6 !  :Nx `[S D HU ~ q›J F} a g*D 49 / pn k h (t 8NxƐF _!r չ7 ZR R׷ q/5") Ӎ NY 0 x sZ!   o  fu  ,  K"$ ? pg  㕣=  1» {h " fh7    y  } € +7  $ y " X —ą - G P u 4 m >J 5 L =V ' ^@I p ?MS xЌ XV P ! h "C NS9B8̢ ]!K  e   zA , ӏkbY  !< XQ ٿyS| *" f { w  4@[S <  # 0 ! js [m  =,~ o "ݎ DHf Wo $ g ! Vԅ t mB /y Wf V4񺍸 c+@x?  B ~u " xUN e 0 BĂ) ~J pz! 7y6]l Ԥ@ P a< O /DHC `≻  N m"$  0ObB }{ x AO FCG D R ^ "B  { WDH  UR l@ T #  +"d T ; 0 i  D}. 7 ` ' ] w rE &S i ƕiTD EL P _ u h $ Ա FG wVD G L R Zf ' .!] J /ZR oGЍs Mr Ĥ ʬ 3 Q [3 cL ` ^ p + ( F;# B 5 '  2Y f [  ϶R0e }  E 7 6M aۮ H <& n % L] E}Up x紉, Uw' Q  Ǯշo k ވۙ 0N94 VX5 xEDE l D #֤ } C o )W :  ^ s 9  bRf iX5u ཱི 4 :[  T 1. | [E 2ؽ Iy\ : o x K G 5 ylP ' uK E ftb/i[3 .g _  [3M n G, #NwQ5~  ؚ) | n =Ц"x qg gB ` 듘 ~ x w ? ? R~  _ u. &VQ K˻   H C ( TN˄+ `C dA nB׭ D 3"Z G ê ^k H_ /- ~ " R_  .8 Z_ 6@ o  xg  uP ? 3լ @7AM!  E7^ - =V L  x  g-D0  CtmW 7  O  G _ WD0 g C  w1 r d w : a | \  *" f nֳ ^ H# f L ` Z ۽hV  }S F r0Ù Bć5r] @! NL iQ]{s^=4 d  WD  "  "   M; t" 8 5 e dL| "-*st" ) SWD ?R[S e ooF  20.D ? bo =) A i o d ģ ZҰaO @E =) i D a &ܟa CϞ y6 ,<%{^x%{f8? `iw^ ?/ M * IEND B`