Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2008-09-02 10:36:19 +0400
committerCampbell Barton <ideasman42@gmail.com>2008-09-02 10:36:19 +0400
commit36d3ae12c6e488ef35e06c45f352745703763de9 (patch)
tree4b648ae6fbdf3b439f6d49ce1c3fe88fa2294fd2
parent546127d964e1144e76fcf4bb28049c68b7eae298 (diff)
svn merge -r 16328:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/blender
-rw-r--r--intern/ghost/intern/GHOST_SystemWin32.cpp6
-rw-r--r--release/datafiles/blenderbuttonsbin69599 -> 68088 bytes
-rw-r--r--release/scripts/bpymodules/BPyTextPlugin.py814
-rw-r--r--release/scripts/scripttemplate_text_plugin.py69
-rw-r--r--release/scripts/textplugin_functiondocs.py64
-rw-r--r--release/scripts/textplugin_imports.py91
-rw-r--r--release/scripts/textplugin_membersuggest.py90
-rw-r--r--release/scripts/textplugin_outliner.py142
-rw-r--r--release/scripts/textplugin_suggest.py94
-rw-r--r--release/scripts/textplugin_templates.py123
-rw-r--r--source/blender/blenkernel/BKE_suggestions.h93
-rw-r--r--source/blender/blenkernel/BKE_text.h29
-rw-r--r--source/blender/blenkernel/intern/suggestions.c254
-rw-r--r--source/blender/blenkernel/intern/text.c564
-rw-r--r--source/blender/blenloader/intern/readfile.c1
-rw-r--r--source/blender/blenloader/intern/writefile.c10
-rw-r--r--source/blender/include/BIF_drawtext.h5
-rw-r--r--source/blender/include/BIF_keyval.h3
-rw-r--r--source/blender/include/BIF_resources.h6
-rw-r--r--source/blender/include/BIF_space.h3
-rw-r--r--source/blender/include/blendef.h7
-rw-r--r--source/blender/makesdna/DNA_space_types.h13
-rw-r--r--source/blender/makesdna/DNA_text_types.h25
-rw-r--r--source/blender/python/BPY_extern.h3
-rw-r--r--source/blender/python/BPY_interface.c36
-rw-r--r--source/blender/python/BPY_menus.c40
-rw-r--r--source/blender/python/BPY_menus.h2
-rw-r--r--source/blender/python/api2_2x/Text.c401
-rw-r--r--source/blender/python/api2_2x/Text.h2
-rw-r--r--source/blender/python/api2_2x/doc/Draw.py8
-rw-r--r--source/blender/python/api2_2x/doc/Text.py103
-rw-r--r--source/blender/src/blenderbuttons.c4305
-rw-r--r--source/blender/src/drawtext.c2776
-rw-r--r--source/blender/src/header_text.c215
-rw-r--r--source/blender/src/keyval.c195
-rw-r--r--source/blender/src/space.c4
-rw-r--r--source/blender/src/toolbox.c13
-rw-r--r--source/blender/src/usiblender.c3
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp102
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_Joystick.h36
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h8
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp56
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h4
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickManager.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickSensor.cpp26
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickSensor.h6
46 files changed, 7668 insertions, 3204 deletions
diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp
index f5c7c08ebfe..7bc20d38739 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.cpp
+++ b/intern/ghost/intern/GHOST_SystemWin32.cpp
@@ -917,8 +917,12 @@ GHOST_TUns8* GHOST_SystemWin32::getClipboard(int flag) const
char *buffer;
char *temp_buff;
- if ( OpenClipboard(NULL) ) {
+ if ( IsClipboardFormatAvailable(CF_TEXT) && OpenClipboard(NULL) ) {
HANDLE hData = GetClipboardData( CF_TEXT );
+ if (hData == NULL) {
+ CloseClipboard();
+ return NULL;
+ }
buffer = (char*)GlobalLock( hData );
temp_buff = (char*) malloc(strlen(buffer)+1);
diff --git a/release/datafiles/blenderbuttons b/release/datafiles/blenderbuttons
index a4834091692..8ae492bcd1f 100644
--- a/release/datafiles/blenderbuttons
+++ b/release/datafiles/blenderbuttons
Binary files differ
diff --git a/release/scripts/bpymodules/BPyTextPlugin.py b/release/scripts/bpymodules/BPyTextPlugin.py
new file mode 100644
index 00000000000..5e5c9f55e53
--- /dev/null
+++ b/release/scripts/bpymodules/BPyTextPlugin.py
@@ -0,0 +1,814 @@
+"""The BPyTextPlugin Module
+
+Use get_cached_descriptor(txt) to retrieve information about the script held in
+the txt Text object.
+
+Use print_cache_for(txt) to print the information to the console.
+
+Use line, cursor = current_line(txt) to get the logical line and cursor position
+
+Use get_targets(line, cursor) to find out what precedes the cursor:
+ aaa.bbb.cc|c.ddd -> ['aaa', 'bbb', 'cc']
+
+Use resolve_targets(txt, targets) to turn a target list into a usable object if
+one is found to match.
+"""
+
+import bpy, sys, os
+import __builtin__, tokenize
+from Blender.sys import time
+from tokenize import generate_tokens, TokenError, \
+ COMMENT, DEDENT, INDENT, NAME, NEWLINE, NL, STRING, NUMBER
+
+class Definition():
+ """Describes a definition or defined object through its name, line number
+ and docstring. This is the base class for definition based descriptors.
+ """
+
+ def __init__(self, name, lineno, doc=''):
+ self.name = name
+ self.lineno = lineno
+ self.doc = doc
+
+class ScriptDesc():
+ """Describes a script through lists of further descriptor objects (classes,
+ defs, vars) and dictionaries to built-in types (imports). If a script has
+ not been fully parsed, its incomplete flag will be set. The time of the last
+ parse is held by the time field and the name of the text object from which
+ it was parsed, the name field.
+ """
+
+ def __init__(self, name, imports, classes, defs, vars, incomplete=False):
+ self.name = name
+ self.imports = imports
+ self.classes = classes
+ self.defs = defs
+ self.vars = vars
+ self.incomplete = incomplete
+ self.parse_due = 0
+
+ def set_delay(self, delay):
+ self.parse_due = time() + delay
+
+class ClassDesc(Definition):
+ """Describes a class through lists of further descriptor objects (defs and
+ vars). The name of the class is held by the name field and the line on
+ which it is defined is held in lineno.
+ """
+
+ def __init__(self, name, parents, defs, vars, lineno, doc=''):
+ Definition.__init__(self, name, lineno, doc)
+ self.parents = parents
+ self.defs = defs
+ self.vars = vars
+
+class FunctionDesc(Definition):
+ """Describes a function through its name and list of parameters (name,
+ params) and the line on which it is defined (lineno).
+ """
+
+ def __init__(self, name, params, lineno, doc=''):
+ Definition.__init__(self, name, lineno, doc)
+ self.params = params
+
+class VarDesc(Definition):
+ """Describes a variable through its name and type (if ascertainable) and the
+ line on which it is defined (lineno). If no type can be determined, type
+ will equal None.
+ """
+
+ def __init__(self, name, type, lineno):
+ Definition.__init__(self, name, lineno)
+ self.type = type # None for unknown (supports: dict/list/str)
+
+# Context types
+CTX_UNSET = -1
+CTX_NORMAL = 0
+CTX_SINGLE_QUOTE = 1
+CTX_DOUBLE_QUOTE = 2
+CTX_COMMENT = 3
+
+# Python keywords
+KEYWORDS = ['and', 'del', 'from', 'not', 'while', 'as', 'elif', 'global',
+ 'or', 'with', 'assert', 'else', 'if', 'pass', 'yield',
+ 'break', 'except', 'import', 'print', 'class', 'exec', 'in',
+ 'raise', 'continue', 'finally', 'is', 'return', 'def', 'for',
+ 'lambda', 'try' ]
+
+# Module file extensions
+MODULE_EXTS = ['.py', '.pyc', '.pyo', '.pyw', '.pyd']
+
+ModuleType = type(__builtin__)
+NoneScriptDesc = ScriptDesc('', dict(), dict(), dict(), dict(), True)
+
+_modules = {}
+_modules_updated = 0
+_parse_cache = dict()
+
+def _load_module_names():
+ """Searches the sys.path for module files and lists them, along with
+ sys.builtin_module_names, in the global dict _modules.
+ """
+
+ global _modules
+
+ for n in sys.builtin_module_names:
+ _modules[n] = None
+ for p in sys.path:
+ if p == '': p = os.curdir
+ if not os.path.isdir(p): continue
+ for f in os.listdir(p):
+ for ext in MODULE_EXTS:
+ if f.endswith(ext):
+ _modules[f[:-len(ext)]] = None
+ break
+
+_load_module_names()
+
+def _trim_doc(doc):
+ """Trims the quotes from a quoted STRING token (eg. "'''text'''" -> "text")
+ """
+
+ l = len(doc)
+ i = 0
+ while i < l/2 and (doc[i] == "'" or doc[i] == '"'):
+ i += 1
+ return doc[i:-i]
+
+def resolve_targets(txt, targets):
+ """Attempts to return a useful object for the locally or externally defined
+ entity described by targets. If the object is local (defined in txt), a
+ Definition instance is returned. If the object is external (imported or
+ built in), the object itself is returned. If no object can be found, None is
+ returned.
+ """
+
+ count = len(targets)
+ if count==0: return None
+
+ obj = None
+ local = None
+ i = 1
+
+ desc = get_cached_descriptor(txt)
+ b = targets[0].find('(')
+ if b==-1: b = None # Trick to let us use [:b] and get the whole string
+
+ if desc.classes.has_key(targets[0][:b]):
+ local = desc.classes[targets[0][:b]]
+ elif desc.defs.has_key(targets[0]):
+ local = desc.defs[targets[0]]
+ elif desc.vars.has_key(targets[0]):
+ obj = desc.vars[targets[0]].type
+
+ if local:
+ while i < count:
+ b = targets[i].find('(')
+ if b==-1: b = None
+ if hasattr(local, 'classes') and local.classes.has_key(targets[i][:b]):
+ local = local.classes[targets[i][:b]]
+ elif hasattr(local, 'defs') and local.defs.has_key(targets[i]):
+ local = local.defs[targets[i]]
+ elif hasattr(local, 'vars') and local.vars.has_key(targets[i]):
+ obj = local.vars[targets[i]].type
+ local = None
+ i += 1
+ break
+ else:
+ local = None
+ break
+ i += 1
+
+ if local: return local
+
+ if not obj:
+ if desc.imports.has_key(targets[0]):
+ obj = desc.imports[targets[0]]
+ else:
+ builtins = get_builtins()
+ if builtins.has_key(targets[0]):
+ obj = builtins[targets[0]]
+
+ while obj and i < count:
+ if hasattr(obj, targets[i]):
+ obj = getattr(obj, targets[i])
+ else:
+ obj = None
+ break
+ i += 1
+
+ return obj
+
+def get_cached_descriptor(txt, force_parse=0):
+ """Returns the cached ScriptDesc for the specified Text object 'txt'. If the
+ script has not been parsed in the last 'period' seconds it will be reparsed
+ to obtain this descriptor.
+
+ Specifying TP_AUTO for the period (default) will choose a period based on the
+ size of the Text object. Larger texts are parsed less often.
+ """
+
+ global _parse_cache
+
+ parse = True
+ key = hash(txt)
+ if not force_parse and _parse_cache.has_key(key):
+ desc = _parse_cache[key]
+ if desc.parse_due > time():
+ parse = desc.incomplete
+
+ if parse:
+ desc = parse_text(txt)
+
+ return desc
+
+def parse_text(txt):
+ """Parses an entire script's text and returns a ScriptDesc instance
+ containing information about the script.
+
+ If the text is not a valid Python script (for example if brackets are left
+ open), parsing may fail to complete. However, if this occurs, no exception
+ is thrown. Instead the returned ScriptDesc instance will have its incomplete
+ flag set and information processed up to this point will still be accessible.
+ """
+
+ start_time = time()
+ txt.reset()
+ tokens = generate_tokens(txt.readline) # Throws TokenError
+
+ curl, cursor = txt.getCursorPos()
+ linen = curl + 1 # Token line numbers are one-based
+
+ imports = dict()
+ imp_step = 0
+
+ classes = dict()
+ cls_step = 0
+
+ defs = dict()
+ def_step = 0
+
+ vars = dict()
+ var1_step = 0
+ var2_step = 0
+ var3_step = 0
+ var_accum = dict()
+ var_forflag = False
+
+ indent = 0
+ prev_type = -1
+ prev_text = ''
+ incomplete = False
+
+ while True:
+ try:
+ type, text, start, end, line = tokens.next()
+ except StopIteration:
+ break
+ except (TokenError, IndentationError):
+ incomplete = True
+ break
+
+ # Skip all comments and line joining characters
+ if type == COMMENT or type == NL:
+ continue
+
+ #################
+ ## Indentation ##
+ #################
+
+ if type == INDENT:
+ indent += 1
+ elif type == DEDENT:
+ indent -= 1
+
+ #########################
+ ## Module importing... ##
+ #########################
+
+ imp_store = False
+
+ # Default, look for 'from' or 'import' to start
+ if imp_step == 0:
+ if text == 'from':
+ imp_tmp = []
+ imp_step = 1
+ elif text == 'import':
+ imp_from = None
+ imp_tmp = []
+ imp_step = 2
+
+ # Found a 'from', create imp_from in form '???.???...'
+ elif imp_step == 1:
+ if text == 'import':
+ imp_from = '.'.join(imp_tmp)
+ imp_tmp = []
+ imp_step = 2
+ elif type == NAME:
+ imp_tmp.append(text)
+ elif text != '.':
+ imp_step = 0 # Invalid syntax
+
+ # Found 'import', imp_from is populated or None, create imp_name
+ elif imp_step == 2:
+ if text == 'as':
+ imp_name = '.'.join(imp_tmp)
+ imp_step = 3
+ elif type == NAME or text == '*':
+ imp_tmp.append(text)
+ elif text != '.':
+ imp_name = '.'.join(imp_tmp)
+ imp_symb = imp_name
+ imp_store = True
+
+ # Found 'as', change imp_symb to this value and go back to step 2
+ elif imp_step == 3:
+ if type == NAME:
+ imp_symb = text
+ else:
+ imp_store = True
+
+ # Both imp_name and imp_symb have now been populated so we can import
+ if imp_store:
+
+ # Handle special case of 'import *'
+ if imp_name == '*':
+ parent = get_module(imp_from)
+ imports.update(parent.__dict__)
+
+ else:
+ # Try importing the name as a module
+ try:
+ if imp_from:
+ module = get_module(imp_from +'.'+ imp_name)
+ else:
+ module = get_module(imp_name)
+ except (ImportError, ValueError, AttributeError, TypeError):
+ # Try importing name as an attribute of the parent
+ try:
+ module = __import__(imp_from, globals(), locals(), [imp_name])
+ imports[imp_symb] = getattr(module, imp_name)
+ except (ImportError, ValueError, AttributeError, TypeError):
+ pass
+ else:
+ imports[imp_symb] = module
+
+ # More to import from the same module?
+ if text == ',':
+ imp_tmp = []
+ imp_step = 2
+ else:
+ imp_step = 0
+
+ ###################
+ ## Class parsing ##
+ ###################
+
+ # If we are inside a class then def and variable parsing should be done
+ # for the class. Otherwise the definitions are considered global
+
+ # Look for 'class'
+ if cls_step == 0:
+ if text == 'class':
+ cls_name = None
+ cls_lineno = start[0]
+ cls_indent = indent
+ cls_step = 1
+
+ # Found 'class', look for cls_name followed by '(' parents ')'
+ elif cls_step == 1:
+ if not cls_name:
+ if type == NAME:
+ cls_name = text
+ cls_sline = False
+ cls_parents = dict()
+ cls_defs = dict()
+ cls_vars = dict()
+ elif type == NAME:
+ if classes.has_key(text):
+ parent = classes[text]
+ cls_parents[text] = parent
+ cls_defs.update(parent.defs)
+ cls_vars.update(parent.vars)
+ elif text == ':':
+ cls_step = 2
+
+ # Found 'class' name ... ':', now check if it's a single line statement
+ elif cls_step == 2:
+ if type == NEWLINE:
+ cls_sline = False
+ else:
+ cls_sline = True
+ cls_doc = ''
+ cls_step = 3
+
+ elif cls_step == 3:
+ if not cls_doc and type == STRING:
+ cls_doc = _trim_doc(text)
+ if cls_sline:
+ if type == NEWLINE:
+ classes[cls_name] = ClassDesc(cls_name, cls_parents, cls_defs, cls_vars, cls_lineno, cls_doc)
+ cls_step = 0
+ else:
+ if type == DEDENT and indent <= cls_indent:
+ classes[cls_name] = ClassDesc(cls_name, cls_parents, cls_defs, cls_vars, cls_lineno, cls_doc)
+ cls_step = 0
+
+ #################
+ ## Def parsing ##
+ #################
+
+ # Look for 'def'
+ if def_step == 0:
+ if text == 'def':
+ def_name = None
+ def_lineno = start[0]
+ def_step = 1
+
+ # Found 'def', look for def_name followed by '('
+ elif def_step == 1:
+ if type == NAME:
+ def_name = text
+ def_params = []
+ elif def_name and text == '(':
+ def_step = 2
+
+ # Found 'def' name '(', now identify the parameters upto ')'
+ # TODO: Handle ellipsis '...'
+ elif def_step == 2:
+ if type == NAME:
+ def_params.append(text)
+ elif text == ':':
+ def_step = 3
+
+ # Found 'def' ... ':', now check if it's a single line statement
+ elif def_step == 3:
+ if type == NEWLINE:
+ def_sline = False
+ else:
+ def_sline = True
+ def_doc = ''
+ def_step = 4
+
+ elif def_step == 4:
+ if type == STRING:
+ def_doc = _trim_doc(text)
+ newdef = None
+ if def_sline:
+ if type == NEWLINE:
+ newdef = FunctionDesc(def_name, def_params, def_lineno, def_doc)
+ else:
+ if type == NAME:
+ newdef = FunctionDesc(def_name, def_params, def_lineno, def_doc)
+ if newdef:
+ if cls_step > 0: # Parsing a class
+ cls_defs[def_name] = newdef
+ else:
+ defs[def_name] = newdef
+ def_step = 0
+
+ ##########################
+ ## Variable assignation ##
+ ##########################
+
+ if cls_step > 0: # Parsing a class
+ # Look for 'self.???'
+ if var1_step == 0:
+ if text == 'self':
+ var1_step = 1
+ elif var1_step == 1:
+ if text == '.':
+ var_name = None
+ var1_step = 2
+ else:
+ var1_step = 0
+ elif var1_step == 2:
+ if type == NAME:
+ var_name = text
+ if cls_vars.has_key(var_name):
+ var_step = 0
+ else:
+ var1_step = 3
+ elif var1_step == 3:
+ if text == '=':
+ var1_step = 4
+ elif text != ',':
+ var1_step = 0
+ elif var1_step == 4:
+ var_type = None
+ if type == NUMBER:
+ close = end[1]
+ if text.find('.') != -1: var_type = float
+ else: var_type = int
+ elif type == STRING:
+ close = end[1]
+ var_type = str
+ elif text == '[':
+ close = line.find(']', end[1])
+ var_type = list
+ elif text == '(':
+ close = line.find(')', end[1])
+ var_type = tuple
+ elif text == '{':
+ close = line.find('}', end[1])
+ var_type = dict
+ elif text == 'dict':
+ close = line.find(')', end[1])
+ var_type = dict
+ if var_type and close+1 < len(line):
+ if line[close+1] != ' ' and line[close+1] != '\t':
+ var_type = None
+ cls_vars[var_name] = VarDesc(var_name, var_type, start[0])
+ var1_step = 0
+
+ elif def_step > 0: # Parsing a def
+ # Look for 'global ???[,???]'
+ if var2_step == 0:
+ if text == 'global':
+ var2_step = 1
+ elif var2_step == 1:
+ if type == NAME:
+ if not vars.has_key(text):
+ vars[text] = VarDesc(text, None, start[0])
+ elif text != ',' and type != NL:
+ var2_step == 0
+
+ else: # In global scope
+ if var3_step == 0:
+ # Look for names
+ if text == 'for':
+ var_accum = dict()
+ var_forflag = True
+ elif text == '=' or (var_forflag and text == 'in'):
+ var_forflag = False
+ var3_step = 1
+ elif type == NAME:
+ if prev_text != '.' and not vars.has_key(text):
+ var_accum[text] = VarDesc(text, None, start[0])
+ elif not text in [',', '(', ')', '[', ']']:
+ var_accum = dict()
+ var_forflag = False
+ elif var3_step == 1:
+ if len(var_accum) != 1:
+ var_type = None
+ vars.update(var_accum)
+ else:
+ var_name = var_accum.keys()[0]
+ var_type = None
+ if type == NUMBER:
+ if text.find('.') != -1: var_type = float
+ else: var_type = int
+ elif type == STRING: var_type = str
+ elif text == '[': var_type = list
+ elif text == '(': var_type = tuple
+ elif text == '{': var_type = dict
+ vars[var_name] = VarDesc(var_name, var_type, start[0])
+ var3_step = 0
+
+ #######################
+ ## General utilities ##
+ #######################
+
+ prev_type = type
+ prev_text = text
+
+ desc = ScriptDesc(txt.name, imports, classes, defs, vars, incomplete)
+ desc.set_delay(10 * (time()-start_time) + 0.05)
+
+ global _parse_cache
+ _parse_cache[hash(txt)] = desc
+ return desc
+
+def get_modules(since=1):
+ """Returns the set of built-in modules and any modules that have been
+ imported into the system upto 'since' seconds ago.
+ """
+
+ global _modules, _modules_updated
+
+ t = time()
+ if _modules_updated < t - since:
+ _modules.update(sys.modules)
+ _modules_updated = t
+ return _modules.keys()
+
+def suggest_cmp(x, y):
+ """Use this method when sorting a list of suggestions.
+ """
+
+ return cmp(x[0].upper(), y[0].upper())
+
+def get_module(name):
+ """Returns the module specified by its name. The module itself is imported
+ by this method and, as such, any initialization code will be executed.
+ """
+
+ mod = __import__(name)
+ components = name.split('.')
+ for comp in components[1:]:
+ mod = getattr(mod, comp)
+ return mod
+
+def type_char(v):
+ """Returns the character used to signify the type of a variable. Use this
+ method to identify the type character for an item in a suggestion list.
+
+ The following values are returned:
+ 'm' if the parameter is a module
+ 'f' if the parameter is callable
+ 'v' if the parameter is variable or otherwise indeterminable
+
+ """
+
+ if isinstance(v, ModuleType):
+ return 'm'
+ elif callable(v):
+ return 'f'
+ else:
+ return 'v'
+
+def get_context(txt):
+ """Establishes the context of the cursor in the given Blender Text object
+
+ Returns one of:
+ CTX_NORMAL - Cursor is in a normal context
+ CTX_SINGLE_QUOTE - Cursor is inside a single quoted string
+ CTX_DOUBLE_QUOTE - Cursor is inside a double quoted string
+ CTX_COMMENT - Cursor is inside a comment
+
+ """
+
+ l, cursor = txt.getCursorPos()
+ lines = txt.asLines(0, l+1)
+
+ # FIXME: This method is too slow in large files for it to be called as often
+ # as it is. So for lines below the 1000th line we do this... (quorn)
+ if l > 1000: return CTX_NORMAL
+
+ # Detect context (in string or comment)
+ in_str = CTX_NORMAL
+ for line in lines:
+ if l == 0:
+ end = cursor
+ else:
+ end = len(line)
+ l -= 1
+
+ # Comments end at new lines
+ if in_str == CTX_COMMENT:
+ in_str = CTX_NORMAL
+
+ for i in range(end):
+ if in_str == 0:
+ if line[i] == "'": in_str = CTX_SINGLE_QUOTE
+ elif line[i] == '"': in_str = CTX_DOUBLE_QUOTE
+ elif line[i] == '#': in_str = CTX_COMMENT
+ else:
+ if in_str == CTX_SINGLE_QUOTE:
+ if line[i] == "'":
+ in_str = CTX_NORMAL
+ # In again if ' escaped, out again if \ escaped, and so on
+ for a in range(i-1, -1, -1):
+ if line[a] == '\\': in_str = 1-in_str
+ else: break
+ elif in_str == CTX_DOUBLE_QUOTE:
+ if line[i] == '"':
+ in_str = CTX_NORMAL
+ # In again if " escaped, out again if \ escaped, and so on
+ for a in range(i-1, -1, -1):
+ if line[i-a] == '\\': in_str = 2-in_str
+ else: break
+
+ return in_str
+
+def current_line(txt):
+ """Extracts the Python script line at the cursor in the Blender Text object
+ provided and cursor position within this line as the tuple pair (line,
+ cursor).
+ """
+
+ lineindex, cursor = txt.getCursorPos()
+ lines = txt.asLines()
+ line = lines[lineindex]
+
+ # Join previous lines to this line if spanning
+ i = lineindex - 1
+ while i > 0:
+ earlier = lines[i].rstrip()
+ if earlier.endswith('\\'):
+ line = earlier[:-1] + ' ' + line
+ cursor += len(earlier)
+ i -= 1
+
+ # Join later lines while there is an explicit joining character
+ i = lineindex
+ while i < len(lines)-1 and lines[i].rstrip().endswith('\\'):
+ later = lines[i+1].strip()
+ line = line + ' ' + later[:-1]
+ i += 1
+
+ return line, cursor
+
+def get_targets(line, cursor):
+ """Parses a period separated string of valid names preceding the cursor and
+ returns them as a list in the same order.
+ """
+
+ brk = 0
+ targets = []
+ j = cursor
+ i = j-1
+ while i >= 0:
+ if line[i] == ')': brk += 1
+ elif brk:
+ if line[i] == '(': brk -= 1
+ else:
+ if line[i] == '.':
+ targets.insert(0, line[i+1:j]); j=i
+ elif not (line[i].isalnum() or line[i] == '_' or line[i] == '.'):
+ break
+ i -= 1
+ targets.insert(0, line[i+1:j])
+ return targets
+
+def get_defs(txt):
+ """Returns a dictionary which maps definition names in the source code to
+ a list of their parameter names.
+
+ The line 'def doit(one, two, three): print one' for example, results in the
+ mapping 'doit' : [ 'one', 'two', 'three' ]
+ """
+
+ return get_cached_descriptor(txt).defs
+
+def get_vars(txt):
+ """Returns a dictionary of variable names found in the specified Text
+ object. This method locates all names followed directly by an equal sign:
+ 'a = ???' or indirectly as part of a tuple/list assignment or inside a
+ 'for ??? in ???:' block.
+ """
+
+ return get_cached_descriptor(txt).vars
+
+def get_imports(txt):
+ """Returns a dictionary which maps symbol names in the source code to their
+ respective modules.
+
+ The line 'from Blender import Text as BText' for example, results in the
+ mapping 'BText' : <module 'Blender.Text' (built-in)>
+
+ Note that this method imports the modules to provide this mapping as as such
+ will execute any initilization code found within.
+ """
+
+ return get_cached_descriptor(txt).imports
+
+def get_builtins():
+ """Returns a dictionary of built-in modules, functions and variables."""
+
+ return __builtin__.__dict__
+
+
+#################################
+## Debugging utility functions ##
+#################################
+
+def print_cache_for(txt, period=sys.maxint):
+ """Prints out the data cached for a given Text object. If no period is
+ given the text will not be reparsed and the cached version will be returned.
+ Otherwise if the period has expired the text will be reparsed.
+ """
+
+ desc = get_cached_descriptor(txt, period)
+ print '================================================'
+ print 'Name:', desc.name, '('+str(hash(txt))+')'
+ print '------------------------------------------------'
+ print 'Defs:'
+ for name, ddesc in desc.defs.items():
+ print ' ', name, ddesc.params, ddesc.lineno
+ print ' ', ddesc.doc
+ print '------------------------------------------------'
+ print 'Vars:'
+ for name, vdesc in desc.vars.items():
+ print ' ', name, vdesc.type, vdesc.lineno
+ print '------------------------------------------------'
+ print 'Imports:'
+ for name, item in desc.imports.items():
+ print ' ', name.ljust(15), item
+ print '------------------------------------------------'
+ print 'Classes:'
+ for clsnme, clsdsc in desc.classes.items():
+ print ' *********************************'
+ print ' Name:', clsnme
+ print ' ', clsdsc.doc
+ print ' ---------------------------------'
+ print ' Defs:'
+ for name, ddesc in clsdsc.defs.items():
+ print ' ', name, ddesc.params, ddesc.lineno
+ print ' ', ddesc.doc
+ print ' ---------------------------------'
+ print ' Vars:'
+ for name, vdesc in clsdsc.vars.items():
+ print ' ', name, vdesc.type, vdesc.lineno
+ print ' *********************************'
+ print '================================================'
diff --git a/release/scripts/scripttemplate_text_plugin.py b/release/scripts/scripttemplate_text_plugin.py
new file mode 100644
index 00000000000..4ae562736d3
--- /dev/null
+++ b/release/scripts/scripttemplate_text_plugin.py
@@ -0,0 +1,69 @@
+#!BPY
+"""
+Name: 'Text Plugin'
+Blender: 246
+Group: 'ScriptTemplate'
+Tooltip: 'Add a new text for writing a text plugin'
+"""
+
+from Blender import Window
+import bpy
+
+script_data = \
+'''#!BPY
+"""
+Name: 'My Plugin Script'
+Blender: 246
+Group: 'TextPlugin'
+Shortcut: 'Ctrl+Alt+U'
+Tooltip: 'Put some useful info here'
+"""
+
+# Add a licence here if you wish to re-distribute, we recommend the GPL
+
+from Blender import Window, sys
+import BPyTextPlugin, bpy
+
+def my_script_util(txt):
+ # This function prints out statistical information about a script
+
+ desc = BPyTextPlugin.get_cached_descriptor(txt)
+ print '---------------------------------------'
+ print 'Script Name:', desc.name
+ print 'Classes:', len(desc.classes)
+ print ' ', desc.classes.keys()
+ print 'Functions:', len(desc.defs)
+ print ' ', desc.defs.keys()
+ print 'Variables:', len(desc.vars)
+ print ' ', desc.vars.keys()
+
+def main():
+
+ # Gets the active text object, there can be many in one blend file.
+ txt = bpy.data.texts.active
+
+ # Silently return if the script has been run with no active text
+ if not txt:
+ return
+
+ # Text plug-ins should run quickly so we time it here
+ Window.WaitCursor(1)
+ t = sys.time()
+
+ # Run our utility function
+ my_script_util(txt)
+
+ # Timing the script is a good way to be aware on any speed hits when scripting
+ print 'Plugin script finished in %.2f seconds' % (sys.time()-t)
+ Window.WaitCursor(0)
+
+
+# This lets you import the script without running it
+if __name__ == '__main__':
+ main()
+'''
+
+new_text = bpy.data.texts.new('textplugin_template.py')
+new_text.write(script_data)
+bpy.data.texts.active = new_text
+Window.RedrawAll()
diff --git a/release/scripts/textplugin_functiondocs.py b/release/scripts/textplugin_functiondocs.py
new file mode 100644
index 00000000000..41c8d4842a0
--- /dev/null
+++ b/release/scripts/textplugin_functiondocs.py
@@ -0,0 +1,64 @@
+#!BPY
+"""
+Name: 'Function Documentation | Ctrl I'
+Blender: 246
+Group: 'TextPlugin'
+Shortcut: 'Ctrl+I'
+Tooltip: 'Attempts to display documentation about the function preceding the cursor.'
+"""
+
+# Only run if we have the required modules
+try:
+ import bpy
+ from BPyTextPlugin import *
+except ImportError:
+ OK = False
+else:
+ OK = True
+
+def main():
+ txt = bpy.data.texts.active
+ if not txt:
+ return
+
+ (line, c) = current_line(txt)
+
+ # Check we are in a normal context
+ if get_context(txt) != CTX_NORMAL:
+ return
+
+ # Identify the name under the cursor
+ llen = len(line)
+ while c<llen and (line[c].isalnum() or line[c]=='_'):
+ c += 1
+
+ targets = get_targets(line, c)
+
+ # If no name under cursor, look backward to see if we're in function parens
+ if len(targets) == 0 or targets[0] == '':
+ # Look backwards for first '(' without ')'
+ b = 0
+ found = False
+ for i in range(c-1, -1, -1):
+ if line[i] == ')': b += 1
+ elif line[i] == '(':
+ b -= 1
+ if b < 0:
+ found = True
+ c = i
+ break
+ if found: targets = get_targets(line, c)
+ if len(targets) == 0 or targets[0] == '':
+ return
+
+ obj = resolve_targets(txt, targets)
+ if not obj: return
+
+ if isinstance(obj, Definition): # Local definition
+ txt.showDocs(obj.doc)
+ elif hasattr(obj, '__doc__') and obj.__doc__:
+ txt.showDocs(obj.__doc__)
+
+# Check we are running as a script and not imported as a module
+if __name__ == "__main__" and OK:
+ main()
diff --git a/release/scripts/textplugin_imports.py b/release/scripts/textplugin_imports.py
new file mode 100644
index 00000000000..ec608243c2b
--- /dev/null
+++ b/release/scripts/textplugin_imports.py
@@ -0,0 +1,91 @@
+#!BPY
+"""
+Name: 'Import Complete|Space'
+Blender: 246
+Group: 'TextPlugin'
+Shortcut: 'Space'
+Tooltip: 'Lists modules when import or from is typed'
+"""
+
+# Only run if we have the required modules
+try:
+ import bpy, sys
+ from BPyTextPlugin import *
+except ImportError:
+ OK = False
+else:
+ OK = True
+
+def main():
+ txt = bpy.data.texts.active
+ if not txt:
+ return
+
+ line, c = current_line(txt)
+
+ # Check we are in a normal context
+ if get_context(txt) != CTX_NORMAL:
+ return
+
+ pos = line.rfind('from ', 0, c)
+
+ # No 'from' found
+ if pos == -1:
+ # Check instead for straight 'import xxxx'
+ pos2 = line.rfind('import ', 0, c)
+ if pos2 != -1:
+ pos2 += 7
+ for i in range(pos2, c):
+ if line[i]==',' or (line[i]==' ' and line[i-1]==','):
+ pos2 = i+1
+ elif not line[i].isalnum() and line[i] != '_':
+ return
+ items = [(m, 'm') for m in get_modules()]
+ items.sort(cmp = suggest_cmp)
+ txt.suggest(items, line[pos2:c].strip())
+ return
+
+ # Found 'from xxxxx' before cursor
+ immediate = True
+ pos += 5
+ for i in range(pos, c):
+ if not line[i].isalnum() and line[i] != '_' and line[i] != '.':
+ immediate = False
+ break
+
+ # Immediate 'from' followed by at most a module name
+ if immediate:
+ items = [(m, 'm') for m in get_modules()]
+ items.sort(cmp = suggest_cmp)
+ txt.suggest(items, line[pos:c])
+ return
+
+ # Found 'from' earlier, suggest import if not already there
+ pos2 = line.rfind('import ', pos, c)
+
+ # No 'import' found after 'from' so suggest it
+ if pos2 == -1:
+ txt.suggest([('import', 'k')], '')
+ return
+
+ # Immediate 'import' before cursor and after 'from...'
+ for i in range(pos2+7, c):
+ if line[i]==',' or (line[i]==' ' and line[i-1]==','):
+ pass
+ elif not line[i].isalnum() and line[i] != '_':
+ return
+ between = line[pos:pos2-1].strip()
+ try:
+ mod = get_module(between)
+ except ImportError:
+ return
+
+ items = [('*', 'k')]
+ for (k,v) in mod.__dict__.items():
+ items.append((k, type_char(v)))
+ items.sort(cmp = suggest_cmp)
+ txt.suggest(items, '')
+
+# Check we are running as a script and not imported as a module
+if __name__ == "__main__" and OK:
+ main()
diff --git a/release/scripts/textplugin_membersuggest.py b/release/scripts/textplugin_membersuggest.py
new file mode 100644
index 00000000000..7c0de78b704
--- /dev/null
+++ b/release/scripts/textplugin_membersuggest.py
@@ -0,0 +1,90 @@
+#!BPY
+"""
+Name: 'Member Suggest | .'
+Blender: 246
+Group: 'TextPlugin'
+Shortcut: 'Period'
+Tooltip: 'Lists members of the object preceding the cursor in the current text space'
+"""
+
+# Only run if we have the required modules
+try:
+ import bpy
+ from BPyTextPlugin import *
+except ImportError:
+ OK = False
+else:
+ OK = True
+
+def main():
+ txt = bpy.data.texts.active
+ if not txt:
+ return
+
+ (line, c) = current_line(txt)
+
+ # Check we are in a normal context
+ if get_context(txt) != CTX_NORMAL:
+ return
+
+ targets = get_targets(line, c)
+
+ if targets[0] == '': # Check if we are looking at a constant [] {} '' etc.
+ i = c - len('.'.join(targets)) - 1
+ if i >= 0:
+ if line[i] == '"' or line[i] == "'":
+ targets[0] = 'str'
+ elif line[i] == '}':
+ targets[0] = 'dict'
+ elif line[i] == ']': # Could be array elem x[y] or list [y]
+ i = line.rfind('[', 0, i) - 1
+ while i >= 0:
+ if line[i].isalnum() or line[i] == '_':
+ break
+ elif line[i] != ' ' and line[i] != '\t':
+ i = -1
+ break
+ i -= 1
+ if i < 0:
+ targets[0] = 'list'
+
+ obj = resolve_targets(txt, targets[:-1])
+ if not obj:
+ return
+
+ items = []
+
+ if isinstance(obj, VarDesc):
+ obj = obj.type
+
+ if isinstance(obj, Definition): # Locally defined
+ if hasattr(obj, 'classes'):
+ items.extend([(s, 'f') for s in obj.classes.keys()])
+ if hasattr(obj, 'defs'):
+ items.extend([(s, 'f') for s in obj.defs.keys()])
+ if hasattr(obj, 'vars'):
+ items.extend([(s, 'v') for s in obj.vars.keys()])
+
+ else: # Otherwise we have an imported or builtin object
+ try:
+ attr = obj.__dict__.keys()
+ except AttributeError:
+ attr = dir(obj)
+ else:
+ if not attr: attr = dir(obj)
+
+ for k in attr:
+ try:
+ v = getattr(obj, k)
+ except (AttributeError, TypeError): # Some attributes are not readable
+ pass
+ else:
+ items.append((k, type_char(v)))
+
+ if items != []:
+ items.sort(cmp = suggest_cmp)
+ txt.suggest(items, targets[-1])
+
+# Check we are running as a script and not imported as a module
+if __name__ == "__main__" and OK:
+ main()
diff --git a/release/scripts/textplugin_outliner.py b/release/scripts/textplugin_outliner.py
new file mode 100644
index 00000000000..3879a2819a5
--- /dev/null
+++ b/release/scripts/textplugin_outliner.py
@@ -0,0 +1,142 @@
+#!BPY
+"""
+Name: 'Code Outline | Ctrl T'
+Blender: 246
+Group: 'TextPlugin'
+Shortcut: 'Ctrl+T'
+Tooltip: 'Provides a menu for jumping to class and functions definitions.'
+"""
+
+# Only run if we have the required modules
+try:
+ import bpy
+ from BPyTextPlugin import *
+ from Blender import Draw
+except ImportError:
+ OK = False
+else:
+ OK = True
+
+def make_menu(items, eventoffs):
+ n = len(items)
+ if n < 20:
+ return [(items[i], i+1+eventoffs) for i in range(len(items))]
+
+ letters = []
+ check = 'abcdefghijklmnopqrstuvwxyz_' # Names cannot start 0-9
+ for c in check:
+ for item in items:
+ if item[0].lower() == c:
+ letters.append(c)
+ break
+
+ entries = {}
+ i = 0
+ for item in items:
+ i += 1
+ c = item[0].lower()
+ entries.setdefault(c, []).append((item, i+eventoffs))
+
+ subs = []
+ for c in letters:
+ subs.append((c, entries[c]))
+
+ return subs
+
+def find_word(txt, word):
+ i = 0
+ txt.reset()
+ while True:
+ try:
+ line = txt.readline()
+ except StopIteration:
+ break
+ c = line.find(word)
+ if c != -1:
+ txt.setCursorPos(i, c)
+ break
+ i += 1
+
+def main():
+ txt = bpy.data.texts.active
+ if not txt:
+ return
+
+ # Identify word under cursor
+ if get_context(txt) == CTX_NORMAL:
+ line, c = current_line(txt)
+ start = c-1
+ end = c
+ while start >= 0:
+ if not line[start].lower() in 'abcdefghijklmnopqrstuvwxyz0123456789_':
+ break
+ start -= 1
+ while end < len(line):
+ if not line[end].lower() in 'abcdefghijklmnopqrstuvwxyz0123456789_':
+ break
+ end += 1
+ word = line[start+1:end]
+ if word in KEYWORDS:
+ word = None
+ else:
+ word = None
+
+ script = get_cached_descriptor(txt)
+ items = []
+ desc = None
+
+ tmp = script.classes.keys()
+ tmp.sort(cmp = suggest_cmp)
+ class_menu = make_menu(tmp, len(items))
+ class_menu_length = len(tmp)
+ items.extend(tmp)
+
+ tmp = script.defs.keys()
+ tmp.sort(cmp = suggest_cmp)
+ defs_menu = make_menu(tmp, len(items))
+ defs_menu_length = len(tmp)
+ items.extend(tmp)
+
+ tmp = script.vars.keys()
+ tmp.sort(cmp = suggest_cmp)
+ vars_menu = make_menu(tmp, len(items))
+ vars_menu_length = len(tmp)
+ items.extend(tmp)
+
+ menu = [('Script %t', 0),
+ ('Classes', class_menu),
+ ('Functions', defs_menu),
+ ('Variables', vars_menu)]
+ if word:
+ menu.extend([None, ('Locate', [(word, -10)])])
+
+ i = Draw.PupTreeMenu(menu)
+ if i == -1:
+ return
+
+ # Chosen to search for word under cursor
+ if i == -10:
+ if script.classes.has_key(word):
+ desc = script.classes[word]
+ elif script.defs.has_key(word):
+ desc = script.defs[word]
+ elif script.vars.has_key(word):
+ desc = script.vars[word]
+ else:
+ find_word(txt, word)
+ return
+ else:
+ i -= 1
+ if i < class_menu_length:
+ desc = script.classes[items[i]]
+ elif i < class_menu_length + defs_menu_length:
+ desc = script.defs[items[i]]
+ elif i < class_menu_length + defs_menu_length + vars_menu_length:
+ desc = script.vars[items[i]]
+
+ if desc:
+ txt.setCursorPos(desc.lineno-1, 0)
+
+# Check we are running as a script and not imported as a module
+if __name__ == "__main__" and OK:
+ main()
diff --git a/release/scripts/textplugin_suggest.py b/release/scripts/textplugin_suggest.py
new file mode 100644
index 00000000000..d8122212d3b
--- /dev/null
+++ b/release/scripts/textplugin_suggest.py
@@ -0,0 +1,94 @@
+#!BPY
+"""
+Name: 'Suggest All | Ctrl Space'
+Blender: 246
+Group: 'TextPlugin'
+Shortcut: 'Ctrl+Space'
+Tooltip: 'Performs suggestions based on the context of the cursor'
+"""
+
+# Only run if we have the required modules
+try:
+ import bpy
+ from BPyTextPlugin import *
+except ImportError:
+ OK = False
+else:
+ OK = True
+
+def check_membersuggest(line, c):
+ pos = line.rfind('.', 0, c)
+ if pos == -1:
+ return False
+ for s in line[pos+1:c]:
+ if not s.isalnum() and s != '_':
+ return False
+ return True
+
+def check_imports(line, c):
+ pos = line.rfind('import ', 0, c)
+ if pos > -1:
+ for s in line[pos+7:c]:
+ if not s.isalnum() and s != '_':
+ return False
+ return True
+ pos = line.rfind('from ', 0, c)
+ if pos > -1:
+ for s in line[pos+5:c]:
+ if not s.isalnum() and s != '_':
+ return False
+ return True
+ return False
+
+def main():
+ txt = bpy.data.texts.active
+ if not txt:
+ return
+
+ line, c = current_line(txt)
+
+ # Check we are in a normal context
+ if get_context(txt) != CTX_NORMAL:
+ return
+
+ # Check the character preceding the cursor and execute the corresponding script
+
+ if check_membersuggest(line, c):
+ import textplugin_membersuggest
+ textplugin_membersuggest.main()
+ return
+
+ elif check_imports(line, c):
+ import textplugin_imports
+ textplugin_imports.main()
+ return
+
+ # Otherwise we suggest globals, keywords, etc.
+ list = []
+ targets = get_targets(line, c)
+ desc = get_cached_descriptor(txt)
+
+ for k in KEYWORDS:
+ list.append((k, 'k'))
+
+ for k, v in get_builtins().items():
+ list.append((k, type_char(v)))
+
+ for k, v in desc.imports.items():
+ list.append((k, type_char(v)))
+
+ for k, v in desc.classes.items():
+ list.append((k, 'f'))
+
+ for k, v in desc.defs.items():
+ list.append((k, 'f'))
+
+ for k, v in desc.vars.items():
+ list.append((k, 'v'))
+
+ list.sort(cmp = suggest_cmp)
+ txt.suggest(list, targets[-1])
+
+# Check we are running as a script and not imported as a module
+if __name__ == "__main__" and OK:
+ main()
diff --git a/release/scripts/textplugin_templates.py b/release/scripts/textplugin_templates.py
new file mode 100644
index 00000000000..8f949563ac0
--- /dev/null
+++ b/release/scripts/textplugin_templates.py
@@ -0,0 +1,123 @@
+#!BPY
+"""
+Name: 'Template Completion | Tab'
+Blender: 246
+Group: 'TextPlugin'
+Shortcut: 'Tab'
+Tooltip: 'Completes templates based on the text preceding the cursor'
+"""
+
+# Only run if we have the required modules
+try:
+ import bpy
+ from BPyTextPlugin import *
+ from Blender import Text
+except ImportError:
+ OK = False
+else:
+ OK = True
+
+templates = {
+ 'ie':
+ 'if ${1:cond}:\n'
+ '\t${2}\n'
+ 'else:\n'
+ '\t${3}\n',
+ 'iei':
+ 'if ${1:cond}:\n'
+ '\t${2}\n'
+ 'elif:\n'
+ '\t${3}\n'
+ 'else:\n'
+ '\t${4}\n',
+ 'def':
+ 'def ${1:name}(${2:params}):\n'
+ '\t"""(${2}) - ${3:comment}"""\n'
+ '\t${4}',
+ 'cls':
+ 'class ${1:name}(${2:parent}):\n'
+ '\t"""${3:docs}"""\n'
+ '\t\n'
+ '\tdef __init__(self, ${4:params}):\n'
+ '\t\t"""Creates a new ${1}"""\n'
+ '\t\t${5}',
+ 'class':
+ 'class ${1:name}(${2:parent}):\n'
+ '\t"""${3:docs}"""\n'
+ '\t\n'
+ '\tdef __init__(self, ${4:params}):\n'
+ '\t\t"""Creates a new ${1}"""\n'
+ '\t\t${5}'
+}
+
+def main():
+ txt = bpy.data.texts.active
+ if not txt:
+ return
+
+ row, c = txt.getCursorPos()
+ line = txt.asLines(row, row+1)[0]
+ indent=0
+ while indent<c and (line[indent]==' ' or line[indent]=='\t'):
+ indent += 1
+
+ # Check we are in a normal context
+ if get_context(txt) != CTX_NORMAL:
+ return
+
+ targets = get_targets(line, c-1);
+ if len(targets) != 1: return
+
+ color = (0, 192, 32)
+
+ for trigger, template in templates.items():
+ if trigger != targets[0]: continue
+ inserts = {}
+ txt.delete(-len(trigger)-1)
+ y, x = txt.getCursorPos()
+ first = None
+
+ # Insert template text and parse for insertion points
+ count = len(template); i = 0
+ while i < count:
+ if i<count-1 and template[i]=='$' and template[i+1]=='{':
+ i += 2
+ e = template.find('}', i)
+ item = template[i:e].split(':')
+ if len(item)<2: item.append('')
+ if not inserts.has_key(item[0]):
+ inserts[item[0]] = (item[1], [(x, y)])
+ else:
+ inserts[item[0]][1].append((x, y))
+ item[1] = inserts[item[0]][0]
+ if not first: first = (item[1], x, y)
+ txt.insert(item[1])
+ x += len(item[1])
+ i = e
+ else:
+ txt.insert(template[i])
+ if template[i] == '\n':
+ txt.insert(line[:indent])
+ y += 1
+ x = indent
+ else:
+ x += 1
+ i += 1
+
+ # Insert markers at insertion points
+ for id, (text, points) in inserts.items():
+ for x, y in points:
+ txt.setCursorPos(y, x)
+ txt.setSelectPos(y, x+len(text))
+ txt.markSelection((hash(text)+int(id)) & 0xFFFF, color,
+ Text.TMARK_TEMP | Text.TMARK_EDITALL)
+ if first:
+ text, x, y = first
+ txt.setCursorPos(y, x)
+ txt.setSelectPos(y, x+len(text))
+ break
+
+
+# Check we are running as a script and not imported as a module
+if __name__ == "__main__" and OK:
+ main()
diff --git a/source/blender/blenkernel/BKE_suggestions.h b/source/blender/blenkernel/BKE_suggestions.h
new file mode 100644
index 00000000000..d58b8f58bf5
--- /dev/null
+++ b/source/blender/blenkernel/BKE_suggestions.h
@@ -0,0 +1,93 @@
+/**
+ * $Id: $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008, Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef BKE_SUGGESTIONS_H
+#define BKE_SUGGESTIONS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ****************************************************************************
+Suggestions should be added in sorted order although a linear sorting method is
+implemented. The list is then divided up based on the prefix provided by
+update_suggestions:
+
+Example:
+ Prefix: ab
+ aaa <-- first
+ aab
+ aba <-- firstmatch
+ abb <-- lastmatch
+ baa
+ bab <-- last
+**************************************************************************** */
+
+struct Text;
+
+typedef struct SuggItem {
+ struct SuggItem *prev, *next;
+ char *name;
+ char type;
+} SuggItem;
+
+typedef struct SuggList {
+ SuggItem *first, *last;
+ SuggItem *firstmatch, *lastmatch;
+ SuggItem *selected;
+ int top;
+} SuggList;
+
+/* Free all text tool memory */
+void free_texttools();
+
+/* Used to identify which Text object the current tools should appear against */
+void texttool_text_set_active(Text *text);
+void texttool_text_clear();
+short texttool_text_is_active(Text *text);
+
+/* Suggestions */
+void texttool_suggest_add(const char *name, char type);
+void texttool_suggest_prefix(const char *prefix);
+void texttool_suggest_clear();
+SuggItem *texttool_suggest_first();
+SuggItem *texttool_suggest_last();
+void texttool_suggest_select(SuggItem *sel);
+SuggItem *texttool_suggest_selected();
+int *texttool_suggest_top();
+
+/* Documentation */
+void texttool_docs_show(const char *docs);
+char *texttool_docs_get();
+void texttool_docs_clear();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h
index 6f891ab4887..002c804f17f 100644
--- a/source/blender/blenkernel/BKE_text.h
+++ b/source/blender/blenkernel/BKE_text.h
@@ -52,20 +52,24 @@ void txt_free_cut_buffer (void);
char* txt_to_buf (struct Text *text);
void txt_clean_text (struct Text *text);
void txt_order_cursors (struct Text *text);
-int txt_find_string (struct Text *text, char *findstr);
+int txt_find_string (struct Text *text, char *findstr, int wrap);
int txt_has_sel (struct Text *text);
int txt_get_span (struct TextLine *from, struct TextLine *to);
void txt_move_up (struct Text *text, short sel);
void txt_move_down (struct Text *text, short sel);
void txt_move_left (struct Text *text, short sel);
void txt_move_right (struct Text *text, short sel);
+void txt_jump_left (struct Text *text, short sel);
+void txt_jump_right (struct Text *text, short sel);
void txt_move_bof (struct Text *text, short sel);
void txt_move_eof (struct Text *text, short sel);
void txt_move_bol (struct Text *text, short sel);
void txt_move_eol (struct Text *text, short sel);
void txt_move_toline (struct Text *text, unsigned int line, short sel);
+void txt_move_to (struct Text *text, unsigned int line, unsigned int ch, short sel);
void txt_pop_sel (struct Text *text);
void txt_delete_char (struct Text *text);
+void txt_delete_word (struct Text *text);
void txt_copy_sel (struct Text *text);
void txt_sel_all (struct Text *text);
void txt_sel_line (struct Text *text);
@@ -80,8 +84,10 @@ void txt_do_undo (struct Text *text);
void txt_do_redo (struct Text *text);
void txt_split_curline (struct Text *text);
void txt_backspace_char (struct Text *text);
+void txt_backspace_word (struct Text *text);
int txt_add_char (struct Text *text, char add);
-void txt_find_panel (struct SpaceText *st, int again);
+int txt_replace_char (struct Text *text, char add);
+void find_and_replace (struct SpaceText *st, short mode);
void run_python_script (struct SpaceText *st);
int jumptoline_interactive (struct SpaceText *st);
void txt_export_to_object (struct Text *text);
@@ -94,6 +100,17 @@ int setcurr_tab (struct Text *text);
void convert_tabs (struct SpaceText *st, int tab);
void txt_copy_clipboard (struct Text *text);
void txt_paste_clipboard (struct Text *text);
+
+void txt_add_marker (struct Text *text, struct TextLine *line, int start, int end, char color[4], int group, int flags);
+short txt_clear_marker_region (struct Text *text, struct TextLine *line, int start, int end, int group, int flags);
+short txt_clear_markers (struct Text *text, int group, int flags);
+struct TextMarker *txt_find_marker (struct Text *text, struct TextLine *line, int curs, int group, int flags);
+struct TextMarker *txt_find_marker_region (struct Text *text, struct TextLine *line, int start, int end, int group, int flags);
+struct TextMarker *txt_prev_marker (struct Text *text, struct TextMarker *marker);
+struct TextMarker *txt_next_marker (struct Text *text, struct TextMarker *marker);
+struct TextMarker *txt_prev_marker_color (struct Text *text, struct TextMarker *marker);
+struct TextMarker *txt_next_marker_color (struct Text *text, struct TextMarker *marker);
+
/* Undo opcodes */
/* Simple main cursor movement */
@@ -135,6 +152,14 @@ void txt_paste_clipboard (struct Text *text);
#define UNDO_COMMENT 034
#define UNDO_UNCOMMENT 035
+/* Find and replace flags */
+#define TXT_FIND_WRAP 0x01
+#define TXT_FIND_ALLTEXTS 0x02
+
+/* Marker flags */
+#define TMARK_TEMP 0x01 /* Remove on non-editing events, don't save */
+#define TMARK_EDITALL 0x02 /* Edit all markers of the same group as one */
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/intern/suggestions.c b/source/blender/blenkernel/intern/suggestions.c
new file mode 100644
index 00000000000..54ce425a04a
--- /dev/null
+++ b/source/blender/blenkernel/intern/suggestions.c
@@ -0,0 +1,254 @@
+/**
+ * $Id: $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008, Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Ian Thompson.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "MEM_guardedalloc.h"
+#include "BLI_blenlib.h"
+#include "DNA_text_types.h"
+#include "BKE_text.h"
+#include "BKE_suggestions.h"
+
+/**********************/
+/* Static definitions */
+/**********************/
+
+static Text *activeToolText = NULL;
+static SuggList suggestions = {NULL, NULL, NULL, NULL, NULL};
+static char *documentation = NULL;
+static int doc_lines = 0;
+
+static int txttl_cmp(const char *first, const char *second, int len) {
+ int cmp, i;
+ for (cmp=0, i=0; i<len; i++) {
+ if (cmp= toupper(first[i])-toupper(second[i])) {
+ break;
+ }
+ }
+ return cmp;
+}
+
+static void txttl_free_suggest() {
+ SuggItem *item, *prev;
+ for (item = suggestions.last; item; item=prev) {
+ prev = item->prev;
+ MEM_freeN(item);
+ }
+ suggestions.first = suggestions.last = NULL;
+ suggestions.firstmatch = suggestions.lastmatch = NULL;
+ suggestions.selected = NULL;
+ suggestions.top = 0;
+}
+
+static void txttl_free_docs() {
+ if (documentation) {
+ MEM_freeN(documentation);
+ documentation = NULL;
+ }
+}
+
+/**************************/
+/* General tool functions */
+/**************************/
+
+void free_texttools() {
+ txttl_free_suggest();
+ txttl_free_docs();
+}
+
+void texttool_text_set_active(Text *text) {
+ if (activeToolText == text) return;
+ texttool_text_clear();
+ activeToolText = text;
+}
+
+void texttool_text_clear() {
+ free_texttools();
+ activeToolText = NULL;
+}
+
+short texttool_text_is_active(Text *text) {
+ return activeToolText==text ? 1 : 0;
+}
+
+/***************************/
+/* Suggestion list methods */
+/***************************/
+
+void texttool_suggest_add(const char *name, char type) {
+ SuggItem *newitem, *item;
+ int len, cmp;
+
+ newitem = MEM_mallocN(sizeof(SuggItem) + strlen(name) + 1, "SuggestionItem");
+ if (!newitem) {
+ printf("Failed to allocate memory for suggestion.\n");
+ return;
+ }
+
+ newitem->name = (char *) (newitem + 1);
+ len = strlen(name);
+ strncpy(newitem->name, name, len);
+ newitem->name[len] = '\0';
+ newitem->type = type;
+ newitem->prev = newitem->next = NULL;
+
+ /* Perform simple linear search for ordered storage */
+ if (!suggestions.first || !suggestions.last) {
+ suggestions.first = suggestions.last = newitem;
+ } else {
+ cmp = -1;
+ for (item=suggestions.last; item; item=item->prev) {
+ cmp = txttl_cmp(name, item->name, len);
+
+ /* Newitem comes after this item, insert here */
+ if (cmp >= 0) {
+ newitem->prev = item;
+ if (item->next)
+ item->next->prev = newitem;
+ newitem->next = item->next;
+ item->next = newitem;
+
+ /* At last item, set last pointer here */
+ if (item == suggestions.last)
+ suggestions.last = newitem;
+ break;
+ }
+ }
+ /* Reached beginning of list, insert before first */
+ if (cmp < 0) {
+ newitem->next = suggestions.first;
+ suggestions.first->prev = newitem;
+ suggestions.first = newitem;
+ }
+ }
+ suggestions.firstmatch = suggestions.lastmatch = suggestions.selected = NULL;
+ suggestions.top= 0;
+}
+
+void texttool_suggest_prefix(const char *prefix) {
+ SuggItem *match, *first, *last;
+ int cmp, len = strlen(prefix), top = 0;
+
+ if (!suggestions.first) return;
+ if (len==0) {
+ suggestions.selected = suggestions.firstmatch = suggestions.first;
+ suggestions.lastmatch = suggestions.last;
+ return;
+ }
+
+ first = last = NULL;
+ for (match=suggestions.first; match; match=match->next) {
+ cmp = txttl_cmp(prefix, match->name, len);
+ if (cmp==0) {
+ if (!first) {
+ first = match;
+ suggestions.top = top;
+ }
+ } else if (cmp<0) {
+ if (!last) {
+ last = match->prev;
+ break;
+ }
+ }
+ top++;
+ }
+ if (first) {
+ if (!last) last = suggestions.last;
+ suggestions.firstmatch = first;
+ suggestions.lastmatch = last;
+ suggestions.selected = first;
+ } else {
+ suggestions.firstmatch = NULL;
+ suggestions.lastmatch = NULL;
+ suggestions.selected = NULL;
+ suggestions.top = 0;
+ }
+}
+
+void texttool_suggest_clear() {
+ txttl_free_suggest();
+}
+
+SuggItem *texttool_suggest_first() {
+ return suggestions.firstmatch;
+}
+
+SuggItem *texttool_suggest_last() {
+ return suggestions.lastmatch;
+}
+
+void texttool_suggest_select(SuggItem *sel) {
+ suggestions.selected = sel;
+}
+
+SuggItem *texttool_suggest_selected() {
+ return suggestions.selected;
+}
+
+int *texttool_suggest_top() {
+ return &suggestions.top;
+}
+
+/*************************/
+/* Documentation methods */
+/*************************/
+
+void texttool_docs_show(const char *docs) {
+ int len;
+
+ if (!docs) return;
+
+ len = strlen(docs);
+
+ if (documentation) {
+ MEM_freeN(documentation);
+ documentation = NULL;
+ }
+
+ /* Ensure documentation ends with a '\n' */
+ if (docs[len-1] != '\n') {
+ documentation = MEM_mallocN(len+2, "Documentation");
+ strncpy(documentation, docs, len);
+ documentation[len++] = '\n';
+ } else {
+ documentation = MEM_mallocN(len+1, "Documentation");
+ strncpy(documentation, docs, len);
+ }
+ documentation[len] = '\0';
+}
+
+char *texttool_docs_get() {
+ return documentation;
+}
+
+void texttool_docs_clear() {
+ txttl_free_docs();
+}
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index 53b7bb975a3..12133fc4fff 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -30,6 +30,8 @@
*/
#include <string.h> /* strstr */
+#include <sys/types.h>
+#include <sys/stat.h>
#include "MEM_guardedalloc.h"
@@ -81,12 +83,19 @@ The st->top determines at what line the top of the text is displayed.
If the user moves the cursor the st containing that cursor should
be popped ... other st's retain their own top location.
-*/ /***************/
-
+Markers
+--
+The mrk->flags define the behaviour and relationships between markers. The
+upper two bytes are used to hold a group ID, the lower two are normal flags. If
+TMARK_EDITALL is set the group ID defines which other markers should be edited.
-/****************/ /*
- Undo
+The mrk->clr field is used to visually group markers where the flags may not
+match. A template system, for example, may allow editing of repeating tokens
+(in one group) but include other marked positions (in another group) all in the
+same template with the same colour.
+Undo
+--
Undo/Redo works by storing
events in a queue, and a pointer
to the current position in the
@@ -145,6 +154,7 @@ void free_text(Text *text)
}
BLI_freelistN(&text->lines);
+ BLI_freelistN(&text->markers);
if(text->name) MEM_freeN(text->name);
MEM_freeN(text->undo_buf);
@@ -169,10 +179,11 @@ Text *add_empty_text(char *name)
ta->flags= TXT_ISDIRTY | TXT_ISTMP | TXT_ISMEM;
ta->lines.first= ta->lines.last= NULL;
+ ta->markers.first= ta->markers.last= NULL;
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(1, "textline_string");
- tmp->format= (char*) MEM_mallocN(2, "Syntax_format");
+ tmp->format= NULL;
tmp->line[0]=0;
tmp->len= 0;
@@ -209,11 +220,12 @@ static void cleanup_textline(TextLine * tl)
int reopen_text(Text *text)
{
FILE *fp;
- int i, llen, len;
+ int i, llen, len, res;
unsigned char *buffer;
TextLine *tmp;
char sfile[FILE_MAXFILE];
char str[FILE_MAXDIR+FILE_MAXFILE];
+ struct stat st;
if (!text || !text->name) return 0;
@@ -242,7 +254,7 @@ int reopen_text(Text *text)
text->undo_len= TXT_INIT_UNDO;
text->undo_buf= MEM_mallocN(text->undo_len, "undo buf");
- text->flags= TXT_ISDIRTY | TXT_ISTMP;
+ text->flags= TXT_ISTMP;
fseek(fp, 0L, SEEK_END);
len= ftell(fp);
@@ -256,6 +268,9 @@ int reopen_text(Text *text)
len = fread(buffer, 1, len, fp);
fclose(fp);
+
+ res= stat(str, &st);
+ text->mtime= st.st_mtime;
text->nlines=0;
i=0;
@@ -264,7 +279,7 @@ int reopen_text(Text *text)
if (buffer[i]=='\n') {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
tmp->line[llen]=0;
@@ -284,7 +299,7 @@ int reopen_text(Text *text)
if (llen!=0 || text->nlines==0) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
@@ -307,12 +322,13 @@ int reopen_text(Text *text)
Text *add_text(char *file)
{
FILE *fp;
- int i, llen, len;
+ int i, llen, len, res;
unsigned char *buffer;
TextLine *tmp;
Text *ta;
char sfile[FILE_MAXFILE];
char str[FILE_MAXDIR+FILE_MAXFILE];
+ struct stat st;
BLI_strncpy(str, file, FILE_MAXDIR+FILE_MAXFILE);
if (G.scene) /* can be NULL (bg mode) */
@@ -326,6 +342,7 @@ Text *add_text(char *file)
ta->id.us= 1;
ta->lines.first= ta->lines.last= NULL;
+ ta->markers.first= ta->markers.last= NULL;
ta->curl= ta->sell= NULL;
/* ta->flags= TXT_ISTMP | TXT_ISEXT; */
@@ -348,6 +365,9 @@ Text *add_text(char *file)
len = fread(buffer, 1, len, fp);
fclose(fp);
+
+ res= stat(str, &st);
+ ta->mtime= st.st_mtime;
ta->nlines=0;
i=0;
@@ -356,7 +376,7 @@ Text *add_text(char *file)
if (buffer[i]=='\n') {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
tmp->line[llen]=0;
@@ -376,7 +396,7 @@ Text *add_text(char *file)
if (llen!=0 || ta->nlines==0) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= (char*) MEM_mallocN(llen+1, "textline_string");
- tmp->format= (char*) MEM_mallocN(llen+2, "Syntax_format");
+ tmp->format= NULL;
if(llen) memcpy(tmp->line, &buffer[i-llen], llen);
@@ -410,6 +430,7 @@ Text *copy_text(Text *ta)
tan->flags = ta->flags | TXT_ISDIRTY | TXT_ISTMP;
tan->lines.first= tan->lines.last= NULL;
+ tan->markers.first= tan->markers.last= NULL;
tan->curl= tan->sell= NULL;
tan->nlines= ta->nlines;
@@ -419,7 +440,7 @@ Text *copy_text(Text *ta)
while (line) {
tmp= (TextLine*) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(line->len+1, "textline_string");
- tmp->format= MEM_mallocN(line->len+2, "Syntax_format");
+ tmp->format= NULL;
strcpy(tmp->line, line->line);
@@ -440,14 +461,14 @@ Text *copy_text(Text *ta)
/* Editing utility functions */
/*****************************/
-static void make_new_line (TextLine *line, char *newline, char *newformat)
+static void make_new_line (TextLine *line, char *newline)
{
if (line->line) MEM_freeN(line->line);
if (line->format) MEM_freeN(line->format);
line->line= newline;
line->len= strlen(newline);
- line->format= newformat;
+ line->format= NULL;
}
static TextLine *txt_new_line(char *str)
@@ -458,7 +479,7 @@ static TextLine *txt_new_line(char *str)
tmp= (TextLine *) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(strlen(str)+1, "textline_string");
- tmp->format= MEM_mallocN(strlen(str)+2, "Syntax_format");
+ tmp->format= NULL;
strcpy(tmp->line, str);
@@ -476,7 +497,7 @@ static TextLine *txt_new_linen(char *str, int n)
tmp= (TextLine *) MEM_mallocN(sizeof(TextLine), "textline");
tmp->line= MEM_mallocN(n+1, "textline_string");
- tmp->format= MEM_mallocN(n+2, "Syntax_format");
+ tmp->format= NULL;
BLI_strncpy(tmp->line, str, n+1);
@@ -553,6 +574,19 @@ static void txt_make_dirty (Text *text)
if (text->compiled) BPY_free_compiled_text(text);
}
+/* 0:whitespace, 1:punct, 2:alphanumeric */
+static short txt_char_type (char ch)
+{
+ if (ch <= ' ') return 0;
+ if (ch <= '/') return 1;
+ if (ch <= '9') return 2;
+ if (ch <= '@') return 1;
+ if (ch <= 'Z') return 2;
+ if (ch <= '`') return 1;
+ if (ch <= 'z') return 2;
+ return 1;
+}
+
/****************************/
/* Cursor utility functions */
/****************************/
@@ -606,8 +640,7 @@ void txt_move_up(Text *text, short sel)
if(!undoing) txt_undo_add_op(text, sel?UNDO_SUP:UNDO_CUP);
}
} else {
- *charp= 0;
- if(!undoing) txt_undo_add_op(text, sel?UNDO_SUP:UNDO_CUP);
+ txt_move_bol(text, sel);
}
if(!sel) txt_pop_sel(text);
@@ -632,8 +665,7 @@ void txt_move_down(Text *text, short sel)
} else
if(!undoing) txt_undo_add_op(text, sel?UNDO_SDOWN:UNDO_CDOWN);
} else {
- *charp= (*linep)->len;
- if(!undoing) txt_undo_add_op(text, sel?UNDO_SDOWN:UNDO_CDOWN);
+ txt_move_eol(text, sel);
}
if(!sel) txt_pop_sel(text);
@@ -689,6 +721,68 @@ void txt_move_right(Text *text, short sel)
if(!sel) txt_pop_sel(text);
}
+void txt_jump_left(Text *text, short sel)
+{
+ TextLine **linep, *oldl;
+ int *charp, oldc, count, i;
+ unsigned char oldu;
+
+ if (!text) return;
+ if(sel) txt_curs_sel(text, &linep, &charp);
+ else { txt_pop_first(text); txt_curs_cur(text, &linep, &charp); }
+ if (!*linep) return;
+
+ oldl= *linep;
+ oldc= *charp;
+ oldu= undoing;
+ undoing= 1; /* Don't push individual moves to undo stack */
+
+ count= 0;
+ for (i=0; i<3; i++) {
+ if (count < 2) {
+ while (*charp>0 && txt_char_type((*linep)->line[*charp-1])==i) {
+ txt_move_left(text, sel);
+ count++;
+ }
+ }
+ }
+ if (count==0) txt_move_left(text, sel);
+
+ undoing= oldu;
+ if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
+}
+
+void txt_jump_right(Text *text, short sel)
+{
+ TextLine **linep, *oldl;
+ int *charp, oldc, count, i;
+ unsigned char oldu;
+
+ if (!text) return;
+ if(sel) txt_curs_sel(text, &linep, &charp);
+ else { txt_pop_last(text); txt_curs_cur(text, &linep, &charp); }
+ if (!*linep) return;
+
+ oldl= *linep;
+ oldc= *charp;
+ oldu= undoing;
+ undoing= 1; /* Don't push individual moves to undo stack */
+
+ count= 0;
+ for (i=0; i<3; i++) {
+ if (count < 2) {
+ while (*charp<(*linep)->len && txt_char_type((*linep)->line[*charp])==i) {
+ txt_move_right(text, sel);
+ count++;
+ }
+ }
+ }
+ if (count==0) txt_move_right(text, sel);
+
+ undoing= oldu;
+ if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
+}
+
void txt_move_bol (Text *text, short sel)
{
TextLine **linep;
@@ -761,6 +855,11 @@ void txt_move_eof (Text *text, short sel)
void txt_move_toline (Text *text, unsigned int line, short sel)
{
+ txt_move_to(text, line, 0, sel);
+}
+
+void txt_move_to (Text *text, unsigned int line, unsigned int ch, short sel)
+{
TextLine **linep, *oldl;
int *charp, oldc;
unsigned int i;
@@ -777,10 +876,12 @@ void txt_move_toline (Text *text, unsigned int line, short sel)
if ((*linep)->next) *linep= (*linep)->next;
else break;
}
- *charp= 0;
+ if (ch>(*linep)->len)
+ ch= (*linep)->len;
+ *charp= ch;
if(!sel) txt_pop_sel(text);
- if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
+ if(!undoing) txt_undo_add_toop(text, sel?UNDO_STO:UNDO_CTO, txt_get_span(text->lines.first, oldl), oldc, txt_get_span(text->lines.first, *linep), (unsigned short)*charp);
}
/****************************/
@@ -865,7 +966,9 @@ int txt_has_sel(Text *text)
static void txt_delete_sel (Text *text)
{
TextLine *tmpl;
- char *buf, *format;
+ TextMarker *mrk;
+ char *buf;
+ int move, lineno;
if (!text) return;
if (!text->curl) return;
@@ -882,13 +985,33 @@ static void txt_delete_sel (Text *text)
}
buf= MEM_mallocN(text->curc+(text->sell->len - text->selc)+1, "textline_string");
- format= MEM_mallocN(text->curc+(text->sell->len - text->selc)+2, "Syntax_format");
+ if (text->curl != text->sell) {
+ txt_clear_marker_region(text, text->curl, text->curc, text->curl->len, 0, 0);
+ move= txt_get_span(text->curl, text->sell);
+ } else {
+ mrk= txt_find_marker_region(text, text->curl, text->curc, text->selc, 0, 0);
+ if (mrk && (mrk->start > text->curc || mrk->end < text->selc))
+ txt_clear_marker_region(text, text->curl, text->curc, text->selc, 0, 0);
+ move= 0;
+ }
+
+ mrk= txt_find_marker_region(text, text->sell, text->selc-1, text->sell->len, 0, 0);
+ if (mrk) {
+ lineno= mrk->lineno;
+ do {
+ mrk->lineno -= move;
+ if (mrk->start > text->curc) mrk->start -= text->selc - text->curc;
+ mrk->end -= text->selc - text->curc;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
+
strncpy(buf, text->curl->line, text->curc);
strcpy(buf+text->curc, text->sell->line + text->selc);
buf[text->curc+(text->sell->len - text->selc)]=0;
- make_new_line(text->curl, buf, format);
+ make_new_line(text->curl, buf);
tmpl= text->sell;
while (tmpl != text->curl) {
@@ -995,22 +1118,31 @@ char *txt_to_buf (Text *text)
return buf;
}
-int txt_find_string(Text *text, char *findstr)
+int txt_find_string(Text *text, char *findstr, int wrap)
{
TextLine *tl, *startl;
char *s= NULL;
+ int oldcl, oldsl, oldcc, oldsc;
if (!text || !text->curl || !text->sell) return 0;
txt_order_cursors(text);
+ oldcl= txt_get_span(text->lines.first, text->curl);
+ oldsl= txt_get_span(text->lines.first, text->sell);
tl= startl= text->sell;
+ oldcc= text->curc;
+ oldsc= text->selc;
s= strstr(&tl->line[text->selc], findstr);
while (!s) {
tl= tl->next;
- if (!tl)
- tl= text->lines.first;
+ if (!tl) {
+ if (wrap)
+ tl= text->lines.first;
+ else
+ break;
+ }
s= strstr(tl->line, findstr);
if (tl==startl)
@@ -1018,10 +1150,10 @@ int txt_find_string(Text *text, char *findstr)
}
if (s) {
- text->curl= text->sell= tl;
- text->curc= (int) (s-tl->line);
- text->selc= text->curc + strlen(findstr);
-
+ int newl= txt_get_span(text->lines.first, tl);
+ int newc= (int)(s-tl->line);
+ txt_move_to(text, newl, newc, 0);
+ txt_move_to(text, newl, newc + strlen(findstr), 1);
return 1;
} else
return 0;
@@ -1621,7 +1753,6 @@ void txt_do_undo(Text *text)
case UNDO_SWAP:
txt_curs_swap(text);
- txt_do_undo(text); /* swaps should appear transparent */
break;
case UNDO_DBLOCK:
@@ -1736,6 +1867,19 @@ void txt_do_undo(Text *text)
break;
}
+
+ /* next undo step may need evaluating */
+ if (text->undo_pos>=0) {
+ switch (text->undo_buf[text->undo_pos]) {
+ case UNDO_STO:
+ txt_do_undo(text);
+ txt_do_redo(text); /* selections need restoring */
+ break;
+ case UNDO_SWAP:
+ txt_do_undo(text); /* swaps should appear transparent */
+ break;
+ }
+ }
undoing= 0;
}
@@ -1810,7 +1954,7 @@ void txt_do_redo(Text *text)
case UNDO_SWAP:
txt_curs_swap(text);
- txt_do_undo(text); /* swaps should appear transparent a*/
+ txt_do_redo(text); /* swaps should appear transparent a*/
break;
case UNDO_CTO:
@@ -1947,22 +2091,37 @@ void txt_do_redo(Text *text)
void txt_split_curline (Text *text)
{
TextLine *ins;
- char *left, *right, *fleft, *fright;
+ TextMarker *mrk;
+ char *left, *right;
+ int lineno= -1;
if (!text) return;
if (!text->curl) return;
- txt_delete_sel(text);
+ txt_delete_sel(text);
+
+ /* Move markers */
+
+ lineno= txt_get_span(text->lines.first, text->curl);
+ mrk= text->markers.first;
+ while (mrk) {
+ if (mrk->lineno==lineno && mrk->start>text->curc) {
+ mrk->lineno++;
+ mrk->start -= text->curc;
+ mrk->end -= text->curc;
+ } else if (mrk->lineno > lineno) {
+ mrk->lineno++;
+ }
+ mrk= mrk->next;
+ }
/* Make the two half strings */
left= MEM_mallocN(text->curc+1, "textline_string");
- fleft= MEM_mallocN(text->curc+2, "Syntax_format");
if (text->curc) memcpy(left, text->curl->line, text->curc);
left[text->curc]=0;
right= MEM_mallocN(text->curl->len - text->curc+1, "textline_string");
- fright= MEM_mallocN(text->curl->len - text->curc+2, "Syntax_format");
if (text->curl->len - text->curc) memcpy(right, text->curl->line+text->curc, text->curl->len-text->curc);
right[text->curl->len - text->curc]=0;
@@ -1973,11 +2132,11 @@ void txt_split_curline (Text *text)
ins= MEM_mallocN(sizeof(TextLine), "textline");
ins->line= left;
- ins->format= fleft;
+ ins->format= NULL;
ins->len= text->curc;
text->curl->line= right;
- text->curl->format= fright;
+ text->curl->format= NULL;
text->curl->len= text->curl->len - text->curc;
BLI_insertlinkbefore(&text->lines, text->curl, ins);
@@ -1993,9 +2152,23 @@ void txt_split_curline (Text *text)
static void txt_delete_line (Text *text, TextLine *line)
{
+ TextMarker *mrk=NULL, *nxt;
+ int lineno= -1;
+
if (!text) return;
if (!text->curl) return;
+ lineno= txt_get_span(text->lines.first, line);
+ mrk= text->markers.first;
+ while (mrk) {
+ nxt= mrk->next;
+ if (mrk->lineno==lineno)
+ BLI_freelinkN(&text->markers, mrk);
+ else if (mrk->lineno > lineno)
+ mrk->lineno--;
+ mrk= nxt;
+ }
+
BLI_remlink (&text->lines, line);
if (line->line) MEM_freeN(line->line);
@@ -2009,21 +2182,35 @@ static void txt_delete_line (Text *text, TextLine *line)
static void txt_combine_lines (Text *text, TextLine *linea, TextLine *lineb)
{
- char *tmp, *format;
+ char *tmp;
+ TextMarker *mrk= NULL;
+ int lineno=-1;
if (!text) return;
if(!linea || !lineb) return;
+
+ mrk= txt_find_marker_region(text, lineb, 0, lineb->len, 0, 0);
+ if (mrk) {
+ lineno= mrk->lineno;
+ do {
+ mrk->lineno--;
+ mrk->start += linea->len;
+ mrk->end += linea->len;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
+ if (lineno==-1) lineno= txt_get_span(text->lines.first, lineb);
+ if (!mrk) mrk= text->markers.first;
tmp= MEM_mallocN(linea->len+lineb->len+1, "textline_string");
- format= MEM_mallocN(linea->len+lineb->len+1, "Syntax_format");
strcpy(tmp, linea->line);
strcat(tmp, lineb->line);
- make_new_line(linea, tmp, format);
+ make_new_line(linea, tmp);
- txt_delete_line(text, lineb);
+ txt_delete_line(text, lineb);
txt_make_dirty(text);
txt_clean_text(text);
@@ -2037,8 +2224,9 @@ void txt_delete_char (Text *text)
if (!text->curl) return;
if (txt_has_sel(text)) { /* deleting a selection */
- txt_delete_sel(text);
- return;
+ txt_delete_sel(text);
+ txt_make_dirty(text);
+ return;
}
else if (text->curc== text->curl->len) { /* Appending two lines */
if (text->curl->next) {
@@ -2047,6 +2235,25 @@ void txt_delete_char (Text *text)
}
} else { /* Just deleting a char */
int i= text->curc;
+
+ TextMarker *mrk= txt_find_marker_region(text, text->curl, i-1, text->curl->len, 0, 0);
+ if (mrk) {
+ int lineno= mrk->lineno;
+ if (mrk->end==i) {
+ if ((mrk->flags & TMARK_TEMP) && !(mrk->flags & TMARK_EDITALL)) {
+ txt_clear_markers(text, mrk->group, TMARK_TEMP);
+ } else {
+ TextMarker *nxt= mrk->next;
+ BLI_freelinkN(&text->markers, mrk);
+ }
+ return;
+ }
+ do {
+ if (mrk->start>i) mrk->start--;
+ mrk->end--;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
c= text->curl->line[i];
while(i< text->curl->len) {
@@ -2064,6 +2271,12 @@ void txt_delete_char (Text *text)
if(!undoing) txt_undo_add_charop(text, UNDO_DEL, c);
}
+void txt_delete_word (Text *text)
+{
+ txt_jump_right(text, 1);
+ txt_delete_sel(text);
+}
+
void txt_backspace_char (Text *text)
{
char c='\n';
@@ -2072,8 +2285,9 @@ void txt_backspace_char (Text *text)
if (!text->curl) return;
if (txt_has_sel(text)) { /* deleting a selection */
- txt_delete_sel(text);
- return;
+ txt_delete_sel(text);
+ txt_make_dirty(text);
+ return;
}
else if (text->curc==0) { /* Appending two lines */
if (!text->curl->prev) return;
@@ -2083,19 +2297,38 @@ void txt_backspace_char (Text *text)
txt_combine_lines(text, text->curl, text->curl->next);
txt_pop_sel(text);
- }
+ }
else { /* Just backspacing a char */
- int i= text->curc-1;
-
- c= text->curl->line[i];
- while(i< text->curl->len) {
- text->curl->line[i]= text->curl->line[i+1];
- i++;
- }
- text->curl->len--;
- text->curc--;
+ int i= text->curc-1;
+
+ TextMarker *mrk= txt_find_marker_region(text, text->curl, i, text->curl->len, 0, 0);
+ if (mrk) {
+ int lineno= mrk->lineno;
+ if (mrk->start==i+1) {
+ if ((mrk->flags & TMARK_TEMP) && !(mrk->flags & TMARK_EDITALL)) {
+ txt_clear_markers(text, mrk->group, TMARK_TEMP);
+ } else {
+ TextMarker *nxt= mrk->next;
+ BLI_freelinkN(&text->markers, mrk);
+ }
+ return;
+ }
+ do {
+ if (mrk->start>i) mrk->start--;
+ mrk->end--;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
- txt_pop_sel(text);
+ c= text->curl->line[i];
+ while(i< text->curl->len) {
+ text->curl->line[i]= text->curl->line[i+1];
+ i++;
+ }
+ text->curl->len--;
+ text->curc--;
+
+ txt_pop_sel(text);
}
txt_make_dirty(text);
@@ -2104,10 +2337,17 @@ void txt_backspace_char (Text *text)
if(!undoing) txt_undo_add_charop(text, UNDO_BS, c);
}
+void txt_backspace_word (Text *text)
+{
+ txt_jump_left(text, 1);
+ txt_delete_sel(text);
+}
+
int txt_add_char (Text *text, char add)
{
- int len;
- char *tmp, *format;
+ int len, lineno;
+ char *tmp;
+ TextMarker *mrk;
if (!text) return 0;
if (!text->curl) return 0;
@@ -2119,8 +2359,17 @@ int txt_add_char (Text *text, char add)
txt_delete_sel(text);
+ mrk= txt_find_marker_region(text, text->curl, text->curc-1, text->curl->len, 0, 0);
+ if (mrk) {
+ lineno= mrk->lineno;
+ do {
+ if (mrk->start>text->curc) mrk->start++;
+ mrk->end++;
+ mrk= mrk->next;
+ } while (mrk && mrk->lineno==lineno);
+ }
+
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format= MEM_mallocN(text->curl->len+4, "Syntax_format");
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
tmp[text->curc]= add;
@@ -2128,7 +2377,7 @@ int txt_add_char (Text *text, char add)
len= text->curl->len - text->curc;
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
@@ -2141,10 +2390,42 @@ int txt_add_char (Text *text, char add)
return 1;
}
+int txt_replace_char (Text *text, char add)
+{
+ char del;
+
+ if (!text) return 0;
+ if (!text->curl) return 0;
+
+ /* If text is selected or we're at the end of the line just use txt_add_char */
+ if (text->curc==text->curl->len || txt_has_sel(text) || add=='\n') {
+ TextMarker *mrk;
+ int i= txt_add_char(text, add);
+ mrk= txt_find_marker(text, text->curl, text->curc, 0, 0);
+ if (mrk && mrk->end==text->curc) mrk->end--;
+ return i;
+ }
+
+ del= text->curl->line[text->curc];
+ text->curl->line[text->curc]= (unsigned char) add;
+ text->curc++;
+ txt_pop_sel(text);
+
+ txt_make_dirty(text);
+ txt_clean_text(text);
+
+ /* Should probably create a new op for this */
+ if(!undoing) {
+ txt_undo_add_charop(text, UNDO_DEL, del);
+ txt_undo_add_charop(text, UNDO_INSERT, add);
+ }
+ return 1;
+}
+
void indent(Text *text)
{
int len, num;
- char *tmp, *format;
+ char *tmp;
char add = '\t';
if (!text) return;
@@ -2155,7 +2436,6 @@ void indent(Text *text)
while (TRUE)
{
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format= MEM_mallocN(text->curl->len+3, "Syntax_format");
text->curc = 0;
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
@@ -2165,7 +2445,7 @@ void indent(Text *text)
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
@@ -2246,7 +2526,7 @@ void unindent(Text *text)
void comment(Text *text)
{
int len, num;
- char *tmp, *format;
+ char *tmp;
char add = '#';
if (!text) return;
@@ -2257,7 +2537,6 @@ void comment(Text *text)
while (TRUE)
{
tmp= MEM_mallocN(text->curl->len+2, "textline_string");
- format = MEM_mallocN(text->curl->len+3, "Syntax_format");
text->curc = 0;
if(text->curc) memcpy(tmp, text->curl->line, text->curc);
@@ -2267,7 +2546,7 @@ void comment(Text *text)
if(len>0) memcpy(tmp+text->curc+1, text->curl->line+text->curc, len);
tmp[text->curl->len+1]=0;
- make_new_line(text->curl, tmp, format);
+ make_new_line(text->curl, tmp);
text->curc++;
@@ -2398,3 +2677,148 @@ int setcurr_tab (Text *text)
return i;
}
+/*********************************/
+/* Text marker utility functions */
+/*********************************/
+
+static int color_match(TextMarker *a, TextMarker *b) {
+ return (a->color[0]==b->color[0] &&
+ a->color[1]==b->color[1] &&
+ a->color[2]==b->color[2] &&
+ a->color[3]==b->color[3]);
+}
+
+/* Creates and adds a marker to the list maintaining sorted order */
+void txt_add_marker(Text *text, TextLine *line, int start, int end, char color[4], int group, int flags) {
+ TextMarker *tmp, *marker;
+
+ marker= MEM_mallocN(sizeof(TextMarker), "text_marker");
+
+ marker->lineno= txt_get_span(text->lines.first, line);
+ marker->start= MIN2(start, end);
+ marker->end= MAX2(start, end);
+ marker->group= group;
+ marker->flags= flags;
+
+ marker->color[0]= color[0];
+ marker->color[1]= color[1];
+ marker->color[2]= color[2];
+ marker->color[3]= color[3];
+
+ for (tmp=text->markers.last; tmp; tmp=tmp->prev)
+ if (tmp->lineno < marker->lineno || (tmp->lineno==marker->lineno && tmp->start < marker->start))
+ break;
+
+ if (tmp) BLI_insertlinkafter(&text->markers, tmp, marker);
+ else BLI_addhead(&text->markers, marker);
+}
+
+/* Returns the first matching marker on the specified line between two points.
+ If the group or flags fields are non-zero the returned flag must be in the
+ specified group and have at least the specified flags set. */
+TextMarker *txt_find_marker_region(Text *text, TextLine *line, int start, int end, int group, int flags) {
+ TextMarker *marker, *next;
+ int lineno= txt_get_span(text->lines.first, line);
+
+ for (marker=text->markers.first; marker; marker=next) {
+ next= marker->next;
+
+ if (group && marker->group != group) continue;
+ else if ((marker->flags & flags) != flags) continue;
+ else if (marker->lineno < lineno) continue;
+ else if (marker->lineno > lineno) break;
+
+ if ((marker->start==marker->end && start<=marker->start && marker->start<=end) ||
+ (marker->start<end && marker->end>start))
+ return marker;
+ }
+ return NULL;
+}
+
+/* Clears all markers on the specified line between two points. If the group or
+ flags fields are non-zero the returned flag must be in the specified group
+ and have at least the specified flags set. */
+short txt_clear_marker_region(Text *text, TextLine *line, int start, int end, int group, int flags) {
+ TextMarker *marker, *next;
+ int lineno= txt_get_span(text->lines.first, line);
+ short cleared= 0;
+
+ for (marker=text->markers.first; marker; marker=next) {
+ next= marker->next;
+
+ if (group && marker->group != group) continue;
+ else if ((marker->flags & flags) != flags) continue;
+ else if (marker->lineno < lineno) continue;
+ else if (marker->lineno > lineno) break;
+
+ if ((marker->start==marker->end && start<=marker->start && marker->start<=end) ||
+ (marker->start<end && marker->end>start)) {
+ BLI_freelinkN(&text->markers, marker);
+ cleared= 1;
+ }
+ }
+ return cleared;
+}
+
+/* Clears all markers in the specified group (if given) with at least the
+ specified flags set. Useful for clearing temporary markers (group=0,
+ flags=TMARK_TEMP) */
+short txt_clear_markers(Text *text, int group, int flags) {
+ TextMarker *marker, *next;
+ short cleared= 0;
+
+ for (marker=text->markers.first; marker; marker=next) {
+ next= marker->next;
+
+ if ((!group || marker->group==group) &&
+ (marker->flags & flags) == flags) {
+ BLI_freelinkN(&text->markers, marker);
+ cleared= 1;
+ }
+ }
+ return cleared;
+}
+
+/* Finds the marker at the specified line and cursor position with at least the
+ specified flags set in the given group (if non-zero). */
+TextMarker *txt_find_marker(Text *text, TextLine *line, int curs, int group, int flags) {
+ TextMarker *marker;
+ int lineno= txt_get_span(text->lines.first, line);
+
+ for (marker=text->markers.first; marker; marker=marker->next) {
+ if (group && marker->group != group) continue;
+ else if ((marker->flags & flags) != flags) continue;
+ else if (marker->lineno < lineno) continue;
+ else if (marker->lineno > lineno) break;
+
+ if (marker->start <= curs && curs <= marker->end)
+ return marker;
+ }
+ return NULL;
+}
+
+/* Finds the previous marker in the same group. If no other is found, the same
+ marker will be returned */
+TextMarker *txt_prev_marker(Text *text, TextMarker *marker) {
+ TextMarker *tmp= marker;
+ while (tmp) {
+ if (tmp->prev) tmp= tmp->prev;
+ else tmp= text->markers.last;
+ if (tmp->group == marker->group)
+ return tmp;
+ }
+ return NULL; /* Only if marker==NULL */
+}
+
+/* Finds the next marker in the same group. If no other is found, the same
+ marker will be returned */
+TextMarker *txt_next_marker(Text *text, TextMarker *marker) {
+ TextMarker *tmp= marker;
+ while (tmp) {
+ if (tmp->next) tmp= tmp->next;
+ else tmp= text->markers.first;
+ if (tmp->group == marker->group)
+ return tmp;
+ }
+ return NULL; /* Only if marker==NULL */
+}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 2e85f6372f1..37b9c32533e 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2282,6 +2282,7 @@ static void direct_link_text(FileData *fd, Text *text)
*/
link_list(fd, &text->lines);
+ link_list(fd, &text->markers);
text->curl= newdataadr(fd, text->curl);
text->sell= newdataadr(fd, text->sell);
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index ab9d39d3822..64dc13a2941 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1857,6 +1857,7 @@ static void write_texts(WriteData *wd, ListBase *idbase)
{
Text *text;
TextLine *tmp;
+ TextMarker *mrk;
text= idbase->first;
while(text) {
@@ -1880,7 +1881,16 @@ static void write_texts(WriteData *wd, ListBase *idbase)
writedata(wd, DATA, tmp->len+1, tmp->line);
tmp= tmp->next;
}
+
+ /* write markers */
+ mrk= text->markers.first;
+ while (mrk) {
+ writestruct(wd, DATA, "TextMarker", 1, mrk);
+ mrk= mrk->next;
+ }
}
+
+
text= text->id.next;
}
diff --git a/source/blender/include/BIF_drawtext.h b/source/blender/include/BIF_drawtext.h
index a75e0f1bd86..bc4d5e3f9c8 100644
--- a/source/blender/include/BIF_drawtext.h
+++ b/source/blender/include/BIF_drawtext.h
@@ -38,14 +38,15 @@ void unlink_text(struct Text *text);
void free_textspace(struct SpaceText *st);
+int txt_file_modified(struct Text *text);
void txt_write_file(struct Text *text);
void add_text_fs(char *file);
void free_txt_data(void);
void pop_space_text(struct SpaceText *st);
-void get_format_string(struct SpaceText *st);
-void do_brackets(void);
+void txt_format_text(struct SpaceText *st);
+void txt_format_line(struct SpaceText *st, struct TextLine *line, int do_next);
#endif
diff --git a/source/blender/include/BIF_keyval.h b/source/blender/include/BIF_keyval.h
index 70d248ded91..9693684e425 100644
--- a/source/blender/include/BIF_keyval.h
+++ b/source/blender/include/BIF_keyval.h
@@ -31,6 +31,9 @@
#define BIF_KEYVAL_H
char *key_event_to_string(unsigned short event);
+int decode_key_string(char *str, unsigned short *key, unsigned short *qual);
#endif
+
+
diff --git a/source/blender/include/BIF_resources.h b/source/blender/include/BIF_resources.h
index 0d27804dd1a..5099c253c79 100644
--- a/source/blender/include/BIF_resources.h
+++ b/source/blender/include/BIF_resources.h
@@ -57,8 +57,8 @@ typedef enum {
ICON_TRIA_UP,
ICON_FONTPREVIEW,
ICON_BLANK4,
- ICON_BLANK5,
- ICON_BLANK6,
+ ICON_WORDWRAP,
+ ICON_WORDWRAP_OFF,
ICON_ORTHO,
ICON_PERSP,
@@ -108,7 +108,7 @@ typedef enum {
ICON_FF,
ICON_REW,
ICON_PYTHON,
- ICON_BLANK11,
+ ICON_PYTHON_ON,
ICON_BLANK12,
ICON_BLANK13,
ICON_BLANK14,
diff --git a/source/blender/include/BIF_space.h b/source/blender/include/BIF_space.h
index 4b2b8e14bb6..b441bfe3663 100644
--- a/source/blender/include/BIF_space.h
+++ b/source/blender/include/BIF_space.h
@@ -83,6 +83,9 @@ struct SpaceOops;
/* nodes handler codes */
#define NODES_HANDLER_GREASEPENCIL 80
+/* text handler codes */
+#define TEXT_HANDLER_FIND 90
+
/* theme codes */
#define B_ADD_THEME 3301
#define B_DEL_THEME 3302
diff --git a/source/blender/include/blendef.h b/source/blender/include/blendef.h
index a86ad8831a5..e129a502591 100644
--- a/source/blender/include/blendef.h
+++ b/source/blender/include/blendef.h
@@ -377,6 +377,13 @@
#define B_TEXTLINENUM 507
#define B_TAB_NUMBERS 508
#define B_SYNTAX 509
+#define B_WORDWRAP 510
+#define B_TEXTPLUGINS 511
+#define B_PASTEFIND 512
+#define B_PASTEREPLACE 513
+#define B_TEXTREPLACE 514
+#define B_TEXTFIND 515
+#define B_TEXTMARKALL 516
/* SCRIPT: 525 */
#define B_SCRIPTBROWSE 526
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 98ade59fb1d..84949203c72 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -280,22 +280,23 @@ typedef struct SpaceText {
struct Text *text;
int top, viewlines;
- short flags, menunr;
-
- int font_id;
+ short flags, menunr;
+ int font_id;
+
int lheight;
int left;
int showlinenrs;
-
int tabnumber;
+
int currtab_set;
int showsyntax;
- int unused_padd;
-
+ int overwrite;
float pix_per_line;
struct rcti txtscroll, txtbar;
+ int wordwrap, doplugins;
+
} SpaceText;
typedef struct Script {
diff --git a/source/blender/makesdna/DNA_text_types.h b/source/blender/makesdna/DNA_text_types.h
index d1859d22115..48ecccd517a 100644
--- a/source/blender/makesdna/DNA_text_types.h
+++ b/source/blender/makesdna/DNA_text_types.h
@@ -38,25 +38,36 @@ typedef struct TextLine {
struct TextLine *next, *prev;
char *line;
- char *format;
- int len, blen;
+ char *format; /* may be NULL if syntax is off or not yet formatted */
+ int len, blen; /* blen unused */
} TextLine;
+typedef struct TextMarker {
+ struct TextMarker *next, *prev;
+
+ int lineno, start, end, pad1; /* line number and start/end character indices */
+
+ int group, flags; /* see BKE_text.h for flag defines */
+ char color[4], pad[4]; /* draw color of the marker */
+} TextMarker;
+
typedef struct Text {
ID id;
char *name;
-
+
int flags, nlines;
ListBase lines;
TextLine *curl, *sell;
int curc, selc;
+ ListBase markers;
char *undo_buf;
int undo_pos, undo_len;
void *compiled;
+ double mtime;
} Text;
@@ -74,4 +85,12 @@ typedef struct Text {
#define TXT_READONLY 0x0100
#define TXT_FOLLOW 0x0200 /* always follow cursor (console) */
+/* format continuation flags */
+#define TXT_NOCONT 0x00 /* no continuation */
+#define TXT_SNGQUOTSTR 0x01 /* single quotes */
+#define TXT_DBLQUOTSTR 0x02 /* double quotes */
+#define TXT_TRISTR 0x04 /* triplets of quotes: """ or ''' */
+#define TXT_SNGTRISTR 0x05 /*(TXT_TRISTR | TXT_SNGQUOTSTR)*/
+#define TXT_DBLTRISTR 0x06 /*(TXT_TRISTR | TXT_DBLQUOTSTR)*/
+
#endif
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h
index 83b9a66942a..344d0e17797 100644
--- a/source/blender/python/BPY_extern.h
+++ b/source/blender/python/BPY_extern.h
@@ -48,6 +48,7 @@ struct bPythonConstraint; /* DNA_constraint_types.h */
struct bConstraintOb; /* DNA_constraint_types.h */
struct bConstraintTarget; /* DNA_constraint_types.h*/
struct Script; /* DNA_screen_types.h */
+struct BPyMenu;
#ifdef __cplusplus
extern "C" {
#endif
@@ -91,6 +92,8 @@ extern "C" {
int BPY_txt_do_python_Text( struct Text *text );
int BPY_menu_do_python( short menutype, int event );
+ int BPY_menu_do_shortcut( short menutype, unsigned short key, unsigned short modifiers );
+ int BPY_menu_invoke( struct BPyMenu *pym, short menutype );
void BPY_run_python_script( char *filename );
int BPY_run_script(struct Script *script);
void BPY_free_compiled_text( struct Text *text );
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index 81ac9bea46a..47bec81df7a 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -556,6 +556,7 @@ void BPY_Err_Handle( char *script_name )
if( exception
&& PyErr_GivenExceptionMatches( exception, PyExc_SyntaxError ) ) {
/* no traceback available when SyntaxError */
+ PyErr_NormalizeException( &exception, &err, &tb );
PyErr_Restore( exception, err, tb ); /* takes away reference! */
PyErr_Print( );
v = PyObject_GetAttrString( err, "lineno" );
@@ -921,8 +922,38 @@ int BPY_run_script(Script *script)
*****************************************************************************/
int BPY_menu_do_python( short menutype, int event )
{
- char *argstr = NULL;
BPyMenu *pym;
+ pym = BPyMenu_GetEntry( menutype, ( short ) event );
+ return BPY_menu_invoke( pym, menutype );
+}
+
+/****************************************************************************
+* Description: This function executes the script by its shortcut.
+* Notes: It is called by the ui code in src/???.c when a user presses an
+* unassigned key combination. Scripts are searched in the BPyMenuTable,
+* using the given menutype and event values to know which one to invoke.
+*****************************************************************************/
+int BPY_menu_do_shortcut( short menutype, unsigned short key, unsigned short qual )
+{
+ BPyMenu *pym;
+ pym = BPyMenu_GetEntry( menutype, 0 );
+
+ while ( pym ) {
+ if ( pym->key && pym->key == key && pym->qual == qual ) {
+ return BPY_menu_invoke( pym, menutype );
+ }
+ pym = pym->next;
+ }
+
+ return 0;
+}
+
+/****************************************************************************
+* Description: This function executes the script described by a menu item.
+*****************************************************************************/
+int BPY_menu_invoke( BPyMenu *pym, short menutype )
+{
+ char *argstr = NULL;
BPySubMenu *pysm;
char scriptname[21];
Script *script = NULL;
@@ -930,8 +961,6 @@ int BPY_menu_do_python( short menutype, int event )
PyGILState_STATE gilstate;
char filestr[FILE_MAX];
- pym = BPyMenu_GetEntry( menutype, ( short ) event );
-
if( !pym )
return 0;
@@ -1015,6 +1044,7 @@ int BPY_menu_do_python( short menutype, int event )
case PYMENU_RENDER:
case PYMENU_WIZARDS:
case PYMENU_SCRIPTTEMPLATE:
+ case PYMENU_TEXTPLUGIN:
case PYMENU_MESHFACEKEY:
break;
diff --git a/source/blender/python/BPY_menus.c b/source/blender/python/BPY_menus.c
index 82da9edbee6..69b50e5c47a 100644
--- a/source/blender/python/BPY_menus.c
+++ b/source/blender/python/BPY_menus.c
@@ -42,6 +42,7 @@
#endif
#include "BKE_global.h"
#include "BKE_utildefines.h"
+#include "BIF_keyval.h"
#include "BLI_blenlib.h"
#include "MEM_guardedalloc.h"
#include "DNA_userdef_types.h" /* for U.pythondir */
@@ -106,6 +107,8 @@ static int bpymenu_group_atoi( char *str )
return PYMENU_ARMATURE;
else if( !strcmp( str, "ScriptTemplate" ) )
return PYMENU_SCRIPTTEMPLATE;
+ else if( !strcmp( str, "TextPlugin" ) )
+ return PYMENU_TEXTPLUGIN;
else if( !strcmp( str, "MeshFaceKey" ) )
return PYMENU_MESHFACEKEY;
else if( !strcmp( str, "AddMesh" ) )
@@ -184,6 +187,9 @@ char *BPyMenu_group_itoa( short menugroup )
case PYMENU_SCRIPTTEMPLATE:
return "ScriptTemplate";
break;
+ case PYMENU_TEXTPLUGIN:
+ return "TextPlugin";
+ break;
case PYMENU_MESHFACEKEY:
return "MeshFaceKey";
break;
@@ -328,6 +334,23 @@ static void bpymenu_set_tooltip( BPyMenu * pymenu, char *tip )
return;
}
+static void bpymenu_set_shortcut( BPyMenu * pymenu, char *combi )
+{
+ unsigned short key, qual;
+
+ if( !pymenu )
+ return;
+
+ if (!decode_key_string(combi, &key, &qual)) {
+ return; /* TODO: Print some error */
+ }
+
+ pymenu->key = key;
+ pymenu->qual = qual;
+
+ return;
+}
+
/* bpymenu_AddEntry:
* try to find an existing pymenu entry with the given type and name;
* if found, update it with new info, otherwise create a new one and fill it.
@@ -688,6 +711,7 @@ void BPyMenu_PrintAllEntries( void )
* # Blender: <code>short int</code> (minimal Blender version)
* # Group: 'group name' (defines menu)
* # Submenu: 'submenu name' related_1word_arg
+ * # Shortcut: Modifier+Key (optional shortcut combination for supported groups)
* # Tooltip: 'tooltip for the menu'
* # \"\"\"
*
@@ -796,13 +820,19 @@ static int bpymenu_ParseFile(FILE *file, char *fname, int is_userdir)
if ((matches == 3) && (strstr(head, "Submenu:") != NULL)) {
bpymenu_AddSubEntry(scriptMenu, middle, tail);
} else {
- /* Tooltip: 'tooltip for the menu */
+ /* Shortcut: 'key+combination' */
matches = sscanf(line, "%[^']'%[^']'%c", head, middle, tail);
- if ((matches == 3) && ((strstr(head, "Tooltip:") != NULL) ||
- (strstr(head, "Tip:") != NULL))) {
- bpymenu_set_tooltip(scriptMenu, middle);
+ if ((matches == 3) && (strstr(head, "Shortcut:") != NULL)) {
+ bpymenu_set_shortcut(scriptMenu, middle);
+ } else {
+ /* Tooltip: 'tooltip for the menu */
+ matches = sscanf(line, "%[^']'%[^']'%c", head, middle, tail);
+ if ((matches == 3) && ((strstr(head, "Tooltip:") != NULL) ||
+ (strstr(head, "Tip:") != NULL))) {
+ bpymenu_set_tooltip(scriptMenu, middle);
+ }
+ parser_state = 0;
}
- parser_state = 0;
}
break;
diff --git a/source/blender/python/BPY_menus.h b/source/blender/python/BPY_menus.h
index 1b557f79286..576d7b8dcd6 100644
--- a/source/blender/python/BPY_menus.h
+++ b/source/blender/python/BPY_menus.h
@@ -59,6 +59,7 @@ typedef struct BPyMenu {
char *name;
char *filename;
char *tooltip;
+ unsigned short key, qual; /* Registered shortcut key */
short version; /* Blender version */
int dir; /* 0: default, 1: U.pythondir */
struct BPySubMenu *submenus;
@@ -99,6 +100,7 @@ typedef enum {
PYMENU_UVCALCULATION,
PYMENU_ARMATURE,
PYMENU_SCRIPTTEMPLATE,
+ PYMENU_TEXTPLUGIN,
PYMENU_HELP,/*Main Help menu items - prob best to leave for 'official' ones*/
PYMENU_HELPSYSTEM,/* Resources, troubleshooting, system tools */
PYMENU_HELPWEBSITES,/* Help -> Websites submenu */
diff --git a/source/blender/python/api2_2x/Text.c b/source/blender/python/api2_2x/Text.c
index 308ad094c7b..a76a6f56224 100644
--- a/source/blender/python/api2_2x/Text.c
+++ b/source/blender/python/api2_2x/Text.c
@@ -34,9 +34,13 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BIF_drawtext.h"
+#include "BIF_screen.h"
#include "BKE_text.h"
+#include "BKE_suggestions.h"
#include "BLI_blenlib.h"
+#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "MEM_guardedalloc.h"
#include "gen_utils.h"
#include "gen_library.h"
#include "../BPY_extern.h"
@@ -90,9 +94,20 @@ struct PyMethodDef M_Text_methods[] = {
static PyObject *Text_getFilename( BPy_Text * self );
static PyObject *Text_getNLines( BPy_Text * self );
static PyObject *Text_clear( BPy_Text * self );
+static PyObject *Text_reset( BPy_Text * self );
+static PyObject *Text_readline( BPy_Text * self );
static PyObject *Text_write( BPy_Text * self, PyObject * value );
+static PyObject *Text_insert( BPy_Text * self, PyObject * value );
+static PyObject *Text_delete( BPy_Text * self, PyObject * value );
static PyObject *Text_set( BPy_Text * self, PyObject * args );
-static PyObject *Text_asLines( BPy_Text * self );
+static PyObject *Text_asLines( BPy_Text * self, PyObject * args );
+static PyObject *Text_getCursorPos( BPy_Text * self );
+static PyObject *Text_setCursorPos( BPy_Text * self, PyObject * args );
+static PyObject *Text_getSelectPos( BPy_Text * self );
+static PyObject *Text_setSelectPos( BPy_Text * self, PyObject * args );
+static PyObject *Text_markSelection( BPy_Text * self, PyObject * args );
+static PyObject *Text_suggest( BPy_Text * self, PyObject * args );
+static PyObject *Text_showDocs( BPy_Text * self, PyObject * args );
/*****************************************************************************/
/* Python BPy_Text methods table: */
@@ -109,12 +124,34 @@ static PyMethodDef BPy_Text_methods[] = {
"(str) - Change Text Object name"},
{"clear", ( PyCFunction ) Text_clear, METH_NOARGS,
"() - Clear Text buffer"},
+ {"reset", ( PyCFunction ) Text_reset, METH_NOARGS,
+ "() - Moves the IO pointer back to the start of the Text buffer for reading"},
+ {"readline", ( PyCFunction ) Text_readline, METH_NOARGS,
+ "() - Reads a line of text from the buffer and returns it incrementing the internal IO pointer."},
{"write", ( PyCFunction ) Text_write, METH_O,
"(line) - Append string 'str' to Text buffer"},
+ {"insert", ( PyCFunction ) Text_insert, METH_O,
+ "(line) - Insert string 'str' to Text buffer at cursor location"},
+ {"delete", ( PyCFunction ) Text_delete, METH_O,
+ "(chars) - Deletes a number of characters to the left (chars<0) or right (chars>0)"},
{"set", ( PyCFunction ) Text_set, METH_VARARGS,
"(name, val) - Set attribute 'name' to value 'val'"},
- {"asLines", ( PyCFunction ) Text_asLines, METH_NOARGS,
- "() - Return text buffer as a list of lines"},
+ {"asLines", ( PyCFunction ) Text_asLines, METH_VARARGS,
+ "(start=0, end=nlines) - Return text buffer as a list of lines between start and end"},
+ {"getCursorPos", ( PyCFunction ) Text_getCursorPos, METH_NOARGS,
+ "() - Return cursor position as (row, col) tuple"},
+ {"setCursorPos", ( PyCFunction ) Text_setCursorPos, METH_VARARGS,
+ "(row, col) - Set the cursor position to (row, col)"},
+ {"getSelectPos", ( PyCFunction ) Text_getSelectPos, METH_NOARGS,
+ "() - Return the selection cursor position as (row, col) tuple"},
+ {"setSelectPos", ( PyCFunction ) Text_setSelectPos, METH_VARARGS,
+ "(row, col) - Set the selection cursor position to (row, col)"},
+ {"markSelection", ( PyCFunction ) Text_markSelection, METH_VARARGS,
+ "(group, (r, g, b), flags) - Places a marker over the current selection. Group: number > 0, flags: TMARK_TEMP, TMARK_EDITALL, etc."},
+ {"suggest", ( PyCFunction ) Text_suggest, METH_VARARGS,
+ "(list, prefix='') - Presents a list of suggestions. List is of strings, or tuples. Tuples must be of the form (name, type) where type is one of 'm', 'v', 'f', 'k' for module, variable, function and keyword respectively or '?' for other types"},
+ {"showDocs", ( PyCFunction ) Text_showDocs, METH_VARARGS,
+ "(docs) - Documentation string"},
{NULL, NULL, 0, NULL}
};
@@ -302,7 +339,7 @@ static PyObject *M_Text_unlink( PyObject * self, PyObject * args )
/*****************************************************************************/
PyObject *Text_Init( void )
{
- PyObject *submodule;
+ PyObject *submodule, *dict;
if( PyType_Ready( &Text_Type ) < 0 )
return NULL;
@@ -310,6 +347,19 @@ PyObject *Text_Init( void )
submodule =
Py_InitModule3( "Blender.Text", M_Text_methods, M_Text_doc );
+ dict = PyModule_GetDict( submodule );
+
+#define EXPP_ADDCONST(x) \
+ EXPP_dict_set_item_str(dict, #x, PyInt_FromLong(x))
+
+ /* So, for example:
+ * EXPP_ADDCONST(LEFTMOUSE) becomes
+ * EXPP_dict_set_item_str(dict, "LEFTMOUSE", PyInt_FromLong(LEFTMOUSE))
+ */
+
+ EXPP_ADDCONST( TMARK_TEMP );
+ EXPP_ADDCONST( TMARK_EDITALL );
+
return ( submodule );
}
@@ -327,6 +377,8 @@ PyObject *Text_CreatePyObject( Text * txt )
"couldn't create BPy_Text PyObject" );
pytxt->text = txt;
+ pytxt->iol = NULL;
+ pytxt->ioc = -1;
return ( PyObject * ) pytxt;
}
@@ -376,23 +428,47 @@ static PyObject *Text_clear( BPy_Text * self)
Py_RETURN_NONE;
}
-static PyObject *Text_set( BPy_Text * self, PyObject * args )
+static PyObject *Text_reset( BPy_Text * self )
{
- int ival;
- char *attr;
+ self->iol = NULL;
+ self->ioc = -1;
- if( !PyArg_ParseTuple( args, "si", &attr, &ival ) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "expected a string and an int as arguments" );
+ Py_RETURN_NONE;
+}
- if( strcmp( "follow_cursor", attr ) == 0 ) {
- if( ival )
- self->text->flags |= EXPP_TEXT_MODE_FOLLOW;
- else
- self->text->flags &= EXPP_TEXT_MODE_FOLLOW;
+static PyObject *Text_readline( BPy_Text * self )
+{
+ PyObject *tmpstr;
+
+ if( !self->text )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object" );
+
+ /* Reset */
+ if (!self->iol && self->ioc == -1) {
+ self->iol = self->text->lines.first;
+ self->ioc = 0;
}
- Py_RETURN_NONE;
+ if (!self->iol) {
+ PyErr_SetString( PyExc_StopIteration, "End of buffer reached" );
+ return PyString_FromString( "" );
+ }
+
+ if (self->ioc > self->iol->len) {
+ self->iol = NULL;
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Line length exceeded, text may have changed while reading" );
+ }
+
+ tmpstr = PyString_FromString( self->iol->line + self->ioc );
+ if (self->iol->next)
+ PyString_ConcatAndDel( &tmpstr, PyString_FromString("\n") );
+
+ self->iol = self->iol->next;
+ self->ioc = 0;
+
+ return tmpstr;
}
static PyObject *Text_write( BPy_Text * self, PyObject * value )
@@ -413,35 +489,324 @@ static PyObject *Text_write( BPy_Text * self, PyObject * value )
txt_move_eof( self->text, 0 );
txt_set_undostate( oldstate );
+ Text_reset( self );
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_insert( BPy_Text * self, PyObject * value )
+{
+ char *str = PyString_AsString(value);
+ int oldstate;
+
+ if( !self->text )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object" );
+
+ if( !str )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected string argument" );
+
+ oldstate = txt_get_undostate( );
+ txt_insert_buf( self->text, str );
+ txt_set_undostate( oldstate );
+
+ Text_reset( self );
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_delete( BPy_Text * self, PyObject * value )
+{
+ int num = PyInt_AsLong(value);
+ int oldstate;
+
+ if( !self->text )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object" );
+
+ if( !num )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected non-zero int argument" );
+
+ oldstate = txt_get_undostate( );
+ while (num<0) {
+ txt_backspace_char(self->text);
+ num++;
+ }
+ while (num>0) {
+ txt_delete_char(self->text);
+ num--;
+ }
+ txt_set_undostate( oldstate );
+
+ Text_reset( self );
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_set( BPy_Text * self, PyObject * args )
+{
+ int ival;
+ char *attr;
+
+ if( !PyArg_ParseTuple( args, "si", &attr, &ival ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected a string and an int as arguments" );
+
+ if( strcmp( "follow_cursor", attr ) == 0 ) {
+ if( ival )
+ self->text->flags |= EXPP_TEXT_MODE_FOLLOW;
+ else
+ self->text->flags &= EXPP_TEXT_MODE_FOLLOW;
+ }
+
Py_RETURN_NONE;
}
-static PyObject *Text_asLines( BPy_Text * self )
+static PyObject *Text_asLines( BPy_Text * self, PyObject * args )
{
TextLine *line;
PyObject *list, *tmpstr;
+ int start=0, end=-1, i;
if( !self->text )
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
"This object isn't linked to a Blender Text Object" );
+ if( !PyArg_ParseTuple( args, "|ii", &start, &end ) )
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected upto two optional ints as arguments" );
+
+ if (start<0)
+ start=0;
+
line = self->text->lines.first;
+ for (i = 0; i < start && line->next; i++)
+ line= line->next;
+
list = PyList_New( 0 );
if( !list )
return EXPP_ReturnPyObjError( PyExc_MemoryError,
"couldn't create PyList" );
- while( line ) {
+ while( line && (i < end || end == -1) ) {
tmpstr = PyString_FromString( line->line );
PyList_Append( list, tmpstr );
Py_DECREF(tmpstr);
line = line->next;
+ i++;
}
return list;
}
+static PyObject *Text_getCursorPos( BPy_Text * self )
+{
+ Text *text;
+ TextLine *linep;
+ int row, col;
+
+ text = self->text;
+ if( !text )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object" );
+
+ for (row=0,linep=text->lines.first; linep!=text->curl; linep=linep->next)
+ row++;
+ col= text->curc;
+
+ return Py_BuildValue( "ii", row, col );
+}
+
+static PyObject *Text_setCursorPos( BPy_Text * self, PyObject * args )
+{
+ int row, col;
+ SpaceText *st;
+
+ if (!self->text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object");
+
+ if (!PyArg_ParseTuple(args, "ii", &row, &col))
+ return EXPP_ReturnPyObjError(PyExc_TypeError,
+ "expected two ints as arguments.");
+ if (row<0) row=0;
+ if (col<0) col=0;
+
+ txt_move_to(self->text, row, col, 0);
+
+ if (curarea->spacetype == SPACE_TEXT && (st=curarea->spacedata.first))
+ pop_space_text(st);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_getSelectPos( BPy_Text * self )
+{
+ Text *text;
+ TextLine *linep;
+ int row, col;
+
+ text = self->text;
+ if( !text )
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object" );
+
+ for (row=0,linep=text->lines.first; linep!=text->sell; linep=linep->next)
+ row++;
+ col= text->selc;
+
+ return Py_BuildValue( "ii", row, col );
+}
+
+static PyObject *Text_setSelectPos( BPy_Text * self, PyObject * args )
+{
+ int row, col;
+ SpaceText *st;
+
+ if (!self->text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object");
+
+ if (!PyArg_ParseTuple(args, "ii", &row, &col))
+ return EXPP_ReturnPyObjError(PyExc_TypeError,
+ "expected two ints as arguments.");
+ if (row<0) row=0;
+ if (col<0) col=0;
+
+ txt_move_to(self->text, row, col, 1);
+
+ if (curarea->spacetype == SPACE_TEXT && (st=curarea->spacedata.first))
+ pop_space_text(st);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_markSelection( BPy_Text * self, PyObject * args )
+{
+ int group = 0, flags = 0,r, g, b;
+ Text *text;
+ char color[4];
+
+ text = self->text;
+ if (!text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object");
+
+ if (!PyArg_ParseTuple(args, "i(iii)i", &group, &r, &g, &b, &flags))
+ return EXPP_ReturnPyObjError(PyExc_TypeError,
+ "expected int, 3-tuple of ints and int as arguments.");
+
+ if (text->curl != text->sell)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Cannot mark multi-line selection.");
+
+ color[0] = (char) (r&0xFF);
+ color[1] = (char) (g&0xFF);
+ color[2] = (char) (b&0xFF);
+ color[3] = 255;
+
+ group &= 0xFFFF;
+
+ txt_add_marker(text, text->curl, text->curc, text->selc, color, group, flags);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_suggest( BPy_Text * self, PyObject * args )
+{
+ PyObject *item = NULL, *tup1 = NULL, *tup2 = NULL;
+ PyObject *list = NULL, *resl = NULL;
+ int list_len, i;
+ char *prefix = NULL, *name, type;
+ SpaceText *st;
+
+ if (!self->text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object");
+
+ /* Parse args for a list of strings/tuples */
+ if (!PyArg_ParseTuple(args, "O!|s", &PyList_Type, &list, &prefix))
+ return EXPP_ReturnPyObjError(PyExc_TypeError,
+ "expected list of strings or tuples followed by an optional string");
+
+ if (curarea->spacetype != SPACE_TEXT)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Active space type is not text");
+
+ st = curarea->spacedata.first;
+ if (!st || !st->text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Active text area has no Text object");
+
+ texttool_suggest_clear();
+ texttool_text_set_active(st->text);
+ list_len = PyList_Size(list);
+
+ for (i = 0; i < list_len; i++) {
+ item = PyList_GetItem(list, i);
+
+ if (PyString_Check(item)) {
+ name = PyString_AsString(item);
+ type = '?';
+ } else if (PyTuple_Check(item) && PyTuple_GET_SIZE(item) == 2) {
+ tup1 = PyTuple_GetItem(item, 0);
+ tup2 = PyTuple_GetItem(item, 1);
+ if (PyString_Check(tup1) && PyString_Check(tup2)) {
+ name = PyString_AsString(tup1);
+ type = PyString_AsString(tup2)[0];
+ } else
+ return EXPP_ReturnPyObjError(PyExc_AttributeError,
+ "list must contain tuples of two strings only: (name, type)" );
+ } else
+ return EXPP_ReturnPyObjError(PyExc_AttributeError,
+ "list must contain only individual strings or tuples of size 2" );
+
+ if (!strlen(name) || (type!='m' && type!='v' && type!='f' && type!='k' && type!='?'))
+ return EXPP_ReturnPyObjError(PyExc_AttributeError,
+ "names must be non-empty and types in ['m', 'v', 'f', 'k', '?']" );
+
+ texttool_suggest_add(name, type);
+ }
+ if (!prefix)
+ prefix = "";
+ texttool_suggest_prefix(prefix);
+ scrarea_queue_redraw(curarea);
+
+ Py_RETURN_NONE;
+}
+
+static PyObject *Text_showDocs( BPy_Text * self, PyObject * args )
+{
+ char *docs;
+ SpaceText *st;
+
+ if (!self->text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "This object isn't linked to a Blender Text Object");
+
+ if (!PyArg_ParseTuple(args, "s", &docs))
+ return EXPP_ReturnPyObjError( PyExc_TypeError,
+ "expected a string as argument" );
+
+ if (curarea->spacetype != SPACE_TEXT)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Active space type is not text");
+
+ st = curarea->spacedata.first;
+ if (!st || !st->text)
+ return EXPP_ReturnPyObjError(PyExc_RuntimeError,
+ "Active text area has no Text object");
+
+ texttool_text_set_active(st->text);
+ texttool_docs_show(docs);
+ scrarea_queue_redraw(curarea);
+
+ Py_RETURN_NONE;
+}
+
/*****************************************************************************/
/* Function: Text_compare */
/* Description: This is a callback function for the BPy_Text type. It */
diff --git a/source/blender/python/api2_2x/Text.h b/source/blender/python/api2_2x/Text.h
index 0c5e2607f03..73943ddb9cd 100644
--- a/source/blender/python/api2_2x/Text.h
+++ b/source/blender/python/api2_2x/Text.h
@@ -41,6 +41,8 @@ extern PyTypeObject Text_Type;
typedef struct {
PyObject_HEAD
Text * text; /* libdata must be second */
+ TextLine * iol; /* current line being read or NULL if reset */
+ int ioc; /* character offset in line being read */
} BPy_Text;
PyObject *Text_Init( void );
diff --git a/source/blender/python/api2_2x/doc/Draw.py b/source/blender/python/api2_2x/doc/Draw.py
index 18234754315..97e22797902 100644
--- a/source/blender/python/api2_2x/doc/Draw.py
+++ b/source/blender/python/api2_2x/doc/Draw.py
@@ -357,12 +357,14 @@ def PupTreeMenu( menu ):
"""
Create a popup menu tree.
- Each item in the list is a menu item - (str, event), separator - None or submenu - (str, [...]).
+ Each item in the list is: a menu item - (str, event); a separator - None;
+ or submenu - (str, [...]).
- Submenus list uses the same syntax as the menu list.
+ Submenus list uses the same syntax as the menu list. To add a title to the
+ main menu, end the first entry str with '%t' - the event is ignored.
Example::
- result = Draw.PupTreeMenu( [ ("Menu Item 1", 10), ("Menu Item 2", 12), ("SubMenu", [("Menu Item 3", 100), ("MenuItem4", 101) ] ) ] )
+ result = Draw.PupTreeMenu( [ ("Title%t", 0), ("Menu Item 1", 10), ("Menu Item 2", 12), ("SubMenu", [("Menu Item 3", 100), ("MenuItem4", 101) ] ) ] )
@type menu: string
@param menu: A menu list
diff --git a/source/blender/python/api2_2x/doc/Text.py b/source/blender/python/api2_2x/doc/Text.py
index 98ecb664b71..022205573aa 100644
--- a/source/blender/python/api2_2x/doc/Text.py
+++ b/source/blender/python/api2_2x/doc/Text.py
@@ -100,6 +100,19 @@ class Text:
Clear this Text object: its buffer becomes empty.
"""
+ def reset():
+ """
+ Reset the read IO pointer to the start of the buffer.
+ """
+
+ def readline():
+ """
+ Reads a line of text from the buffer from the current IO pointer
+ position to the end of the line. If the text has changed since the last
+ read, reset() *must* be called.
+ @rtype: string
+ """
+
def set(attribute, value):
"""
Set this Text's attributes.
@@ -118,12 +131,94 @@ class Text:
@param data: The string to append to the text buffer.
"""
- def asLines():
+ def insert(data):
"""
- Retrieve the contents of this Text buffer as a list of strings.
+ Inserts a string into this Text buffer at the cursor.
+ @type data: string
+ @param data: The string to insert into the text buffer.
+ """
+
+ def asLines(start=0, end=-1):
+ """
+ Retrieve the contents of this Text buffer as a list of strings between
+ the start and end lines specified. If end < 0 all lines from start will
+ be included.
+ @type start int
+ @param start: Optional index of first line of the span to return
+ @type end int
+ @param end: Optional index of the line to which the span is taken or
+ -1 to include all lines from start
@rtype: list of strings
- @return: A list of strings, one for each line in the buffer
+ @return: A list of strings, one for each line in the buffer between
+ start and end.
+ """
+
+ def getCursorPos():
+ """
+ Retrieve the position of the cursor in this Text buffer.
+ @rtype: (int, int)
+ @return: A pair (row, col) indexing the line and character of the
+ cursor.
+ """
+
+ def setCursorPos(row, col):
+ """
+ Set the position of the cursor in this Text buffer. Any selection will
+ be cleared. Use setSelectPos to extend a selection from the point
+ specified here.
+ @type row: int
+ @param row: The index of the line in which to position the cursor.
+ @type col: int
+ @param col: The index of the character within the line to position the
+ cursor.
+ """
+
+ def getSelectPos():
+ """
+ Retrieve the position of the selection cursor in this Text buffer.
+ @rtype: (int, int)
+ @return: A pair (row, col) indexing the line and character of the
+ selection cursor.
+ """
+
+ def setSelectPos(row, col):
+ """
+ Set the position of the selection cursor in this Text buffer. This
+ method should be called after setCursorPos to extend the selection to
+ the specified point.
+ @type row: int
+ @param row: The index of the line in which to position the cursor.
+ @type col: int
+ @param col: The index of the character within the line to position the
+ cursor.
+ """
+
+ def suggest(list, prefix=''):
+ """
+ Suggest a list of names. If list is a list of tuples (name, type) the
+ list will be formatted to syntax-highlight each entry type. Types must
+ be strings in the list ['m', 'f', 'v', 'k', '?']. It is recommended that
+ the list be sorted, case-insensitively by name.
+
+ @type list: list of tuples or strings
+ @param list: List of pair-tuples of the form (name, type) where name is
+ the suggested name and type is one of 'm' (module or class), 'f'
+ (function or method), 'v' (variable), 'k' (keyword), '?' (other).
+ Lists of plain strings are also accepted where the type is always
+ '?'.
+ @type prefix: string
+ @param prefix: The optional prefix used to limit what is suggested from
+ the list. This is usually whatever precedes the cursor so that
+ backspace will update it.
+ """
+
+ def showDocs(docs):
+ """
+ Displays a word-wrapped message box containing the specified
+ documentation when this Text object is visible.
+ @type docs: string
+ @param docs: The documentation string to display.
"""
import id_generics
-Text.__doc__ += id_generics.attributes \ No newline at end of file
+Text.__doc__ += id_generics.attributes
diff --git a/source/blender/src/blenderbuttons.c b/source/blender/src/blenderbuttons.c
index e15ef3fd898..6b11dfb4baf 100644
--- a/source/blender/src/blenderbuttons.c
+++ b/source/blender/src/blenderbuttons.c
@@ -1,2181 +1,2134 @@
/* DataToC output of file <blenderbuttons> */
-int datatoc_blenderbuttons_size= 69599;
+int datatoc_blenderbuttons_size= 68088;
char datatoc_blenderbuttons[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 1, 0, 8, 6, 0, 0, 0,197,144,
-206,103, 0, 0, 0, 1,115, 82, 71, 66, 0,174,206, 28,233, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,167,
-147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7,216,
- 5, 19, 11, 8, 1, 11,126, 22,156, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,125,121, 92, 84,229,254,255,251, 57,179,179,239,
-168,184,128,138,251,130,224, 26,106, 80,168,201,215, 52, 21, 48,179,237,214,189, 78,150,173,150,102,117,111,245,203, 43,106,218,
-170,233,216,162, 89,106, 9,106,120,115, 5, 29,212,144,220, 21, 75, 19, 5, 17, 65,144,109, 96,134,217,207,156,231,247,199,204,
-208,128,192, 44,160, 81,205,251,197,188,152,115,230,204,123,158,115,158,229,253,249,124,158,141, 68, 69, 69, 81,184,225,134, 27,
-110,184,225,134, 27,127, 43, 48,238, 71,224,134, 27,110,184,225,134, 27,127, 31,156, 57,155, 5, 0, 32,238, 8,128, 27,110,184,
-225,134, 27,110,184, 35, 0,110,184,225,134, 27,110,184,225,134,219, 0,112,195, 13, 55,220,112,195, 13, 55,220, 6,128, 27,110,
-184,225,134, 27,110,184,241,151, 0,223,246, 96,222,188,121,196, 85,162,181,107,215,222, 54,150,192,205,231,230,107, 5,116,237,
-218,181,127, 88,250,178,179,179,105, 92, 92, 28,113,231,199,159,151,239,220,185,115, 46, 23,190,168,168, 40,184,243,195,205,247,
- 87,230,115,218, 0,248, 59, 67, 42,149, 54,122,128, 50,153,140,116,228,116,174, 91,183, 14,132, 16,226,206, 57,215,242,120,246,
-236,217, 72, 79, 79,111, 56, 78, 74, 74,250, 75, 60,203, 61,123,207,180,218, 16, 36, 78,142,254, 75,151, 25,137,255, 78,136,117,
-189, 17, 1, 3,234,177, 23,249,218,183, 58,108, 89,236,168,109,140, 27,127,211, 8,192,221, 40,172,123,246,236,137,203,200,200,
-144, 91,143,167, 77,155, 22,159,152,152,152,221, 17, 30, 6,165,230,182,179,163,234,170, 84, 42,165, 69, 69, 69, 0,128,240,240,
-112, 0,248, 83, 52, 34, 77,141, 43,139,129,213,162,103,238, 40,239,214,173, 91, 29, 54,212,164, 82, 41,221,182,109, 91,195,241,
-206,157, 59, 49, 97,194,132,134,227,244,244,116,250, 71, 25, 1, 49, 49, 49, 20, 0, 78,159, 62, 77,218,227,186,140, 31,100,173,
- 24, 0,178, 54,231, 95, 88, 68, 55, 0,192, 45,157, 14,172, 86,111, 62, 89,171, 4, 0, 36, 39, 39, 35, 33, 33,161,197,244,173,
- 79, 88, 79, 35,203, 34,157,250,253,248, 95,227, 29,200, 23, 9,252,159,189, 0, 93,198, 78, 40, 20,211,161, 0, 16, 45,121, 31,
-111, 73, 78,163,155, 24,168,212, 21,224, 45,109,138, 83,191,155,149,149, 21,151,150,150, 38,183, 61,151,156,156, 28,159,144,144,
-144,221,145,234, 86,123,181, 1,127,134,251,189, 19,120,231,141, 23,136,151,192,151,232,197, 66,170,175,213, 50,245, 90, 37,247,
-193, 39,171,255, 22,179,227,236, 26, 0,123,246,236,137,179,254,111,171, 80, 91, 27,146,119,183, 45,129, 87, 55, 95,212,223,168,
-195,219, 41,111,201, 51, 50, 50,224,182,134,237, 67, 38,147,145,240,240,112, 90, 84, 84,132,162,162, 34,236,219,183,175,195,122,
- 18,214,188,150,201,100, 68, 38,147, 9,164, 82,169,113,197,138, 21, 39, 1, 96,225,194,133, 35, 90,251,238,244,233,211, 27,222,
-179,172, 9, 6,163, 30, 6,189, 1, 6,131,249,197,178, 44, 22, 46, 92,232, 84, 90,108,197,191, 57, 76,152, 48,225, 15, 53, 2,
- 28, 49,126, 98, 98, 98,236,114, 36, 78,142, 38,174,136,188,195,240,243, 65, 94,225,119,144,160, 43, 76,200, 65,197, 23,103,112,
-190,160, 26, 51,150,109,112,232,235,145,101,145, 14, 10,186, 25,242,129,114,187, 13,177, 36,241, 45, 4, 76,123, 26,165, 47, 69,
- 3, 90, 69,195,249, 51,218,215,112, 6, 0,180,192,120, 73, 50, 14,250,159,134, 31,128, 24, 69,140,195,229,183, 41,210,210,210,
-228,105,105,105, 29,162,189,178,166,177, 61,218,128, 63,195,253,182, 55, 54,173, 89, 75, 30, 13,139,224,191,144,244, 56, 47,164,
-127, 24,195, 39, 33, 68, 83, 87,199,137, 17,106, 98,186,116, 53,233,110, 94, 51, 57,248,236,110, 58,209,134,119,113,128,111,129,
- 19,124,171,238,168, 1,144,145,145, 33,223,246,239, 55,144,242,222, 82,121, 98, 98, 34,105, 75, 1,179, 10, 63, 0, 84,105,170,
-129, 64, 96,241,193,119,160, 44, 84, 64,250,175,142, 37,100, 45, 85,136, 63, 58,141,182, 70,192, 3, 15, 60,128,162,162, 34,132,
-135,135,119,184,103, 39,151,155, 29,137,248,248,120, 42,147,201, 24,153, 76, 22, 38,149, 74, 75, 87,172, 88,113,218, 81, 30,150,
-101, 97, 48, 24, 27,132,223, 86,252, 79,157, 58,133,225,195,135, 59,149,174,148,148,223, 61,192,217,179,103, 35, 51, 51,179,145,
- 1,208, 30,101,197,149,124, 56,125,250, 52,201,206,206,166, 19, 39, 78,188,237,179, 3, 7, 14, 96,235,214,173, 13,199,173,141,
- 91,184,205,120,111,199,238,128,176,136,110, 40, 85,212, 97,199, 51, 51, 17, 72, 98, 81,240,249,171,232, 57,189, 39, 50,157, 16,
-127, 43,230,206,157, 75, 1, 96,253,250,245,109, 46,179, 97,219,114,160,185, 94,143, 82,105, 68,171,215, 93, 16,103,225,221,193,
-183,144,122,225,205, 54,229,103,123,136,110,123,114,180, 71, 36,224, 78,223,111,123, 33, 39, 39,199, 3,192, 61, 0,188,108, 78,
-215, 2,200,139,141,141,173,113,148, 71,203,105, 25, 67,149, 94, 48,121,234,116,177, 2, 70,177, 64,192,231, 43,117, 98, 70, 40,
-212,114, 60, 31, 79,214, 32, 49, 26,249,229, 55,245, 98,158, 72,167, 51,233, 77, 82,169,148, 52, 55,102,196, 22,181,181,181,255,
-181,190,207,207,207,175,242,244,244,100,212,106, 53,103,123,205,200,145, 35, 63,116, 52,141,148, 82,187,194, 78, 8, 89,208,214,
-103,202,183,231,253,247,233,211, 7,145, 94, 62,104, 75, 20,192, 86,252,171, 52,213, 72,189,255,157,134,207,254,145,241, 44, 16,
- 2, 76, 95,145,226, 84, 33,107, 73,160,219, 75,164,111,220,184, 1, 0,232,214,173, 91,163,247,214,223,181, 87, 32,238,100,136,
-207,214, 8, 48, 26, 89,172, 91,183,238,142,121, 1,206,114, 54, 17,127,219,239,223,148,201,100,254, 82,169, 84,225,176,248, 27,
-141, 48, 24,244,208, 27, 12, 48, 54, 17,127,202, 57, 23,161, 75, 73, 73,193,169, 83,167, 26,142, 87,173, 90,133,164,164,164,134,
-227,244,244,244, 54, 27, 59, 54, 6, 79,155,203,159,173,240,207,158, 61, 27,195,134, 13,115,137,167,189,186, 3, 74, 10,139,161,
-222,249, 31,120, 61,245, 49,194, 34,186, 33, 52, 80,130,194,157,133,102,241,247,243, 49,119, 1, 8,120, 14,113,181,135,240, 3,
- 64,159,139, 87,113,227,237, 37,208,166,109,108, 61, 66, 32,145, 64,167,211,161,160,160, 0, 21,186,203,232,131,176, 22,175,205,
-202,202,138,107,173,236,203,100, 50, 98,173, 39, 89, 89, 89,113,206,132,199,109,163, 98,214,250,106,123,206, 89, 71,160, 37,225,
-118,166, 45,104,238,126, 51, 51, 51, 41, 33, 4, 9, 9, 9,164, 45,247,107,197,211, 79, 63, 77,191,252,242,203, 54,229,121, 78,
- 78,142, 47,128,233, 7, 15, 30,252, 15,199,113,122, 27, 17,228,243,120, 60, 79, 0,255,140,141,141,221, 99,143, 39,191, 48,159,
- 47, 17,138,197, 2,129,200,147,225, 19, 31,202, 19,121,112, 60, 30,159, 35, 12, 56,194, 55, 81, 30, 79,207,227,136, 78,205, 51,
-105, 60,133, 2,194,235,213, 77, 39,158, 26,194,161,216,126, 26, 21, 10,133, 82,163,209,176, 0,160, 86,171,185, 55,222,120,163,
- 65,240,151, 46, 93,250,114, 91,203,251,132, 9, 19,158,177,190,207,204,204, 92,215, 30,117,136,177,231,253, 47,153,149, 4, 93,
-101, 37, 94, 29,216, 15,182,125,247, 14,123, 33,150, 46, 4, 91,241,159, 54,109, 90,188, 76, 38, 35,211,166, 77,139,223, 48,237,
- 51,115,100,177,111, 80,163,235, 29,193,194, 53,249, 88,184, 38, 31,207,173,188,132, 39,222,251, 5, 51, 22,159,107,243, 3, 41,
- 41, 41,113,200, 48,184, 91,226, 95, 84, 84,212,162, 48,135,135,135,195,104, 48, 96,212,200,145,109,254, 29,107,152,124,219,182,
-109,144,203,229, 13,175,214, 12,173,150,196, 48, 62, 62,190,169,248, 55, 24,202,142, 52, 76, 44,107, 50,123,254,122,115,232,191,
-169,248,155, 76, 38,168,181,106,167,238,209, 26, 49,104, 26, 53, 72, 79, 79, 71,122,122,122, 35, 99,192,169,251,205,110,220, 30,
-202,179,179,157,122,102,173,137,255,236,217,179,177, 98,197,138, 6,241, 23,240, 5, 78,241, 36, 78,142, 38,150, 46,152,102, 95,
-206,112,105, 81,140,250,233,163, 64,211, 94, 69, 73, 97, 49,232,244,254,191,123, 43,105,175,130,223, 57, 24,240,243,187,171, 30,
-161,186,170, 0,218,180,141,160,148,226,194,133, 11, 24, 63,126, 60, 36, 18, 73, 35,225,247,247,247,135, 86,171,133, 86,171, 69,
-105,105, 41, 30,209,190,128, 47,252, 95,106,145,211,218, 7,222,218,243,177,126,214,180,191,220, 81,225,110, 47,103,197,250,221,
-166,226,111,207, 65,106,237,126, 51, 51, 51,105,122,122, 58,210,210,210,144,149,149, 69,219,122,191, 79, 63,253, 52,229,243,249,
-120,250,233,167, 93,174, 19, 57, 57, 57, 98, 0,255,202,202,202,122,227,189,247,222, 59, 78, 8, 9,183,190, 0,116, 13, 12, 12,
-244, 56,116,232,208,218,156,156,156,241,173,241,152, 40,199,227, 17,129,200,192, 82, 31,189,222, 24, 98,226,184,174, 38,142,139,
- 48, 17,210, 29, 60, 94, 32, 33,196, 15,132,231,195, 81, 4, 80, 3,231,167,212, 26, 61, 67,124, 88, 30, 51, 82,229, 80, 30,105,
- 52, 26,182,169,215,223,209,193, 56,226,253,107,202,203, 48,121, 88,180,211, 2,109, 53, 34,222,221,182, 4, 0, 26,196,223, 26,
- 69, 72, 76, 76,204,182, 26, 1, 37,202,155,136, 94, 56,218, 41, 35, 67,173, 53, 65,173, 53,161,172, 90,143,210, 74, 29,110,220,
-210,185, 36,124,214,202, 98, 79,252,255, 40,180,100, 4, 0,128,206,160,135, 78,167,115,153,219, 42,218,214, 62,242,224,224, 96,
- 91,111, 22,142, 54, 38, 77, 61,225,150, 66,137,142, 52,122, 6,163,222,236,249,235, 13, 48, 24, 27,139,191,209,104,132, 90,173,
-134, 74,169,250, 67,243,196,108, 48,165,217, 6,228,172,127,216,182, 45,205,101, 35,192, 86,252,173,194,207, 48, 12,196, 98, 49,
- 60,189, 60,218,148,230, 61,123,207,208,150, 94,246,190,187,111,241, 59, 8, 68, 44,216,132,231, 1, 0, 94,185, 87,113,190,160,
-218,108,176, 37, 60, 15,227,133,119,129,170,106,167,210, 51,119,238, 92,106,237, 14,112, 5,158,168, 2, 0,108,220,184, 17, 25,
- 25, 25,120,255,253,247,113,226,196, 9,232,245,122, 84, 84, 84, 88,189,178,134,235,195,194,194,160, 5,192,195,181, 63,164,188,
-180, 84,238,155,122,243,174, 26, 20,205,117, 11, 56,203,103, 27, 9, 75, 75, 75,107,211, 61, 91,197, 31, 0, 92, 53, 2,114,114,
-114, 58, 89,196,127,238,215, 95,127,125,241,173,183,222,122,104,203,150, 45,232,211,167, 15, 0,160, 71,143, 30,168,171,171, 19,
-189,251,238,187,167, 15, 29, 58,244,109, 78, 78, 78,120,179, 68, 4, 0, 71, 9, 56, 86,108, 50,177, 1, 38,214,212,213,104, 50,
-246,230, 49,164,139,144,207, 8,196, 2,158,150,239, 33,172,245,244,230, 41,121, 98,202,138,121, 60, 79, 62,107,240,185,118,230,
-172,232,177,224,143,236,166, 59, 63, 63,191, 74,173, 86,115,205,133,249,135, 14, 29,122,217, 96, 48,180, 91, 89, 26, 58,116,104,
-187,113,241, 91, 19,238,207,231, 62,253,187,216,150,220,192,171, 3,251, 97,101, 70,134,211, 99, 1,172,222,191, 85,244, 27,121,
- 41,137,137,217, 25, 25, 25, 0,128,192,193,157,156, 74,124,189,214, 4,149,134,133, 82,205,162,174,158, 69,173,138,117,250, 1,
- 52, 55,242,223,214,203,183,125, 95, 88, 88,136,218,218,218,187,214,104,172, 91,183, 14,225,225,225,176, 14,250,179,237,235,151,
- 74,165,116,221,186,117,208,105,181, 46, 27, 0, 82,169,148,110,216,176, 1, 37,165,165, 16,240,120, 8,237,212,169,145,248,223,
-127,255,253, 72, 73, 73,113,168,113,146,201,100, 36, 62, 62,190,145, 17,208, 52,146,225,232, 88, 5,131,222, 0,131, 94, 15,163,
-209, 0,150, 53, 53,136,191, 94,175,135, 70,163, 65,125,125, 61, 84, 42,231, 13, 0,219, 46, 0, 43, 92,245,252,183,165,109, 3,
- 40, 80,101, 17, 26,106, 46, 68, 32,148,154,141,128,180, 52,164, 36, 39, 59,221, 29,208, 84,252, 5, 2, 1, 68, 34, 17,196, 98,
- 49,196, 98,177, 75,247,221,168, 94,183,208, 37, 96,175, 75,107,198,186,237,160, 83, 35,112,107, 76, 52, 2, 17, 11,201,204, 79,
-193,150, 85, 2,126, 62,224, 87,111,197,143, 31,157, 6,120, 60,167,210,210,214,174, 0, 53,207,220,166,164,166,166,162,178,178,
- 18,107,215,174,197,208,161, 67,241,222,123,239, 33, 58, 58, 26, 90,173,182,169,135,102, 53,169,239,170,240, 59, 42,208,174,118,
- 7,180,100, 72,184,194,147,156,156,220, 32,252,174,212,141,230,196,191, 65,108,248,124,176, 44,235,108,119,128,119, 94, 94,222,
- 39,243,230,205, 59, 50,120,240, 96, 31, 0,120,231,157,119,144,159,159, 15, 0, 24, 61,122, 52,118,236,216,129,177, 99,199,122,
- 62,242,200, 35, 5,217,217,217, 89, 60, 30,239,145,219, 27,122, 32, 32, 48,128, 43, 44, 44, 96,179,229, 7,247,246,238, 29,153,
- 29,209, 35,252, 34,207, 91, 82,193, 35, 66, 53, 35, 18,104, 24,177,135,202,192,231, 25, 64,141, 60, 78,108,244, 86,149, 86,123,
-157, 56,116,110,100,144,127,232, 14,187,198,168, 77,159,255,206,157, 59,159,152, 62,125,250,215,214,176,191, 82,169,100,132, 66,
- 97,155,203, 82,123,133,253,237, 70, 0,172, 94,254,240, 94,145,208, 85, 86, 66, 93, 98, 22,193,241, 22,239,208,217, 40, 64,225,
- 47, 87,111,227,110,238,184,250, 66,185, 83,137,111,171,248,219, 10, 63,165, 20,221,186,117,107,244,153,209,104,108,120,213,214,
-214, 66,173, 86,163,166,166,230,174, 53, 30,214,121,254,251,246,237,107, 20, 9,176,138,255,144, 33, 67,160,211,105, 27, 26, 58,
-106,181,102, 28,108,152,214,124,182, 6, 70,163, 17, 93,195,194, 96, 52,153,154, 21,127,103, 26, 18,139, 17,112,155, 87, 98,157,
-186,216, 90, 36,227, 54, 3,192, 96,108, 16,255,147, 39, 78, 66,163,213, 66,165, 82,161,174,174, 14,181,181,181,141, 60, 59,103,
- 97,237, 6,112,181,223, 31, 0,170,171,170, 81, 93, 93,133,170,234, 26, 84, 85, 87,163,186,186, 26,213, 85,102,143,180, 95,255,
-254,168,177,188,119,214,251, 7,128, 97,195,134,253,238,245,123,122,194,203,203, 27,222, 94,222, 80,169, 84,241,109, 41, 79,173,
-117, 9,216,251,110,193,251,115, 33,152,249, 41, 2, 17, 11,126,238,167, 48,110,127, 30,240,243,193,174,103,147,112,125,215, 53,
- 60,184, 98, 19,192,191,203,203,138,232,174, 67, 18, 38,129, 90,173,134, 78,167,131, 70,163, 65,110,110, 46,150, 45, 91,214,236,
-229, 30, 30,214, 8,202, 85,167,197,219, 85,175,218,246,249, 54,125,222, 45, 29,183,197,200,104,174, 91,192, 25,158,132,132, 4,
-146,156,156,140,164,164, 36, 76,152, 48,193,229,200,196,151, 95,126, 73, 88,182,113,155,204,178, 44,156, 29, 11, 16, 27, 27,123,
- 37, 57, 57,121,232,150, 45, 91,198, 31, 61,122,212, 59, 33, 33,225,132, 85,252, 45,142, 42, 68, 34, 17,189,126,253,186, 96,239,
-222,189,125,253,253,253, 79,198,198,198, 22, 52,199, 85, 87, 91,199, 69, 70,244, 81,141, 30, 61, 58,233,226,197, 95,239, 83,170,
- 85,157, 40,107,100,193,192,200,234, 25,189, 94,175,215, 42, 81,174,228,244, 58, 85,105,113, 57,251,227,238, 61,203,131, 2,131,
- 43, 12, 6,141, 93,247,189, 57,239, 95,161, 80,240, 1,192,199,199,167,195,118, 11, 48, 45,121,255,219,254,253,134,217,106, 46,
- 47,107,244,153,179, 99, 1,166, 77,155, 22,191,230, 95, 31, 3, 48, 15,248,203,200,200,144,219, 78, 45,204,200,200,144, 79,248,
-230, 33, 0,192,153, 21, 63, 99,218,180,105,241,119,235,230,109, 43, 73, 73, 73, 73,131,183,111, 21,125,155,204,133, 74,165,130,
- 78,167,179,105, 68,238, 94, 26,159,121,198, 60,246,195,200,178,184,120,241, 34,206,158, 57,131,161, 67,134, 66,167,211, 65,171,
-213, 65,167,213,226,219,111,190,129,245, 58, 71, 42,250,170, 85,171, 48,160,255, 0, 24,141, 70, 92,185,114, 5,172,209,128,210,
-146,210,118,125,166,214, 99,203,154, 5, 8, 15, 15,119,168, 97, 50, 24,245, 96, 77,230,176,255,241,227, 63, 67,173, 85,163, 94,
-165, 68, 93, 93, 29, 20,181,181, 80, 40,106,218,100,136, 89, 35, 1,109,241,112,142, 28, 57, 2,149, 74, 5,149, 74,105,249,175,
- 66, 80, 96, 32,250,245,239,143,223, 46, 93,194,225, 35, 71,156,230,180,122,255,124,190, 0, 30, 30, 30,240,242,242,130,183,151,
- 23,188,188, 60, 80,163,168,137, 7,144,125,167, 67,253, 45,225,124, 65, 53,140, 23,222, 69, 53,114, 64, 18, 87,130,196,254, 7,
- 5,239,207,197,212, 21, 95, 67, 44, 96, 0, 1,223,252,114, 1,174,118, 5,148, 78,249, 12, 1, 91,167, 64,163,209, 32, 32, 32,
- 0, 10,133, 2, 10,133, 2,199,142, 29, 67, 89, 89, 89, 67,152,184,225,250,210, 82, 60,235, 47, 65,144, 71,101,107, 30,112,188,
-173,168,218, 14,146,179,190,183,126,102,189,214, 21,239,220,209,238, 1, 71,197,223, 85,207,191,185,251, 77, 72, 72, 32, 19, 38,
- 76, 32,109,185,223,166, 70,128, 43,226,111, 69, 80, 80, 80,222, 67, 15, 61,244, 72,106,106,106,223,243,231,207,199, 74, 36, 18,
-222,212,169, 83,137, 72, 36, 2,199,113, 36, 49, 49, 49,239,197, 23, 95, 28, 50,104,208,160, 93,255,252,231, 63,159, 48,153, 76,
-213,173,196,188,185, 95, 47, 93, 57, 57,104,240,144, 71, 79,158, 56, 49, 99,215,238,255, 45, 61,117,226, 68,167,139,249,191,137,
-175,148, 22,208,111, 63,254, 94,146,186,234,253, 1, 89,187,119,175,234,221,171,247,143, 94,161,158, 71, 98, 99, 99, 77,112, 48,
-229, 9, 9, 9, 56,121,242,100,212,186,117,235,222,213,233,116,130,247,222,123,239,131, 93,187,118,205, 46, 45, 45,189,187,194,
-209,214, 46,128,192,107, 69,168,177,132,254,109, 49, 62, 56, 24, 43,241,155,227, 94,135, 37,196,255,219,233,139,240,235, 27,132,
- 9,223, 60,132,140,199,126,144, 91,195,254, 86,241,183,122,255,206,204, 50,216,145,218, 62, 35,241, 9, 33,184,116,233, 18,172,
-133,181,105,152, 85, 32, 16, 64, 32, 16,160,178,178, 18,137,137,137,119, 61,147,172,163,254,215,173, 91,135,145, 35, 71, 66,167,
-215, 67,171,211, 66,103, 25,220,164,213,153,187, 1, 86,175, 94,109,183, 49,145, 74,165,116,197,138, 21, 48,153, 76, 56,125,250,
- 12, 4,124,115,216, 54, 50, 50, 18,215,138,138, 80, 90, 90,138,173, 91,191,195,236,217, 15,227,224,193,131,212, 54, 18,208, 90,
- 3, 36,147,201,132, 0, 88,169, 84,202, 53,231, 1, 57, 51, 85,209,234,249,231,230,230, 66, 93,175,105, 48,192,148, 42, 37,148,
-202, 58, 40,149,245, 46,135,194,173,222,191,101, 37, 64,151, 12,129,217,179,103, 55, 58,142, 8, 15, 71,191,254,230, 65,113,191,
- 93,186,132,107,150,136, 71,211,235, 28,193,152,123,198, 64, 36, 20, 65, 34,145, 64, 44, 22, 67, 36, 18,161,188,188,220, 97,241,
-183, 23,234,119,117,141,128, 25,203, 54, 96, 7,128, 7, 82,255, 15, 52,237, 85,144,148, 85, 56, 95, 80, 13, 18,224,143,171, 37,
- 74,179,247,239,100, 23, 64,211,174, 0,167,167, 7,106,181, 0,175,160, 73,120,223, 44,244, 70,163, 17, 95,124,241, 5,198,143,
-255,125, 92,216,193, 39,195,128, 10, 13,250,238, 81, 32, 42,184, 71, 75, 13,120,118,147,190,111, 57,208,208,252,203,155, 94,235,
-138, 96,183,214,111,239,170,231,239,170, 33,113,167,239,215, 98, 4,180,121, 22, 64,120,120,248,214,177, 99,199, 6,159,203,203,
- 75,209,106,181, 67,228,242, 67, 18,145, 88,196,103, 8,131, 67,135, 14,121, 15, 24, 48, 96, 83,114,114,242,127, 42, 43, 43,237,
-122,235,179,103,205,228,126,220,251,227,225,161, 67,135, 45, 52,176,250, 7,174,230, 95, 89,202, 21, 21,176, 0,168, 24,140,113,
-112,239,190,105, 33, 33,193,123,120,124,225,183,255,125,107,185,225,219,141, 27, 44,125,124, 45, 99,228,200,145, 31, 38, 36, 36,
- 0, 0, 42, 43, 43,145,149,149,229,243,213, 87, 95, 45, 5,128,147, 39, 79,142, 28, 56,112,224,190, 63,133, 1, 96,245,206,239,
-255,118, 75,235, 94,134, 19, 83, 2,173,214,111,244,194,209, 8, 28,220,169, 65,244,109, 67,255,103, 86,252,236,148,229,218, 94,
-115, 82,173,105,235,223,191, 63, 46, 92,184,208, 72, 88,106,107,107, 11, 0,244,106,238, 59,174,174,189,220,214,116, 54, 61,255,
-237, 55,223, 66,167,211, 65,111,208,195, 96, 48, 96,197,138, 21,176, 39,254, 86,112,156, 9, 98,137, 23,180, 90, 29, 46, 93,188,
- 8,190, 64, 0,163,193, 0, 15, 79, 15,108,221,186, 21, 60, 30,207, 58,119,190,213,123, 93,177, 98,197, 62,169, 84,106,144,201,
-100, 33,214,116, 54, 89, 7,192,169,208,230,194,133, 11,145,147,147,131,250,250,122,212,171,213, 80, 41,149, 22,241, 87, 66,165,
- 84,161, 94, 85, 15,181, 77,131,239,200,179, 27, 62,124, 56, 61,117,234, 84,131,247,223,220, 52, 64, 71, 23, 1,138,139,139,187,
- 45, 47,172,162,127,246,236,217, 6,111,222,209,123,142,137,137,161,214, 69,126,188, 60,188, 32,150,136,161, 82,169,226,109,250,
-176,157,106,120,239,212, 98, 64, 86, 35, 96,122,234, 87,160,219,129,160, 39,101,200,126, 41, 9, 99,151,111, 6, 4, 2,120,138,
-219,214,207,217,212, 16, 0, 0,121,142,189, 96,227, 45, 12,222,231,129,242,255,105,160, 88,242,251, 89,163,209,136,113,227,198,
- 1, 0,194,252, 37,248, 73,214, 13,239, 47,187,129,207,206,104, 91,101,179,245,248, 1,243, 64, 56,107,195,222,116, 80,156,179,
-211,226,108,199,239,180,213,243,111,174, 77,112,133,235, 78,222,175,173, 17,208, 30,229,111,224,192,129,159,168,148,170,189, 35,
- 98,134,143, 84, 41,149, 1,172,137,213,135,134,134, 86,134,133,133,149, 43,149,202,243,149,149,149, 14, 55, 10, 83, 38, 79,225,
- 0,108, 61,122,228, 68,110,236,216,177, 63, 72, 36, 18, 95, 2,202, 17, 66,192,113,180, 78,171, 86,200, 47,231, 21,171,190,221,
-184,193,161,118,222,250,204, 0,243, 64,234,166, 3,245,150, 45, 91,246,159, 63,133, 1,144,152,152,152,221,150, 5,127, 28, 41,
-172, 86, 67,192, 42,252,237, 41,232,109, 73,219,224,193,131,113,242,228, 73, 84, 86, 54,132, 8,123, 1, 64,117,181, 57,162,244,
-216, 99,143,253,161,153,213,244, 25, 81, 74,233,163,143, 61,138,213,171,215, 88,250,204, 89,248,250,250, 18, 71,191,111,133, 68,
- 34,182,242,153,189, 41,181,198,246, 59, 0,236,110, 54,209,127,197,138, 21, 87,164, 82,105,133, 76, 38,227,217, 14, 8,180, 76,
- 11,116,184,161,179,206,125,143,141,141,109,247,103, 55,124,248,240,166,123, 1, 52,124,238,236, 10,128, 50,153,140,100,103,103,
-211,173, 91,183, 54, 90,168,199,202,237, 74,121,142,139,139, 35, 70,214, 8,163,202,216,174,247,222, 90,232,223,217,189, 1,102,
- 44,219, 0,216, 44,252,115,239, 27,191,143, 75, 82,183, 83,122, 27, 69, 0, 6,182,110,124,150,198,150,162, 20, 64,244,251,254,
- 88,114,186, 15,130, 1, 84, 22,168,209,187,119,111, 0,192, 39, 75,252, 49,105, 68, 48, 34, 38,229, 59,244,219,206, 76,117, 75,
- 75, 75,147,183,182,236,177,189,246,166, 61,218,188,182,114,221,141,251,109, 79,140, 30, 51,250, 10,128, 43,183, 69,172, 3, 3,
- 93,226, 27, 55,126,100, 17,154, 29, 21, 26,134,222,125, 6, 57, 99, 72,181,235,125,182,199, 34, 63, 46, 25, 0,119, 90,192,246,
-236,217, 19,151,177,162,227,237, 5, 96,173, 72, 35, 70,140,192,158, 61,123,116, 22,209,231, 0,120,220,137,200, 67, 59, 21, 18,
- 34,147,201, 26, 60,251,214,196,255, 78, 98,225,194,133,182,241,212,134, 6,219, 58,141,208, 25,111,231, 78, 62, 95, 91,238,236,
-236,236, 54, 47,251, 27, 23, 23, 71,226,226,226,218,156, 46,123,107,251,183, 7,218,210, 37,176,104,209, 34, 20, 22, 22,182, 91,
- 90, 28, 89,222,215, 89,156,121, 77,129, 51, 48, 15, 12, 29,159, 44,193,254,227,125, 16,234,225,133, 95, 79,221, 66, 95, 7,197,
-223, 94,249,235,168,203,225,182,199, 90, 2,127,166,251,237,128,207,191, 75, 59,243,173,186, 91,105,191,235,187, 1,222,169, 8,
- 67,123, 26, 1,137,137,137,226, 63, 89, 1, 36,127,240,111, 91, 87,168, 97,173, 6,128,187,241,232, 56,104,107,151, 64,207,158,
- 61, 73,207,158, 61,219,165,189,113,102, 31, 0, 87,113, 36, 77,139, 35,105,249,238, 58,235,134, 27,246,156,200,168,168, 40,234,
-126, 12,110,184,225,134, 27,110,184,241,247, 2,227,126, 4,110,184,225,134, 27,110,184,225, 54, 0,220,112,195, 13, 55,220,112,
-195, 13,183, 1,224,134, 27,110,184,225,134, 27,110,184, 13, 0, 55,220,112,195, 13, 55,220,112,227, 47,129, 70,179, 0,230,205,
-155,231,242,200,212,230,230,137,187,249, 58, 30,223,220,185,115, 93,226, 27, 54,108,216,109,124,103,207,158,117, 57,125,205,241,
-253, 89,242,195,217,103,184,126,253,250,187,146,190,246,206,143,187,153,191,246,166,137, 58,251,252,218,155,207,221,190,184,249,
-154,225,235, 10, 64, 1, 64, 8,160,182,163,165,207,105, 3,192,141,191, 62,214,175, 95,239,126, 8,127, 51,248,249,249, 49, 48,
- 79,207,228,215,213,213,113,148, 82, 83, 71, 74,159,117,223,249,172,172, 44,218, 30, 11,205,180,215, 74,123,110,220, 57,236,218,
-181, 43,110,234,212,169,217,127,242,219,176,174,125, 37,113,214, 0,232,144, 17, 0, 55,254,122,160,148, 54,218,234,216,213, 8,
-192,218,181,107,237, 94, 51,113,226,196,184,204,204,204, 70, 43,139, 77,152, 48, 33,254,192,129, 3, 46, 85,244,244,244,244,102,
-249,146,146,146, 58, 4, 95, 71, 6, 33,132,244, 8, 13, 69, 81,121, 57,173,173,173,181,238,207,224,212, 18,131,182,198,226,169,
- 29,171, 75, 8,193,115,178,189,121, 25,210,201, 67,190,161, 20,202,245,251,242,158, 91, 52, 99, 36, 1, 67,249, 10,149,142, 14,
-159,249,188,211, 91,114,102,101,101,197, 89,151,156,181,252,119,105,185,217,166,226,111, 45,247,109,221,104,167,185,239,186,202,
-217, 30,124,109,221, 50,216,149,104,201,157, 16,255, 61,123,246,200,167, 78,157,250,103, 55,206,172,251,176,223,209,174,244,119,
-222,120,129,241, 18,248, 50,122,177,144,211,215,106,249,245, 90, 37,251,193, 39,171,219,101,135,193,219, 12,128,246, 20, 8, 87,
-185,156,229, 35,132, 48, 22, 43, 76, 75, 41,229, 58, 90,250,218, 75, 96,219,195, 0,176, 54,234,182,105, 37,132,232, 41,165,162,
-182, 68, 10, 8, 33, 20, 0, 86,173, 90,213,104,199,176, 5, 11, 22,200, 9, 33,160,148, 18,103, 27, 37, 0,224,190,247,111,116,
-158,153,149, 41,207,204,204,116,186, 1,108, 79,190, 63, 67, 20,133, 82, 74,227,123, 69,208,248, 94, 17, 0,128,114, 3, 59,167,
-147,144,191,217,250,249,111,202,122, 81,153, 3, 27,167, 0,192,201,237,159,230,115, 28,194,238, 25, 19,228,243,193, 75, 99, 15,
- 12, 25,226,119,253,185,229, 35,255, 11, 0,183,234, 52,255, 39,224,147,255, 1,228,226,220,185,115, 7, 58,251,108,154, 46, 69,
-219,150,229,102,109,197,191, 61,140,128,150,190,227,170, 88,182, 7, 95,114,114, 50,210,210,210, 28,186, 39,103, 34, 42,173,241,
-181, 87,100,198, 86,252, 57,142,195,250,245,235,177,121,243,102, 58,103,206, 28,226,100, 30, 11,101, 50, 89,187,172,151,189,120,
-241,226,185,169,169,169,174, 86,104, 31,139,231,175,190, 19,117,120,211,154,181,204,163, 97, 17,226, 23,146, 30, 23,134,244, 15,
-227,243, 73, 8,163,169,171, 99,197, 8, 53, 48, 93,186, 26,116, 55,175, 25,218,250, 27,124, 71, 26, 55,169, 84, 26, 12, 96, 56,
-128, 83, 50,153,172,178,131,121, 58, 62, 0, 18, 0, 76, 7,176,147, 16,146, 69, 41, 85,182, 3,239,119,148,210,135, 93, 21,216,
-142, 2,134, 97, 90, 53, 82, 8, 33, 35, 1, 8, 9, 33, 33,148,210,138,150,174,107,205, 64, 33,132,208, 23, 95,124, 17,221,187,
-119,191,109,187,208, 85,171, 86,197, 23, 23, 23,203, 9, 33,212, 81, 35, 64, 42,149,210,141,207,123,226,241,177,183,111, 46,195,
-125,239,143, 77, 63, 25,240,164,147, 94, 83,123,242,213,213,213,197,189,254,250,235,242,148,148, 20,196,199,155, 87,182, 59,119,
-238, 92,220,218,181,107,229,221,187,119, 7,199,113,208,106,181,136,139,139,195,196,137, 19,237,114, 10,235,212,113,125, 95,223,
- 38,207,140,238, 26,223,233, 95, 19,178, 1,128, 45,103,227, 46,191,205,202, 77,221,125,160,228, 60,161,208,250,160,194,247,100,
-252,211,139, 66,236,122,199,189,186,117,234,212, 93, 40, 41,123,254,185,199,244,161, 18,161, 80, 89,163, 37, 43,190,218,178,249,
-141,103, 30,133,191, 68, 66,117, 70, 19,253,247,234,175,244, 0, 72,231,206, 65,252,242,242,106, 38, 42,170,249,157, 53, 71,132,
- 28,136,188, 25,230,225, 23,123, 79,240,170, 97, 49, 1,130,141, 27,175,134, 7, 7, 73,170, 62,124,233,248,170,162,235,195, 76,
-147, 39,117,206,205,191,162, 42,126,242,241, 94,137,214,114,227, 76, 29,176,221, 32,167, 45, 94,104, 83,241,111, 90, 63, 93,225,
-239,136, 17, 0,139, 16, 83,171, 17,144,156,156,108,123,190,145,104,219,110,236,227,170, 81, 97,229, 73, 75, 75,107,115,148,192,
- 86,252, 23, 44, 88,128, 83,167, 78,209,159,126,250, 9,115,230,204,113,150,202, 32,149, 74, 5, 50,153,140,109,135, 38,178,124,
-241,226,197,211, 83, 83, 83,119,186,240,221, 48, 0, 53, 0,194, 1,156,203,201,201,233, 1,224, 51, 0, 1,182,252, 0, 62,137,
-141,141,117,120,207, 5, 45,167,229, 27,170,244, 30,147,167, 78,247, 85,192,232, 43, 16,240, 69, 74,157,152, 47, 20,106, 89,158,
-143,167,222, 32, 49,106,249,229, 55, 85, 98,158,168, 86,103,210, 27,164, 82,105,139,245,183,205, 17, 0, 66, 72, 55, 0,159, 3,
- 40, 5,240,162, 84, 42,253, 23,165,244,198,221,242, 96,237,136,116, 32,128, 77, 0,110, 2, 56, 6,224, 1, 0, 79, 19, 66, 30,
-167,148, 86,183,145,126, 22, 33,100,142,189,254,210,187, 25, 98,191, 67, 24, 13,224, 50,128, 8, 0, 21,196,162,212,142, 26, 52,
- 19, 39, 78,140, 3,208, 72,252, 23, 44, 88, 32,183,141, 6, 88, 62,147, 79,156, 56, 49,206, 94,119, 64,122,122,122, 28,128, 70,
- 98,205,204, 82,192,214,123,127,124,172, 16, 79,126,170, 70,122,122,122,156,189,240,125,123,243, 1,192,241,227,199,229, 98,177,
- 24,185,185,185,141,246, 59, 96, 24, 6,111,190,249, 38,177, 54,118,187,119,239,150, 79,156, 56,209,110, 6,116, 58,126, 81, 78,
-197, 2, 12,169, 20,202, 43,126,223,138, 21,132,161, 24,242,166,129, 0, 6, 92, 56,114, 61,238,230,246, 41,114,224, 68,171,141,
-112,124,175, 8,218, 93, 40,193, 43,207,206,209,135,122, 9,133, 85, 23,114,136, 39,195,199, 11,227, 34,209,197, 79,130,235,185,
- 71,137,214, 64,201,130,185,143, 25,226,123, 69,208,126, 30,222, 40,163, 85,100,216,176, 97,205,242, 5, 5, 9,239, 21, 10, 25,
-241,177, 99,101, 47,178, 38,221, 71,161, 93,123, 26,253,130, 4, 68,169,188,234,209, 51,194, 35, 40, 32, 64, 84,201, 81,165,254,
-199, 19, 21,234,121,227,254,152, 2,220, 52,236,111, 91, 55,157, 53, 2,172,215,216,142, 35,176,119,157,189,237,183,219,147,207,
-214, 8,144,201, 20, 0, 20,144, 74,253,209,156,104, 59,138,150,140, 10, 75, 68,166, 77, 81, 15, 91,241,223,189,123,183,156, 97,
- 24, 48, 12,131,113,227,198,225,232,209,163,141,242,203, 81,152, 76,166, 60, 30,143,103,148, 74,165,124,153, 76,214,214,241, 44,
-146,234,234,234,239, 3, 3, 3,103,166,166,166,110,119,242,187, 90,152,247,139, 81,229,228,228, 12, 2,176,253,224,193,131,125,
- 56,142,179,213, 40,240,120,188,135, 0,100,199,198,198,198,219, 35,204, 47,204, 23, 75,132, 98, 95,129, 64, 20,204,240, 73,103,
-202, 19,249,113, 60,158,136, 35, 12, 56,194, 55, 82, 30,175,158,199, 17,149,154,103,170,241, 20, 10, 8,175, 87,183, 58,241,212,
- 16, 22,197,119, 46, 2,240, 17,128,131, 22,203,230, 89, 0, 31,173, 95,191,126,166,139,130,237, 15,224, 69, 0, 35, 0, 36, 2,
-216, 3,224, 36,128,143, 41,165, 10, 23, 40,143, 88,210,181,150, 82,202, 17, 66, 60, 1, 60, 97, 57, 63,176, 13,134,133,175,229,
-173, 39, 0,165, 51, 30,118, 11, 17, 20, 33,128, 55, 0, 44,149,201,100, 6,116, 44,140, 0,144, 3,160, 19, 33,100,171, 37, 79,
-190,105,106,208,180,100,160,100,102,102,202,109,195,254, 11, 22, 44,104, 56,182,125,191,106,213,170,120,139, 97,208,106,141,207,
-204,204,148,219,134,233,153, 89, 10, 92,217, 99,222,133,145, 73,252,166, 65,180,185,239,253,193,204,202,148,219,219,208,167, 57,
- 62,107, 99,198,204,146, 82,103,249, 40,165,113,199,142, 29,195,156, 57,115,240,197, 23, 95,224,204,153, 51,113,209,209,209,217,
- 77,175, 17,139,197,242,206,157, 59, 59, 18,171,143,235,124,236, 23, 92,158, 19, 7,175, 47, 46,128,148,105,226,104,103, 15, 11,
- 31,177, 92,130, 56,129,174,187, 60,160,115,235, 91,217,198,247,138,160,115,255, 57,203, 16,234, 41, 20, 24,175,158, 18,250, 7,
-123, 19,121,153, 18, 51,163,186,161, 95,152, 31,132,181,151, 33, 87,105,209, 77, 32,130, 31,225, 9, 22, 63, 61,135,214, 11, 69,
-249,241,189, 34, 40,124,252,154,229, 84,212,170, 2, 70,142,244, 90,165,100, 71, 45,242,246,175, 20,233, 24, 79, 78,226,101,208,
- 7, 4, 5, 50, 30,126, 98,190,162,166, 76,164,172, 99, 33,168,211, 19,219, 50,211,154, 65,107,233,247,151,219, 19,206,228,228,
-228,120,123,227, 1,154,243,252,155, 26, 2,206, 24, 1,214,207, 90, 19, 99,219,243,246,132,177, 41, 31,221,230,127,123,123,147,
-162,128,163,124,173,133,251,219, 34,218, 77,141, 10, 0, 8, 8,200,106, 23,241,159, 55,111,158,185,251,141,227,240,234,171,175,
-226,163,143, 62,106, 16,255,181,107,215, 58,205,205, 48, 12, 12, 6,195, 89,161, 80,200,182, 67, 36,160, 6, 0,170,171,171,183,
- 7, 6, 6,198,167,166,166,202,157,248, 46, 31, 0,158,124,242, 73, 81, 78, 78, 78,102, 86, 86, 86,167, 37, 75,150,176,111,189,
-245, 86, 35, 93, 13, 12, 12,196,161, 67,135,226, 0,164,197,198,198, 38,183, 70,200, 35, 2, 31, 3, 75,187,112,156, 49, 66,200,
-227,245,160,132,132, 16, 62,159,240,121,188, 58, 66,136, 22,132,167,228, 40,252,169,129,243, 80,154,140,232,229,195,106,153,145,
- 42,174,221, 12,128, 38,125,195, 97, 0,186, 81, 74,173,130,255, 62, 33,228,132, 84, 42, 13,163,148,150, 58,227,193, 18, 66, 30,
-179,136,245, 7, 0, 22, 1,120,212, 18, 66, 73, 6, 80, 76, 8,121,150, 82,250,141, 19, 34,253, 31, 0, 87, 41,165,107, 8, 33,
- 34, 75,133,103, 41,165,159, 17, 66, 38, 17, 66,254, 67, 41,253,127, 46, 22,138,241, 0, 42, 1,220, 11,224,127,206,124,177,185,
- 8,128, 84, 42,125, 10,192,219, 0,202,231,206,157,187,174,131, 69, 0, 6, 90,210, 54, 1,192,100, 0,215,237, 25, 52, 45,193,
- 86,240,109, 69,191,233,184, 0,135, 43,186,141,248, 3,192,149, 61,143, 53, 50, 2, 92,225,179,109,204,100, 50, 25,177, 53, 2,
- 28,193,225,195,135, 97, 48, 24, 16, 19, 19, 19,255,211, 79, 63,201,139,138,138,228,209,209,230, 45,117, 57,142, 67,106,106, 42,
-173,175,175,135, 64, 32,192,140, 25, 51,236,222,183, 46,247, 36, 24, 3,139,218,152,240,120,193, 79, 55,229, 87, 55, 28, 70,175,
- 55, 38,155, 69,139,163,200, 75, 21,210,154,122,111,104, 5, 94,152, 48,239,138,253,231,200,240,234, 43, 47,228,250,234,244, 38,
-198, 87, 34,162, 73, 81,221,225, 35, 17,144,146,234,122,120, 50,124,164, 12,235, 78,143,255, 90,129,159,255,183, 15, 61, 60,189,
-232,121,149,242, 58,128,190, 45,209,229,158,237,242,220,232, 97, 85,135,189,248, 17,172,144,189,213,107,252,152, 20, 47,157,193,
-115, 10,207,235, 36,163,172,173,241, 40,186,116, 50,194,104,184, 84, 89, 88,160,246,177,212, 25,187, 66,229,168,119,106, 29, 31,
-208, 82,255,115, 75,222,180, 61,175, 82, 42,149, 82, 87, 67,166, 29, 9, 77, 61,127,179,120, 3,105,105,237, 55, 72,176, 61, 60,
-127, 74, 41, 88,246,119,141, 30, 59,118, 44,142, 30, 61,234,146,248, 91, 96, 20, 8, 4, 38,142,227,142, 49, 12, 99,108,163, 17,
- 16, 98,125, 83, 93, 93, 45, 15, 12, 12,148,166,166,166, 58,186,115, 86, 81, 74, 74,138,207,225,195,135, 83,179,178,178, 58,125,
-253,245,215,220, 19, 79, 60,193,223,178,101, 11,222,121,231, 29,228,231,231,163, 71,143, 30, 40, 47, 47,199,187,239,190,107,122,
-251,237,183,147, 0, 60, 27, 27, 27,251, 89,139,140, 28,235,107, 2,211,131,112, 24,104, 4, 23,233, 33, 16, 9,133,124,166, 76,
- 44,224, 41,121, 18, 97,149, 72,196,171,215,155, 56, 15,190,145, 31, 96, 96,245,166,107,103,206, 42, 30, 11,254, 72,115, 28,174,
-233,135,189, 8,192, 36, 0, 57, 77, 6,142,229, 0,152,180,126,253,250,175,156, 16,235, 71, 0,188, 4, 32,188, 73,104, 94, 1,
-224, 23, 66,200, 39, 0, 14, 16, 66, 76,148,210, 45, 14,240,121, 0, 19, 92,166, 19, 0, 0, 32, 0, 73, 68, 65, 84,152,107,245,
-242, 41,165,250, 38,151, 60, 14,224, 87, 66,200, 74, 74,169,198,149,240, 63,128,175, 44,255,157, 50, 0,154, 10,166, 84, 42,253,
- 7,128,231, 44,207,114, 21, 33, 68, 47,147,201, 54,116,132, 6,132, 16,210,219, 18,194,250, 17, 64, 6, 0,107, 62,193,209, 8,
-192,223, 13,165,165,165,242, 81,163, 70,129, 16,146, 61,106,212, 40,252,240,195, 15,120,232,161,135,226, 58,117,234, 36,103, 24,
- 6,139, 23, 47, 38,150,198, 36,110,235,214,173,114,189, 94,143, 17, 35, 70,180,216,208,141,185,118, 83, 94, 62,170, 63, 64, 72,
-246,175,161,166,248,129,231, 2,228, 58, 14,241,230, 46, 0, 96,200, 98, 3, 1,170,161,174,174,139, 59,180,181,183, 92,237,125,
- 34,254,225, 39,124,154,245,138, 75, 12,236,202,245,235,183,188, 26, 28, 36, 41,170, 83, 27,124,195,253, 61, 5,201, 67,123,122,
- 12, 11, 23, 17,157,198, 4,141,150,195, 85,162, 53,101, 20,149,106, 10,202,235, 77,157,132,226,178,114,131,110,226, 13,189,241,
- 3,111,224,149,230, 56,125,252,195,186,106,235,175,116, 25,144,112, 31,115,241,120,217,248,210,223,126,184,209,123,248,220, 16,
- 94,255,168,146,179, 71,191,175, 35, 60,159, 17, 28,199,213,220,186,165,181,107, 69, 53, 21,108,123,199, 86,111, 54, 45, 45,173,
- 69,193,182, 13,175, 55,141, 4, 56,114,253,159, 21, 9, 9, 9,196,214,235,183,133,109, 8,191, 45,104, 15,158,250,250,122, 57,
- 0,240,249,124,188,252,242,203, 56,117,234, 20,126,250,233,167,182,210,234, 1,152,244,122, 61, 91, 90, 90,154, 25, 22, 22,102,
-180, 23, 89,108, 5, 42,219,131,234,234,106, 89, 96, 96,224,131,169,169,169,142,180,251,190, 58,157,174,207,194,133, 11,167,206,
-155, 55,143, 14, 30, 60,152, 0,104, 16,127, 0, 24, 61,122, 52,118,236,216,129,177, 99,199, 50,143, 60,242, 8,205,206,206, 94,
-195,227,241,180, 30, 30, 30,208,104,110,151, 38,142,163,186,108,249,193,244,222,189, 35,139, 35,122,132, 95,225,121, 75,202,120,
- 68, 88,199,136, 4,117,140,216,163,194,192,231,105, 64,141, 2, 78,108, 12, 81,149, 86, 7,157, 56,116,238,205, 32,255,208,183,
- 92,125,144,173, 70, 0,164, 82,233, 68, 0,155,155,120,181,135, 0,204,153, 59,119,238, 87,142,120,176,132, 16,158, 37,252, 61,
-173,165,126,121, 74,105, 53, 33, 36, 5, 64, 6, 33,228,123, 7,230, 41, 63, 2,224, 0,165,180,174, 5,190, 58, 66,200, 1,203,
-117, 95, 56, 41,138,247, 1, 8, 4, 48, 31,192, 86, 66,200,125,148,210, 67,174, 68, 0, 8, 33, 73, 0,222, 7,208,131, 82,170,
- 38,132,140, 6,112, 93, 42,149,170, 40,165,233,142, 70, 0,164,102, 83,223,145, 70,139,200,172,110,128, 99, 24, 3,224, 4,165,
-148, 18,179,219,116, 29,128,154, 16,210,205, 58,206,195,153, 8, 64, 83,143,191, 45,222,127, 67, 88, 62,241,155,134, 40, 64,100,
- 27,188,255,223,195,252,191,135,111,165, 82,231,188,127,163,209, 72, 79,157, 58, 5,111,111,111,228,229,229, 81,147,201, 4,165,
- 82,137, 75,151, 46,201, 3, 3, 3,209, 36,236,151, 61, 96,192,128,248,109,219,182,201, 71,140, 24,209,124,184,207,104,164,221,
- 78, 93,128,208, 59, 12,130,188,106, 26,106,242,134, 74,201,192,116,169, 30, 8,108,188, 35,181,103, 32,155,221,125,248,233,248,
-125,219,103,201,129,189,205, 54,118, 87,110,220,120, 45,178, 91, 55,160, 74,251, 42, 0,228,107,149,216, 45, 42,173, 28,112,239,
-248,224, 1,134, 60,252,114, 93,129,221,231,110,241, 11, 42,235,125, 0,160,220,160,243,191,161, 55, 38, 23,148,150,238,136, 10,
- 14,110,214, 0,184,119, 74, 10,227, 33,156, 56,152, 85,255, 82,220,189,127, 66,159,186, 27,219, 13, 87,127,201,172, 53,114, 94,
-183, 42,138,127,174, 80,214,120,142, 0,195,144, 26,149,206, 87, 58, 43,186,155,236,251, 51, 55, 90, 42, 51, 50,153,140,216, 70,
- 0,108,189,203,166,225,118,171, 72, 39, 39, 39, 35, 33, 33,129, 52,183,208, 73, 91, 70,227,187,186,112, 74, 71,131,181,186, 75,
-165,254,183, 69, 4, 92,141, 42,164,165,165,181,139,248,111,222,188,153, 30, 57,114, 4,116,155, 63, 72,138, 2, 31,126,248, 33,
- 40,165, 96, 24, 6,235,214,173,115, 57,178,160, 80, 40,244, 1, 1, 1,241, 71,142, 28,217, 59,126,252,248,201,205,149, 31, 39,
-224,103,169,175,115,171,171,171,215, 7, 6, 6, 62, 6,160,102,241,226,197,255, 72, 77, 77,181,231,168,213,237,218,181,171,116,
-223,190,125, 95,197,199,199, 63,213,175, 95, 63, 36, 36, 36,208,172,172,172,134,116,100,100,100, 64, 36, 18,225,250,245,235,216,
-187,119, 47,233,210,165, 11, 27, 27, 27,251,211,165, 75,151,154, 37,140,140,232, 83,166,213,234,230, 30, 57,114,100,125, 96, 80,
-160,210,215,199,167, 24, 66,161,158,213, 51,245, 44, 79, 95,171,227, 43,171, 60,245,158,226,155, 21,149,190,135,246,237, 93, 63,
- 96,224,160,247, 13, 58, 77,125,187, 24, 0, 82,169,148, 72,165, 82,107,226, 59, 89, 94,135, 45,211,236, 26,162,160, 0, 22, 16,
- 66,186,192, 60,194, 17, 0,154,181,208, 45,162,242, 2,204, 3,244,174, 53,225,105,138,107,150,235, 94, 32,132,124,212, 10, 31,
- 1, 48, 3,192,114, 59,124, 95, 3, 88, 68, 8,249,202, 78,250,108, 11, 77, 56,204,227, 29, 98, 96,238,251,127, 19,192,105, 66,
- 72, 47, 0, 69,182, 54,134, 3,124, 15, 3,120,218, 34,178, 90, 75, 90,181,150,227,117,132, 16, 33,128,239, 90,227,179,228,197,
- 99, 0,230, 57,106, 0, 72,165,210,181, 0,190,105,137,207,194,185, 18,128, 55, 0, 95, 0,187, 44,105, 19,195, 60, 79,252, 23,
- 0,163, 8, 33,243, 1,252, 4, 96,119, 75,233, 3,204,243,232, 91,232,235, 71,211,177, 1, 19, 38, 76,176,107, 12, 76,152, 48,
- 33,158,153,245,123,191,189,213, 8,176,190,183, 13,231,187,204, 55,235,246, 41,129,142,240,157, 59,119, 14,221,187,119,199,203,
- 47,191,220, 80,102, 54,109,218, 68,115,115,115, 49,101,202,148,219,174,247,240,240,144,139,197,226, 22,249,194,207,157, 67,109,
-247,206, 56,254,242, 83, 13,124,151, 95,219, 17, 23,145, 91, 39,103,166,136,111, 75, 75,113,190, 1, 34,113,235,179,159,174,150,
-148, 44, 68,215,174, 63, 3, 24, 77, 65,121,184, 86,249,178,134,101,193,234,204, 65,178,139,149,149,184,166, 51,108,226, 19,162,
- 2, 33,198,171, 37, 37,233, 0,208,210, 32,192, 46,225,253, 22, 2, 88,145,127,244,197, 34,113,232, 12, 69,105,185,184,107,121,
-201, 73, 49, 4, 1,189,139,174,155,194,170,203,111, 64, 40, 20,132, 12, 12,245,124,164, 86,101,252, 22,192, 13,123,158, 43,128,
-184,166,211,255, 90,240, 64,227, 93, 89, 19,160,185,254,255,191, 3,218, 58, 85,207,250,253,180,180, 52,218, 86,190, 45, 91, 54,
-211,236,236,108,144,116,179, 97,124,224, 45,111, 76, 92,162,194,248,241,227,225,204,180,191,230, 16, 16, 16, 16, 15, 0,247,220,
-115,143,166, 29,186, 41, 20,129,129,129,115, 0, 88,157, 83,125,106,106,234,110, 7,191,203, 2,168,200,200,200,144, 63,244,208,
- 67,195, 83, 83, 83,135,152, 76, 38, 34,145, 72, 48, 97,194, 4,236,223,191, 31, 28,199, 33, 49, 49,145,190,248,226,139, 36, 42,
- 42, 74, 63, 99,198,140, 30, 53, 53, 53,183,116, 58, 93, 75,138,204,254,122,233,202,166, 65,131,135,248,158, 60,113,226,253,179,
-124,254,160,158, 61,122,126,233, 19, 24, 92, 34, 8, 22,211,195,123, 15,249,215, 40,170,199,133, 5, 4,191,221,167, 79,159,195,
- 94,161,158,107,251,119,141, 49,228,229,229,181, 75, 4,128, 7,243,116,191, 88, 0,239, 1,120,222, 34, 60,158,182,245, 9,230,
- 65, 98, 87, 1,252,219,210, 37,112,170, 5,126, 6,230, 65,102, 7, 0,120, 56,144,158, 99, 0, 38,162,229,133, 21, 24, 0,193,
- 0,122, 0, 56,109,135,243,180,229,186, 16,180,220, 55,201,192,188,140,163,191,165,219,224, 33,139,112,231, 91,184,243, 45,199,
- 91, 0,252, 0,243,140, 3, 5, 0,131, 29,190, 89,150,200, 67, 63,139,145,100,155,206, 50, 0, 82, 0,191, 89,174,253,222, 14,
-223, 75, 48,207,110,112,164, 43,195, 3,192, 62, 0,155,237,228,199, 76, 0,255,181,252, 63,107,147, 62,129, 37, 47,211, 0,124,
- 10, 96,137,229,243,178,150,126,240,192,129, 3,217,132, 16, 20, 23, 23,203,173, 51, 1,154,122,253,197,197,197,114,235,181,246,
-110, 32, 41, 41, 41, 59, 51, 51, 19,155,126, 50, 52,140,220,111,234,165,111,250,201,208,112,237,221,228,203,205,205,197,184,113,
-141,135,186,135,135,135,199,111,219,182, 77,222,179,103,207,120,142,227,228, 75,151, 46,165,214,105,128,132, 16, 12, 31, 62,188,
- 69,163,162,111,110, 46,190, 11, 12,137,247,177, 57,215,127,254, 68,168,223,191, 1,220, 31, 2,202, 1,121, 75, 5,180,158,243,
- 66,141,214, 7, 10, 50, 12, 67,199,237,138,111,173,216, 91,102,112,108, 7,176,189,119,143,176,190, 0, 94,214,155, 56,164,231,
- 21, 97, 92,168,185,187,147, 80,170, 82,177,236,123,183,110,221,186,229, 64,153,122, 31,128,103,254,111, 53,143,214,158,222, 22,
- 84, 81, 86,131,138, 91, 42,240,249,213,158,245, 10,138, 90,165,137,134, 4, 11,253,248, 28,166,107,245,166,239,150,188, 28,235,
- 23,210,255,137, 90, 59, 66,147,109, 79, 92,218,220,135,157,176,205,252, 63, 43,197, 73, 15,248,206,206, 2, 32, 41, 10,180,133,
-175, 37,143, 61, 38, 38,166,195, 24, 34, 13,131, 29,173,226,159,199, 98,131,220, 92,199,218, 42,254,214,178,241,236,179,207, 6,
-243,249,252,138, 99,199,142,125,121,207, 61,247,180,101,138, 98,247,212,212,212, 53,150, 40,192, 44,203,140,128, 89,169,169,169,
-223, 59, 18, 84, 4, 80, 15,160, 42, 60, 60,124,232,216,177, 99, 75,207,229,229,117,214,106,181, 68, 46, 63, 4,145, 88, 4,134,
- 48, 56,116,232, 16, 25, 48, 96,128, 38, 57, 57,121, 84,101,101,165,221, 58, 55,123,214, 76,246,199,189, 63,126, 58,116,232,176,
-158, 6, 86, 63,249,106,254,149,167,185,162,130,167, 0, 64, 12,134, 14,238,221,247,100, 72, 72,112, 54,143, 47,124,237,191,111,
- 45,175,255,118,163,235, 61,202,205, 25, 0, 47, 91,172,161, 41, 0, 46, 1,240,106,230,123,123, 44, 30,123, 18,128,145, 22,241,
-108, 54,202, 9, 32, 18,192, 86, 7, 13,128,106,203,245,188, 86,248,226, 0, 92,113,144,239,138,229,250, 29,173,240,205, 5,240,
- 36,128, 11, 48,207, 80,184,214,132, 91,110,241,254,159,179,120,195, 27,129, 22, 71, 92,240, 44, 30,251,227, 0,162, 44, 81,132,
-230,210,169,180,124,190,206, 98, 4,108,108,133,239,107,139,209,229,200,253, 82,203,245,173, 61,191, 15, 44,145,141, 3, 22,163,
- 6, 77,184,247, 3, 24, 96,201,139,124,139, 33,213,173,213, 31, 53,247, 32, 80, 0,242,230, 22, 2,178, 94,227, 76, 5,127, 82,
- 42,165, 79,126,170,110,102,225, 30,133,211, 2,209, 94,124, 47,188,240,194,109,215,140, 31, 63, 62,123,252,248,241, 4, 0,238,
-187,239, 62,167, 26,161, 61, 47,188, 64,124,154,182, 40, 61,188,178, 37,171,251, 19, 0, 24, 40, 19, 16,115, 80,198, 58, 50,251,
-186,131,197,192,146, 47, 38, 90, 4, 62,192,171, 71,131,248, 91, 92,228, 91, 98,177,216,209,217, 40, 4,192, 59, 71,179,206,122,
-132,118,237,241, 32, 7,143,200,146,226,114,158, 81, 87, 75, 59,133,120, 17, 47, 79, 1, 97,141, 28, 20,181, 6,150, 72,136,164,
- 78,197,246, 14,105,217, 33,104, 86, 44,154,190,255, 35,151,239,189,211,179, 0,218,202,215,146,199,222,179,103,207, 14, 35,254,
-220,247,254, 56,144,103, 30,147,183, 81,110,192,119,199, 12,160,148,182, 75,190, 90, 57, 76, 38, 83, 53, 0, 68, 71, 71,183,105,
- 65, 32,171,248, 91, 80,101,249,239,104,221, 16, 90, 28,179, 51, 0, 48,112,224,192, 48,149, 82,181,104, 68,204,240,199, 84, 74,
-165, 47,107, 98,141,161,161,161,183,194,194,194,174, 40,149,202, 37,149,149,149,249,142,166,107,202,228, 41, 44,128,231,143, 30,
- 57, 49, 54,118,236,216, 41, 18,137, 36,136,128,154, 8, 33,224, 56, 90,173, 85, 43,214, 92,206, 43, 46,251,118,227,134, 54,173,
- 8,216,212, 0, 48, 1,248, 71, 43, 2, 98,139,147,150,151,201,242,106, 14, 38,152, 71,212,243, 28, 76,143, 28, 64,150, 29,190,
- 12,152, 7,173, 57,130, 71, 29, 72,223,122, 0, 95,218,225,249, 21,230, 41,144,112,128,239, 27, 75,196,192, 30,138, 44,158,189,
- 35,233,227, 57,145,167,235,237,240,221,239, 0,159, 53,218,176,209,242,108,236,206,181,165,148,146,137, 19, 39,198, 89, 5,223,
- 54, 4,239,202, 82,192, 50,153,140,164,167,167,199, 49,179,218,103,233,222,246,230,251, 51,160,160,228,166, 62,178, 91,183,141,
-243,222, 95,247,164,245,156, 65,192,108,214,105,184,125,229,197,197, 42,135, 10,211,250,245,180,234,244, 6,178,252,251, 95, 22,
-238, 94,125,223,206,227, 39,202,158, 9,246,229,166, 50, 1, 62,126,148, 2,132, 80,189,158,229,202, 57,160,202,160,231,252, 74,
-203,180,134, 72, 39,210,152,156,156, 28,111,219, 29,144,156,156, 28,223, 81,158, 95, 71, 92, 9,240,207,130, 73, 75, 84,119,244,
- 30,101, 50, 25, 39,149, 74, 59,139,197,226,178,232,232,232,251,219,131, 51, 53, 53,245, 96, 96, 96,224,147,169,169,169, 27,157,
- 48, 0, 88, 75,228, 20, 0, 48,122,204,232,229, 0,150, 55,189,176,233, 24, 33, 71, 49,110,252,200,159, 96,238,138,109,130, 48,
-244,238, 51,168,205,247,220,156, 1,160,115,129,135,182, 18, 34,209,187,249,254,178,124,141, 96, 17,250,118,171,232, 73, 73, 73,
-217,246,230,229,255,145,124,127, 6,212,104, 52, 79, 1, 30, 70, 0,193, 28,104,169, 78,103,216, 82, 94, 94,121,158, 82,234,240,
-180,169,160,152,127,208,140, 15, 39,147, 91,158, 15,231,118, 29,139,220,172,175, 62,120, 57, 32, 64,180,136,207, 35,180,172, 90,
-119,185,204,192,110,146, 8, 24,177,132,207,227, 25, 89, 78,236, 76,250,172,125,252,214,129,103,174,238, 3,112,219,212, 63,155,
-208,191, 43,139,205, 52,245,204, 29, 57,127,183,249,238,182,225,227, 40,152, 89, 10, 16, 66, 48,117,218,239, 3,162,247,236, 61,
-211,208,134, 36, 78,142,110,175, 41,138,229,237,217,222, 88,140,128,141, 78, 92,238,111, 49, 0,212,127,214,246,129,223,228,129,
- 82, 71, 27,251,166,104,110, 20,187,155,239,175,205,231, 70,199, 71,117,117, 53,133,185,155,171, 77,184,229, 57,157, 2,192,209,
-205, 31,147,132,167, 94,249,240,241,185,121,159, 62, 63,251,216, 0,131,154, 68, 4, 8,248, 65, 32, 68,227, 37,225, 87, 14,234,
-231,147,239, 44,119, 66, 66, 2, 73, 75, 75,115,121,189,249, 59, 37,158,127,150, 8, 64,199, 51, 30,204,177,161,191, 65,245, 10,
-179, 56,204,222,248,147,238, 6, 72,162,162,162,254, 30, 67,100,221,112,195, 13,240,121,128,135,136,128,227,204,109,116,189,214,
- 93,253,221,112,227,111,219, 30,184, 31,129, 27,110,252,125,192,154, 0,165,198, 42,250,110,241,119,195,141,191, 51, 24,247, 35,
-112,195, 13, 55,220,112,195, 13,183, 1,224,134, 27,110,184,225,134, 27,110,184, 13, 0, 55,220,112,195, 13, 55,220,112,227,175,
-136, 70, 99, 0,230,205,155,231,242,200,205,230,214,214,110,142,239,127,223,127, 30, 55,104, 72,111,121,231,174, 97,241, 42,173,
- 90,126, 88,158, 27,159, 52,235,217,108, 87,249, 86,127,181, 61, 46,106,200, 40,249,173,210, 82,120, 74, 60,113,163,164, 32,254,
- 95, 79, 77,115,153,175,189,239,247,194,225,121,113,163, 71,245,148, 75, 60,121,224,243, 24, 16, 49, 65,153,242, 69,226, 42,223,
-153, 91, 67,226, 70,140, 26, 33,247,245,226, 1,124,160,230,220,122,226,104,250, 34, 39, 69,186,124,191, 87,246, 95,185,141,111,
-228,200,145, 46,243,157, 56,113,226,118,190, 72,215,211,119,226,202,237,233, 27,213,167,143,203,124,199,243,243,255,116,124,147,
- 90,201,223,229,203,211,232,162, 69,201, 45,126,190,191,153,252,141,124, 96,146,235,229,101,223,254,219,203,243, 36,215,203,203,
-242,204,106,234,195, 21, 52, 58, 23, 20,249,176,203,124, 85, 87,190,187, 45,125,103,223,184,238,114, 67, 58,108,105,143,219,206,
-125, 24, 84,234, 50,223,203, 85, 97,248, 35,218,171,191, 59,159, 84, 42,229, 55,183,179,160, 35,124,251,247,239, 7, 0, 40, 20,
-138, 8,157, 78,167,120,242,201, 39,107,255,200,251,117,218, 0,104, 9,186,173,210, 72, 0, 61, 97, 94, 39,160, 64, 60, 91,118,
-205,209, 31,216,254,205,242, 56, 2, 14,193,126, 1,200, 61,124, 70,254,245,215, 31, 35, 54, 33, 22,172, 90, 35, 31,208,111, 60,
- 56, 14,242, 95, 35,190,142, 31, 54,108, 8,174, 94,189,142,186, 90, 53, 6,143,153,147,221, 18,223,250,111,229,113, 20, 4, 61,
-122,247,148, 75, 95, 89,130,234, 79,182,227,155,207, 63, 3, 32,198,158,243, 37, 96, 24,200, 63,126,231, 45,228,231, 95, 70,120,
-120, 15,136, 36,124,220, 44,201,111,113,113,145,194, 29,159, 81,161, 80, 8,137, 68,130,130,130, 2,116, 9,241, 65, 16,223, 11,
- 93,186,251,193, 95,226, 11, 79, 98, 2,195, 48,160,156, 9, 26, 17, 31,117,183,234, 80, 49,220,254, 92,242,186,130, 53,212, 91,
- 82,135, 49, 35,122,193,203,147, 15,161,132, 1,159, 7, 48, 66, 62,250,134,125, 78,141,148,135,194,155, 79, 57,156,225,171,247,
-234,226,194,194,194, 16,123, 79, 87,185, 86,167, 7, 35,146, 0, 70, 32,175, 62, 58, 78,171, 81, 99, 84,200,229,236, 63,202,138,
- 92,191,126, 61,157, 59,119,238,223,106,126,125, 71,133, 61,161,111,227,245,158, 0, 70,116,146,120,252,183,180,180,180,159, 64,
- 44, 2,231,225,177, 12,230,149, 49,235, 59,202, 51, 40,248,117,111,220,181,139,135,111,219,107, 32, 33,121,217, 95,165,140,146,
-111, 54,109,250, 77, 36, 20, 74, 56,142,243,245,244,242,242,122,112,234, 84, 15,152, 87,176,235,168, 35, 59,173,209,102,174,173,
- 68, 82,169,212,199,215,215,119, 65,223,190,125,103,136, 68,162,174, 37, 37, 37, 37,165,165,165, 39, 12, 6,195, 82,153, 76, 86,
-224, 2,159,159,191,191,255,146,251,238,187,111,242,179,207, 62, 27,254,197, 23, 95,220,186,112,225,194, 49,157, 78,247,174, 76,
- 38,187,224, 8,199,254,253,251,241,227,200, 29, 24,179,247,222, 21,225,225,225,175,121,122,122, 98,251,246,237,167,103,206,156,
- 57,252, 79, 19, 1,104, 65,252,121,158, 34,254,136,199,198,246, 90,201, 81,170, 59,122,249,214, 39,151,182, 74, 15,136,103,203,
- 46,218,251,110,242,212,222,116,234,125,203, 97,172,175, 5,223,196,224,151,139,151,241,196, 19, 47,254, 94, 34, 24,224,231,220,
-141, 8,234, 30, 38,231,234,149, 48,112, 4,135, 14,229,198,151,104, 91,202,168,165, 20, 66, 95, 16, 15, 31,156,185, 88,140,243,
- 23,255,129,175,190,219,223,240, 57,199, 1, 15,140, 25, 3,212,151, 3,240, 70,193,133, 75, 16, 4,249, 33,118,244, 32,121,173,
-166, 21,155,133, 48, 0, 97, 16, 53, 36, 26,157, 60,133,232, 18, 36,134, 79, 96, 0,252, 69,222,240, 23,243, 32,224,241, 96, 52,
-153, 80,203,114, 56, 89,117,218,238, 67, 45, 63,191,132, 6,248, 2, 62, 30, 30, 8, 14, 10,132,143,143, 7, 40, 99, 2,203,213,
-195, 4, 19,188,188, 60, 16,212,169, 43,122, 70,254, 68,179, 14,143,109,181, 81, 90,151,105,160,190,222,158,232, 25, 17,130,224,
-160, 64,168,213,106, 8, 69, 98, 8,116,230,197,249, 34,194,123,200,107, 20,181,248, 62,183, 40,190,184,228, 38, 20,229,215,177,
-244,217,232, 86,141,129,180,229,105, 14, 55, 18, 9, 79, 38,196,251,135,250,103,183, 38,254,119,195, 8,120,227,253,247, 41, 0,
- 44,125,237,181,118,249,141,197, 43, 86, 80, 0, 72, 93,184,208,101,190, 31,115,114,158, 48, 24, 12, 27, 1, 96, 70,124, 60,227,
- 74,227, 43,219,182,205,188, 70,188,205,180,105, 74, 41, 8, 33, 13,255,173,231,172,215,205, 77,110, 89,176, 23, 45, 74, 38,142,
-138,186,147,226, 63,192,211,200,110,247,246,243,237, 7, 0, 66,137, 24, 6,173, 14,156, 90,179,226,216,145,195,239,220, 59,115,
-102,127, 0,197,246, 72,244, 60, 33,133,121,241, 20,214, 34, 10,156,165, 29,106,182, 45, 26,122,239,100,252,118, 40,195,169, 60,
-186,118,241,176,188,247,160,184,248,240,254, 15, 56,111, 20, 39,215, 56,117,121, 74, 74, 10,182, 37,103,181,122, 77,124, 86,227,
-173, 72, 6,248,153,111,181, 66,199, 65,203,154,243, 85,109,249, 47, 27,229,135, 62,222,130, 86,249, 86,174, 92,153,253,198, 75,
-175,134, 76,155, 49,221, 75,167,211,226,227, 15, 63, 96, 86,175, 94,173,155, 63,127,126, 24,128,155,237, 93,247,246,237,219,151,
-176,115,231,206, 76,192,185, 53, 7,114,115,115,105, 81, 81, 17,170,171,171,161, 82,169,224,237,237,141,192,192, 64,132,135,135,
- 99,204,152, 49, 46,213, 59,169, 84, 58, 62, 58, 58,122,211, 43,175,188,114,181,111,223,190, 27,135, 13, 27,118,233,214,173, 91,
- 93,115,115,115,163,159,122,234,169,221, 82,169,116,133, 76, 38,251,202, 9,190,248, 25, 51,102,164, 45, 95,190, 60,208,104, 52,
- 66, 34,145,192,211,211,179,179, 90,173,158, 57,109,218,180, 7,165, 82,233,124,153, 76,246,121,107, 28,207, 43,164,192, 72, 96,
-202,137, 25,240,236,238,217,101,209,162, 69, 56,117,234, 20, 85,169, 84,126, 54,191, 3, 0,188,153, 51,103,154, 38, 78,156,120,
- 87,196,253,220,185,115,141,142,155,219,208,141,223,130,232,119, 3,208, 11,230, 37, 99, 77,106, 61,123, 35,247, 74,197, 71, 99,
- 34, 67, 94,188,111, 64,231,119, 58,249, 74,186,200,183, 74,183, 2,184, 44,158, 45,107,113,147, 26,125,125, 13, 58,245,190, 31,
- 75, 94,155,129,141,178,223,235,226,225, 99,235,160,214,232,145,152,240, 34,238,137,125, 18, 15,167,220, 7,137, 68, 4,131,137,
-133, 74, 99,144,247, 25,221,187,133,194,113, 29, 48, 0, 51,230,172,197,191, 94,121,166,225,236, 3,247,196, 65, 44, 22,225,135,
- 67,251,177, 39, 39, 23,155, 54,124, 6,157, 86, 15, 33,143, 15, 47, 15, 33,212,213, 37,241,181, 37,104,118,247, 49, 74, 41, 64,
- 57,243,139,225, 64, 41,133,222, 32, 50, 55, 79, 34,128, 26, 76, 48,241, 0, 19, 76, 48, 25, 56,176,166,214, 13,216,130, 19,169,
-180,107, 48,133,143,183, 39,194,186, 70,160,223,224,222,240,246,146,160,174,190, 18,229,149,229, 80,212,221,130, 81, 71,224,225,
-225,129,224,224, 88,204,156,126,129,110,223,217,183,249, 48,254,230, 27,212,228,237, 13, 45, 31, 16,138,133,208,106,132, 48,104,
-132,208,137, 69,224, 19, 22, 20, 60,232,180,245,208,106, 84,232,218,181,139, 92,200,227,163, 6, 74,124,244,209, 17,136, 68,173,
- 23,142,247, 55,189,111,183, 0,189,246,248,107,173,126,174, 80, 40,104,147,227,152,128,128,128,124, 66,136,142, 82,202,247,247,
-247,247, 40, 40, 40, 8, 76, 75, 75,203,158, 59,119,110, 23, 87, 11,178, 48, 52,116,118,195,111, 0,113,254, 64,187, 69, 59,214,
-167,165,209,231,158,123, 46,222, 88, 81,225, 20,231,143, 57, 57,210,145, 35, 71, 46, 29, 27, 21, 5,163, 72,132, 85,171, 86,113,
- 51,239,187,111, 2,165, 52,203, 41, 87,142, 16,172,124,231,157,134,227, 5,111,191,141, 85,239,190,219,234,177, 61, 52, 53, 2,
-150, 47, 79,163, 49, 49, 49,200,202, 42,164, 9, 9, 61, 7, 2, 40, 92,190, 60, 77,235,164,248,231, 14, 30, 56,208,199, 90,103,
- 60,197, 18,148, 85, 86, 64,169,168, 69,244,200, 81, 30, 63,126,181, 33,107,202, 83,255, 24, 8,243,230, 5,173,129,125, 97,233,
-106,254,163, 51, 31,228, 71,134,135,115, 86,207,240,237, 85,159, 54,186,232,221, 5,207,155, 13,191,151,230,199, 63, 62,117,130,
-211,249,234,146,248, 55, 88,200, 1, 78, 92,156,224, 20,181, 39,159,224,252,187, 79,131,248, 4,193, 84,120, 30,250,194, 95,145,
- 95,163,198,240,189, 21, 14,125,127,157, 76,118,244, 21,233,115, 61, 30,255,231, 83,126,105,155,191,227,194,195,195,153, 37,203,
- 87,192,251,157, 37,248,225,135, 31, 74, 31,122,232, 33,151, 12,209, 22,132,127,194,206,157, 59, 15, 88,143,167, 79,159,238,144,
-114,169, 84,170,184, 3, 7, 14,200,141, 70, 35,122,245,234,133,113,227,198,193,215,215, 23,181,181,181,184,121,243, 38,174, 93,
-187,134,155, 55,111,210,137, 19, 39,198,123,123,123, 59,156, 79, 82,169,116,250,125,247,221,247,241,202,149, 43,183, 14, 27, 54,
-236, 99,171,177,211,165, 75, 23,204,156, 57,147, 36, 37, 37,121, 1,200,149, 74,165,185, 45,237, 94,218,148,111,254,252,249,233,
-207, 61,247, 28,115,250,244,105, 16, 66, 16, 24, 24,216,240,218,187,119,175,112,244,232,209,159, 73,165,210,227, 45,241, 61,175,
-144, 98,202,137, 25, 0, 64,182,167,236,160,247,126, 54,190,123,126,126, 62, 10, 11, 11, 73, 93, 93, 93, 47,169, 84,202,159, 54,
-109,154, 9, 0,157, 54,109,154,137,101, 89,220, 13, 52, 21,127,235,185,166,247,193,111, 70,252, 3,135, 71, 4, 62, 30,213, 35,
- 96, 14, 33, 68, 64, 41, 53,114,230,151,193,100,212,105,133, 12,215,101,112, 39,241,107, 65, 62,189,122,239, 60,121,237, 59,221,
- 86,233, 81,241,108, 89, 89, 43,205, 55, 6,244,239, 11,134,201, 70,126,109, 53,128, 75,168, 43,189, 2,129, 88,132,140,221,159,
- 64, 83,101,194,156,127,188, 12,142, 3,166, 62, 56, 6, 38,190,151,221,155,203,207,191, 4,142, 3, 18,135, 18, 0, 93, 0,244,
-128, 78,111, 64,210, 3, 19, 33,246, 99,176,105,203, 62, 48, 12,144,254,221, 70,148, 22,254, 26,255, 80, 92,100,246,229,179,205,
-115,113, 20,224, 56, 14, 28,199,193,100, 50, 65, 47,160, 48, 18, 35, 12, 6, 3, 52, 30, 58,128, 19,131,161, 38,152,132, 20,245,
- 6, 29,212,202,186, 86,211, 22,236,165, 7,159, 47, 65, 96, 96, 32,122,247,238,141,208, 78,163, 0, 30, 3,147,233, 52, 24, 90,
- 11,157,154,133,137, 83,163,252,102, 13,130, 3,171, 16,232, 23, 11,133,106,113, 92,115,155,188, 72,116, 44,168,190, 10,208,137,
- 96, 96,140, 80, 11,249,168,151, 8,192, 23, 8, 1,206, 19,132, 71, 80,175,214, 64, 81,126, 29, 5,167,115, 80, 83, 92, 12,142,
-227,192, 80,158, 75,133,230,171,181,191, 27,206, 79,205,123,202,126, 59,105,217,215,221, 90,116,210,210,210, 22,189,242,202, 43,
-207, 20, 23, 23, 51,132,144, 96,153, 76,246, 29,204,155, 59,121,180,161, 44, 11,214,172, 89,179,229,214,173, 91, 72, 79, 79,199,
-240,190,125,121,254,131, 7,183,185,130,164, 46, 92, 72, 20, 64, 28,165, 84,190,122,245,106, 57, 0, 72, 83, 82, 28,246, 74, 12,
- 6,195,186,177,150,202, 36, 20, 10,209,167, 79, 31,108, 63,116, 40,211, 18, 13,112,152,231, 78,109, 85,187,104, 81, 50,201,202,
- 42,164,167, 79,155, 35, 86, 54,255,127,189,247,222,123, 75, 23, 45, 74,246,117, 84,179, 60,141,236,246,193, 3, 7,250,240, 24,
- 6,207, 62, 58, 7, 90,157, 30,171,190,252, 18, 30, 18, 9,116, 58, 29,116, 90, 45,134, 14,139,138,220,191,121,243,115,147,230,
-204,249,200, 94,212,241,221, 5,207,115, 0,152, 43, 69, 69, 76, 83,193,111, 90, 61, 93,185,247,110,253,198,199,103,165,189, 78,
- 39, 76,125, 58,158,138, 34, 93, 50, 4,108,119,237,163,219,252,237,158,183,107, 65,249,241,113,189,222,132,195, 19,130, 33,120,
- 81, 6,229,156, 8,240,253, 67,156, 18,255,131, 7, 15,150,135,119,238,114,243,159,207, 62,211,237,245,151, 23, 98,245,134,117,
- 23, 71, 70, 71,247, 92,247,233, 58,143,151, 22,190,138,205, 99, 70, 97,203,150, 45,143, 61,242,200, 35,155,218, 40,252,113, 59,
-119,238,108,112,152, 44, 97,245, 23, 96,222, 42,221, 46, 14, 28, 56, 32, 15, 14, 14,198,176, 97,195, 88,134, 97,248,230,232, 44,
- 7,129, 64,128,128,128, 0,116,234,212, 9,215,174, 93,195,129, 3, 7,228, 51,103,206,116,168,174, 72,165,210,228, 41, 83,166,
-124,176,114,229,202, 79,251,246,237,187,150, 16,194, 1,248, 12,192, 36, 0, 71, 0,188, 75, 41, 45, 34,132,188, 10,224, 93, 71,
-248, 86,206,159,255,253,216,228,100,178,107,215, 46,240,249,124,200,229,114,156, 63,127, 30,189,123,247,198,123,239,189,135, 65,
-131, 6,225,153,103,158,225,191,249,230,155, 43, 91,244,252, 45,216,158,178,131, 2,128,135,135, 71,153,159,159, 31,196, 98, 49,
-132, 66, 97,189,112, 25, 88,122,140,146,105,211,166, 97,217,178,101, 56,127,254, 60,182,110,221,122, 87,196,127,238,162,101,191,
- 59, 58,203, 95,111,214, 8,104, 46, 2,192,240,121, 12,159,229,168,138,229, 76, 58,137,128,223,213, 75,200,244, 7,199, 2,145,
-247, 2,157,122, 3,183,174,160,243,229,156,233,143,197, 70,132,103,156, 43, 19,215,108,149,102,152, 55,183,107,190, 14,243,120,
- 86, 65,242, 1,208, 21,190, 97,125,113,253,114, 58,214,202, 54,128,209,123, 96, 98,124, 44,246, 29,204,129, 70, 3,120, 4,180,
-220, 46, 73, 60,250, 66,171,185, 12,147,201,118,111,154,114, 0, 55,193,240,226,240,248, 19, 79,131, 19,169,241,227,238,175, 48,
-245,193,167,224,225, 9,168,235,203, 44, 26,212, 60,140,224, 65, 96, 17,127, 35,107,130, 94,105,132,198,168, 65,173,132, 15,163,
- 70, 0, 61,223, 8,158,145,128, 53,113, 80,106, 89,212,212,179, 45,170,217,121,249,114,218,179, 19, 1,143, 71, 64, 24, 17, 76,
- 38, 10, 86, 83, 12,189,201,136,210,242, 58,212, 40,234, 81,167, 50,129,209,233,192,162, 28, 60,193, 57,116,233,174,196,168,232,
- 24,249,119,223, 94,106,150,147, 7,128,170,116,208,170,110,194,116,171, 14,188, 94, 93,193, 48, 12, 76,172, 30,181,229, 69,184,
-124, 34, 23,149,215,139, 45, 66,194, 7,195, 7,192,187, 59,221,128,214,144,255,250,245,235,245, 73, 73, 73,253,163,162,162, 88,
-145, 72,164,254,224,131, 15, 70,194,188, 41, 81, 31,180,113,166,137, 48, 52,116, 1, 0,140, 30, 52, 8,161,161,161, 21,171, 87,
-175,206, 2, 16, 63,108,240,224, 54, 71, 1,252,129,108,105, 74, 10, 17,132,132,196,173, 94,189, 90, 46, 8, 9,137,115, 38, 18,
- 96, 20,137, 32,208,235,177,125,251,118,132,132,132, 96,198,196,137,214,104, 0,117,198, 8,184, 83,176,138,190, 76, 38,179,109,
-248,112,248,240,225,176,209,163,147, 31, 68,203,219, 70,219, 98,132,159,191,127, 63, 30,195,224, 31, 73, 73,168,173, 83,162,178,
-166, 26, 2, 1, 31,124,190,249, 37, 16, 8, 32,146,120,160, 87,120,248,135, 87, 79,157, 62,223,123,120,140,220, 30,233,149,162,
- 34,124,187,253,127,183,121,252,214, 72,192,168,232, 33, 72,140,191,215,201, 59, 86,197, 1,222,217,125, 7, 39,102,247,237, 19,
- 25,159,185,235, 75, 57,208, 49,250,254,243,190,254, 8,250,125, 27, 16,242,249, 25, 12,240,227,131,231, 19, 0, 86, 81,129,225,
-123, 43,224,201, 39, 80,179, 20, 60, 59, 53,229,218,213,171,213,123,118,237,238,251,245,231, 95,227,147, 47, 63,187,190,238,131,
-143,222, 14, 8, 12,168, 93,178,116,201,193, 77, 91, 54, 99,220,232, 88,124,155,182,245,235,110, 61,186,125, 61, 46,118,156, 75,
-247,220, 84,252,119,237,218,133,174, 93,187,246, 58,121,242,228, 28,152,183, 26,183, 27,246, 55, 26,141,136,142,142,230, 88,150,
-229,171, 84, 42,136,197, 98,112, 28,135,223,126,251, 13,249,249,249,240,242,242, 66, 76, 76, 12,202,203,203,145,155,155, 75,237,
-117, 7, 72,165,210,217, 41, 41, 41, 43, 31,120,224, 1,175,181,107,215,250,124,252,241,199, 66,152,119, 45,205, 4, 16, 13,243,
- 6,103, 31,193,188,157,251, 65,152,119, 60,109,149,111,231, 43,175,108, 30,208,191, 63, 89,157,148, 4,114,255,253,216,126,244,
- 40, 87, 90, 90,186, 4,192,234, 27, 55,110, 76, 91,180,104,209,231, 63,252,240, 3, 98, 99, 99,225,233,233, 57,166, 37,174, 41,
- 39,102, 96,199,142, 29, 88, 63,201, 92,199,252,252,228, 85,157, 58,117,130,151,151, 23,245,244,244,188, 97,120, 29, 32,211, 8,
- 93,182,108, 25,172,134, 70, 99,253,186, 59,152,187,104, 89,131, 17,208, 72,236,155,158, 16,207,150, 85,254,124,181,114,221,198,
- 35, 87, 95,254,173,180,238, 0, 3,202, 7, 40, 48,229, 61,252, 28,243, 1,254,171, 72,194,161,129, 43,128, 73,139,225, 45,224,
-134, 61, 16, 21, 62,199,210, 93,112, 27,118, 29,170, 33,128, 18,211,158,120, 17, 28, 7, 0, 53, 48, 47,155,108, 68,143,190,209,
- 16,139,248, 48,177,122, 80,131, 57, 44,226,237,237,141,234, 26, 69,139, 55,241,209,135,175, 16, 0,184,248,243,151, 96,152,198,
- 78, 2,167,253, 21, 58,189, 17, 60,129, 24, 68,104,238, 67, 83, 41,149, 24, 51,102, 76,235,238, 8,103, 0,199,113, 96, 89, 22,
-122,189, 30,245, 28,139, 58,131, 17,202, 50, 37,234,110,214, 65, 89, 94,131, 26,101, 45,202,117, 26, 40,213,181,168,213,183, 60,
-214,201,219, 75, 13,150,229,160, 55,152, 80, 91,167, 68,254,213, 98,156, 56,157,135,159, 79,228,225,210,111, 5, 40,185, 81,133,
-122,181, 1,170,122, 61,202, 74,235,112,225,215,107,200,205, 61,139,146,178,242, 22, 57,109,139, 10, 91,167, 70,201,185, 75,248,
-101,239, 33,100,110,248, 16,135,182,110, 64, 73,193, 85,112,212, 8,142,144, 6,225,119,166,230,219, 11,243,219, 3,159,207, 7,
-128, 91, 0,110,249,251,251,151,120,123,123,235, 23, 45, 90,116, 18,230, 1, 99, 12,204,107,101,231,187,202,191,102,205,154,212,
-164,164, 36, 0, 64, 68,112,112,136,165, 79,156,215,158,149,195, 42,250,214, 72,128, 3,225,255, 4, 0, 88,181,106, 21,174,148,
-149, 97,198,196,137,176, 70, 3,242,242,242, 0, 0, 59,228,114,234,104, 86, 44,120,251,109,188,250,206, 59, 13,225,125,235,123,
-235,177,245,189, 35,225,127, 43,178,178, 10,105, 83,241,183, 61,206,202, 42,252,214, 17, 30, 63, 62,255,191, 58,131, 30, 60, 30,
- 15,191, 21, 22,160,176,228, 6,142,159, 59, 15,131,193, 8, 6, 4,124, 62, 31,132, 16,112, 38, 19,180,106, 13,242, 14,103, 31,
-114,128,150,177, 21,255, 71,103, 62,120,155,199,127,252, 76, 30,108, 35, 4,142,193, 38,156, 44,138,204,182, 10,127, 86,218,235,
- 84,192, 94,137,251, 67, 45,128,154, 50, 8,187,247, 65,197,115,247, 32,239,235,143,192, 15,234,220,240, 81,197,115,247, 32, 72,
-204,192,135,223,122,113,233, 27,217,183,139,135,135,167,199, 39, 95,172,209,197,223,123,175,112,212,152,209,155,175, 93,189,198,
-253,118, 53, 31,224, 40,196, 34, 17, 98, 99, 98,177,123,215,110,236,220,185,211, 41, 47, 96,223,190,125,113, 82,169,148, 90,197,
-255,192,129, 3, 88,183,110,157, 1, 0, 78,156, 56, 97,144, 74,165,143, 56,210,181, 80, 84, 84, 4,203,214,196, 76, 81, 81, 17,
- 50, 51, 51,145,151,151, 7,181, 90, 13,133, 66,129, 83,167, 78,161,184,184, 24, 55,110,220, 64,143, 30, 61, 80, 84, 84,212, 42,
-223,188,121,243, 30,127,248,225,135,223,143,139,139,243, 58,121,242,164,143, 70,163,249,167, 68, 34,201, 6,240,169, 76, 38, 91,
- 44,147,201,234, 0,252, 15,192, 8, 66,136,144, 82,106,108,205,233,152, 63,127,254,227, 63, 44, 88,176, 57, 54, 36,132,176, 11,
- 23, 98,140,193,128,147,187,118,209,210,210,210,167,101, 50,217,219, 50,153,172, 18,192,198,139, 23, 47,178, 44,203,194,203,203,
- 11, 97, 97, 97, 94, 70,163,177, 89,241,159, 52,105, 18,100, 50, 25,164, 82, 41,164, 82,169, 71,105,105,105,223, 27, 55,110, 64,
-173, 86, 19,133, 66,209,159,207,231, 79,176, 21,127,185, 92,142, 7, 31,124, 16, 29, 5,205,117, 1,132, 2,232, 53,125,120,247,
-103,187, 5,122,206,129, 81, 11,244,157,128, 51,193,211,113,223,252,175,160,173,170, 5,207,199, 27,242,143, 31,199,184, 1, 63,
- 35, 32, 47,115, 60,128,238, 45,253, 64,111,159,174,248, 37,111,135,141,189,161,182,116, 19, 26, 1,163, 30,124,142, 7,198, 82,
-239,119,254, 96,238,110,138,157,156,210,114, 65,189, 64,241,192, 48,219,109, 16,137,229, 54, 4,128, 64, 12,150,152,192, 89,218,
-221, 89,115, 94, 0, 0,249,245, 99,235, 91,172, 89, 38,142,130,229, 24, 48, 44, 11,198,160,135,198, 98, 89,104,121, 60,120,178,
- 90, 40,181, 20, 68, 64, 96, 50,153,160, 49, 1, 21,106, 3, 90,234,204,102, 13, 28,116, 2, 30, 56, 13, 11,150,171,131,170,222,
- 8, 30, 17, 64,207, 26, 97,160, 6,176, 70, 3, 32,228,192, 16,128,136, 56,212,105, 77, 40,175,212, 64,173,103,155, 13,198, 48,
-196,212, 96, 0, 16,242,187,158, 24,117, 90,212,213,212,128, 33, 60,240,249, 20,160,124,240,136,235, 29,127,151,175, 95, 54,244,
-237,209, 87,232, 72,216,191, 81,152,148, 16, 72, 36, 18, 0,208, 2, 48,240,249,124, 20, 22, 22, 98,249,242,229, 15, 2,184,177,
-104,209,162, 97,190,190,190,126,117,117,117,215,107,107,107,157, 14,119, 11, 67, 67,159, 2,128, 78,157, 58,217, 86,224,218, 79,
- 63,253, 52, 11, 64,194,176,193,131, 15,182, 87, 69,152, 63,127,126,188, 35, 6,192,143, 57, 57,113, 35, 71,142, 12,150, 42,201,
-129, 0, 0, 32, 0, 73, 68, 65, 84, 27, 27, 21, 5,226,237,141,229,203,151, 99,225,194,133, 16, 8, 4, 48, 42, 20,240,245,245,
-197,235,243,231, 55,140, 11,112,100,112, 96,211, 62,126,123, 99, 2, 90,194,114, 39, 6,119,158, 62,125, 26,167, 79,159,110,184,
-190,165, 62, 78, 69, 77, 77, 63, 47,111,111, 84, 41, 20,144, 31, 63, 14, 62,195,131,222,104,132, 70,171, 5,199,113, 13,131, 21,
- 89,163, 1, 6,189,222,145, 60,230, 0, 48,150,110, 0,206,166,224,235, 44,231,241,246,170, 79,133, 0, 16, 25, 30, 94,113,237,
-226, 47,109,202,215,132,228,101,228,183, 51,233,113,123,119,126, 41,111,143, 72,128, 51, 97,255, 70, 97,217,109,159, 35,234,137,
-151, 33,138, 24, 98,110, 43,170,202,144, 95, 99,222, 68, 78, 52,102, 10,138, 77, 44, 60, 86, 31,111,149, 67,169, 84,250,137, 36,
- 98,244,142,136, 16, 95, 43,185,209,185,186,178, 26,179, 30,157, 35,223,115, 48, 19, 31, 47, 91,149,190,115,207,174,164,200,136,
- 72, 60, 62,243, 49,228,158,201,193,206,237,219,233,116, 7, 66,236,182, 94,255,129, 3, 7, 48, 97,194, 4,171,177, 40,188,121,
-243, 38,158,121,230, 25,161,245,246,237,113, 85, 87, 87, 99,220,184,113, 48,153, 76, 40, 42, 42, 66, 78, 78, 14, 6, 12, 24, 0,
- 95, 95, 95,116,235,214, 13, 81, 81, 81, 96, 24, 6, 12,195,160,115,231,206, 13, 81,170, 22, 60,245, 1, 67,134, 12,249,104,204,
-152, 49,188,188,188, 60, 31,147,201, 84,190,125,251,118,165, 86,171, 93, 46,147,201,108, 13,216,103, 39, 79,158, 92,188,103,207,
-158, 8, 66, 72, 25, 90,216,209, 86, 42,149, 14,155, 31, 31,191,113, 20,159, 79, 42,151, 46, 5, 53, 26, 33,231,241,184, 92,141,
-230, 73,153, 76,246,141,173,221,241,214, 91,111,241, 25,134, 65, 77, 77, 13, 10, 11, 11, 43, 6, 13, 26, 20,210,148,111,210,164,
- 73,183,253, 70, 88, 88, 88,128,137, 82,104, 53, 26, 92,188,120, 17, 44,203,146,142, 42,254,183, 25, 0,186,173,210,200, 80, 95,
-201,216,201, 67,195,158,241,145, 8, 70,178, 38, 78,193,167, 38, 31,248,117,230,149,213,234,160,173,170, 3,132,124,152,106, 85,
- 40, 81, 24,128,192,238, 96, 56,131, 24,173,204, 38,184,170, 84,162,143,159, 15, 88, 61,112, 53,251, 91,244,142,155,212,224,192,
- 25, 13, 70, 8,192,160, 94,103,222,161,246,129,184,104, 72, 2,195, 90, 77,240, 3,131, 9,246,156,167, 16,136, 1, 97,247, 73,
- 48, 20, 31,109,112, 28, 4, 66, 17,140,208,193, 75, 98,222,145,116,215,158,173,248,229, 68,118,252,156,137, 49, 45,183, 70, 28,
- 7,161, 65, 11, 35,132, 96, 24, 22,208,153, 27, 54,163,209, 8,189, 78, 0, 30, 95, 0,232, 0,202,153,187, 8,122,132, 71,180,
-200,165,209,113,224,241, 8,140,172, 17, 58, 61, 7,165,202, 92, 14,141, 28,133, 65,207, 1,124,128, 39,224,129, 47, 6,136,214,
- 4,142,176,224,160,133, 74,107, 9, 72,219,129, 9, 0,195, 1,148, 0, 12,195,129, 16, 30, 56, 74,192, 48,150,177, 84, 28, 3,
-142, 97, 64, 56,199, 28,100, 27,239, 95,232,106, 1,242,240,240,128,197,219, 15, 46, 44, 44,172, 88,190,124,121, 60,128,135, 22,
- 45, 90, 52,177,103,207,158,106,149, 74, 85,205,178,108,131, 80, 56,163,255,107,214,172,249, 50, 41, 41, 9,225, 65, 65, 13, 39,
-195,131,130,252, 44, 81,128,224, 63,162,194, 24, 12, 6,185,213,219,167, 42, 21,254,253,239,127, 67, 95, 93,221, 48,242,173,183,
-197, 88, 17,232,245,120,240,193, 7, 43, 74, 43, 42, 30, 9,243,240,216,124, 55,210,102, 59,168,207,182,255,191, 57,196,196,196,
- 32, 33,161,103,195,245,205,173, 3, 0, 0,172,222,128, 90, 67, 13,116, 58, 29,252,124,125, 33, 22,138, 96, 52,177,160,148,194,
-100, 50,193, 96, 48,192,104, 52,130, 99, 77,142,230, 47,119,165,168,136,137, 12, 15,183,122, 4,220,149,162, 34,230,219,237,255,
- 19,219, 70, 4, 34,195,195,107,209, 78,131,217,250, 69, 39,101,151, 20,156,106,151,103,236,234, 24,128,123, 51, 43, 81, 17,158,
- 14, 97,247, 62, 32, 17, 67,208, 99,195, 89, 84,233, 56,120,242, 9, 12, 63,253,128,203,133,215,236,238,159,167,101, 13, 56,157,
-123, 2, 31,173,252, 16,247,196,141,197, 91,255,239, 29,236,223,187, 31,155, 55,125,131, 49,227,199, 38,117, 11,239, 14,190,135,
- 0, 7,143, 30,196,150,175,191,193,142, 31,182, 99,247,238,221,244,255,254,239,255, 72, 43, 34, 75,155, 10,191, 21,181,181,206,
-111,112,167, 82,169,224,235,235,123, 28,192,168,240,240,112,196,196,196,128,199,227,129,227, 56,244,232,209, 3, 34,145, 8,117,
-117,117, 8, 15, 15,135,183,183,247,117,149, 74,213,163, 37, 46,153, 76,118, 81, 42,149,166,238,216,177, 35, 49, 50, 50,178,223,
-246,237,219,235, 21, 10,197,187, 50,153,108,139, 77,250,167,223,123,239,189,175,108,216,176, 97, 27,128, 10, 0,201, 0,126, 6,
- 48,180, 25,190,179, 82,169, 52,213,239,212,169, 55, 30,102, 89,124, 8,112, 95,214,215, 63,214,132,239,161, 23, 94,120,225,195,
-185,115,231,226,218,181,107,216,189,123, 55, 88,150, 61, 4,224,225,214,238,219, 18, 5, 96,252,120,188,106, 47,131, 1,234,179,
-103,105, 48,199,169,174, 2,170,187, 45,254, 81, 81, 81, 56,119,238, 92,179, 33,127,123, 93, 0, 61,167, 15,239,190,196, 71, 34,
- 24, 89,169,212,237, 63,118,165,114, 57,120, 34,224,242, 81,220, 31, 78,177,248,249, 7, 17, 51, 48, 28, 47, 72, 39, 99,106, 47,
- 3,112,225, 0,168, 64,194,162,213,193, 58,181,200,175, 45, 6, 95, 4, 60, 48,245,101,108,249,100, 25, 0, 3,160,209,195,164,
- 5,126,144,159, 67,214, 73,243,140,194,174,221, 35,192,240,237,139, 87,226, 80, 2,163, 14,216,181,123, 31,134, 79,124,222,236,
-253, 67, 0,158, 4, 72,153,146,140,196,241,211, 0, 0, 37,215, 11,192,234, 12,173, 91,244,148,130, 37,102,129,215, 27,204,131,
-255,244, 58, 45, 52, 26, 13,234,235,235,161, 82,214, 65,165, 82, 65,169,170,135,174,190, 30, 90,173,182,229,194, 95, 79,160,213,
-153,160,213,153,160,214, 24,161,170,215, 67,161,210,163, 86,105, 64,157,202,136,218, 90,243,255,154,106, 22, 53, 10, 22, 53,117,
- 44,170,106, 12,184, 85,213,114, 26, 25, 74, 97, 2, 64, 76, 4,132,225, 64, 9, 5, 40, 5,165, 60,152,184,223,179,143,179,180,
- 30,206,198,198,251,143,233,143,156, 61, 57,216,127,104,127,131, 81,112,249,250,101,135,190,203,227,241,192, 55,231, 87, 24,128,
- 94, 43, 86,172, 56, 15, 96,245,235,175,191,254, 82,207,158, 61, 89,115,144,192,156, 48, 39,197,159, 8, 67, 67,119, 2, 64,104,
-104,232,109, 31, 62,247,220,115,236,169,203,151,183,158,189,112,161,221,194,186,171, 87,175,150, 59,186,111,188,209,102,138,197,
-247,223,127,143,171,229,230, 46,156, 31,179,179, 27,125,118,249,242,229,144,224,224, 96,197, 31, 97,168, 36, 36,244,100, 44, 13,
- 90,211, 6,191,209,231,118, 13, 60, 31,239,223, 56,147, 9,202, 26, 5,170,170,170, 80, 93,171,128, 90,163,129, 90,163,129,170,
-190, 30,234, 58, 37, 84,181,255,159,189, 43,143,111,162,218,254,223, 59, 89,154,182, 64, 23,118,202, 90,164,236,178, 20,161, 5,
-129, 4, 82,168, 34, 42, 74, 1,225,137,125, 5,155,226, 6, 34, 62, 84, 84,220, 80,121, 63, 11,184,210,212, 39,130,239,129, 64,
-139, 11,155, 44,129,164,178,180,212,130, 11,139, 64,161,208, 66, 89, 10, 77,186, 37,105,182,185,191, 63,146, 9,105, 73,147, 73,
- 90, 4, 53,223,207,167,144, 89,114, 50,115,231,206,253,158,115,238,185,231, 84,160,214,104,128,185,182, 22,172,213,235,252, 38,
-211,163,107, 87,110,204, 96, 1,152, 93,167, 3, 0,224,127,155,182, 96,113,250,199,225, 0,218,250,122,223,191, 31,201,150,170,
-178, 94,170,211,217,206, 30,255,225,246,186,255, 1, 92,158,218, 21, 93,190,252, 25,164,219,221, 48,229,100,163,248,159,131, 16,
- 42, 36,216,151,208, 26,214,202,107, 24,178,163, 12, 94,102, 0, 48,121,242,100,242,228,220, 57, 56,115,234, 20,114, 53,251, 16,
-214, 60, 12,143, 77,125, 12,225, 45, 35,113, 36,191, 0,205,196, 18,132,134,134,162,125,215, 14,248,122,253,215,120,105,209, 43,
-168,169,240,191, 74,237,224,193,131,125,254, 78,243,230,205, 81, 89, 89, 57,140, 97, 24,115,167, 78,157, 48,116,232, 80,244,237,
-219, 23,173, 90,181,130, 68, 34, 65,215,174, 93, 49, 96,192, 0,132,135,135,163,186,186,186, 75,243,230,205,225,133, 88,255, 47,
- 39, 39,103,247, 87, 95,125, 37,210,233,116,175,214, 35,235,164,145, 35, 71,174,248,242,203, 47, 87,181,109,219,246, 93, 66, 72,
- 51, 0, 47, 1, 88,236, 65,222,162,119,170,171,255,111,150,213,106,251,194,104,156, 94, 79,222,228,105,138,215,191,121,118,222,
- 11,130, 83,167, 78,225,208,161, 67,248,242,203, 47,107, 0,188,204,243,246,153, 16,147, 73, 66,127,255, 29,157, 84, 42, 18, 85,
- 90, 42, 0, 64,151, 45, 91,134,173, 91,183,254,161,253,173,190, 71,175, 33, 15, 95,253, 65, 32, 72,192,144,230, 37,229,250,181,
- 95,231,158,123,249,151, 98,109,190,209, 70,206,224,250, 57, 72,190,121, 10,239,142,168, 70,193,155, 67,241,161,172, 6,161,223,
- 61, 13,104, 47,162,134, 74,142, 58, 52,175, 6,112, 35,170,255,215,223,182,224,245,215,191,194, 93, 45,250,227,248,193, 95,177,
- 75,253, 59,100,241,125,145, 48,210,222,209,168, 64, 8,179, 15,241, 17,137,131,122,225,157,255,123, 31, 59,142, 86,161, 89,215,
- 62,120,224,129,137,216,185,247, 91,108,219,105,143,178,100,108, 22, 4,137, 60,143,115,148,181,193,198,218,173, 25, 56,172, 25,
-179,217,140,218,218, 90, 24,141, 70,232, 13, 70, 24, 13,122, 24, 13,122, 24, 76,181, 48,155,106, 27,118,127, 25,155,163,178,198,
-134, 42, 35,139, 42, 35,107,255, 92,205,162, 70,111, 69,141,193, 10,157,214,134,114,173, 5,229, 58, 11,202,203, 45,184,126,221,
-140,171,215, 45, 30, 21,128, 27,238,127,151,107,230,220, 55, 2, 10, 1, 33,160,245,162,254, 41,241, 78,182, 47,206,124, 17,189,
-227,123, 59,183, 85,171, 85, 78,143,192,129,237, 7,112,170,248, 20,175,100, 79, 44,107,255,173,236,236,236,253,148,210,126,147,
- 39, 79,158,217,173, 91,183,214, 0, 24,150,101,131, 44, 22, 75,132,213,106,109,225, 70, 1, 96, 61,184,254, 23,127,250,233,167,
-247, 79,158, 60, 25,221, 90,183,230, 53,117,213, 24,136,218,180,145, 2,192,144, 94,189,100,222,206,237,209,174,157, 44, 61, 61,
- 29,199,139,139,171,190,217,181, 11, 39, 79,158,116, 90,253, 61,123,246,132,227,152,249,155, 93,187, 80, 92, 92,140, 83, 5, 5,
- 70,111, 50,111, 69, 12, 0, 0, 58,122,244,232,167, 92, 73,159,251, 63, 54, 54,150,151, 59, 23, 0, 10, 79,158, 45,176, 90,173,
- 48,155, 77,208, 94, 45,195,181,203, 87,112,253,202, 85, 92,191,114, 21,218,178,107,168, 40, 47,135, 73,175,183,199,207, 84, 84,
- 96,144, 92,238,173, 13,173,139,211, 63, 22, 46, 78,255, 88, 8,160, 10, 0, 59,108,240,221, 55,157,228, 18, 23,192, 27, 39,142,
-100, 75, 75,207, 22,168, 7, 12,189,113, 13,231,206, 28,148, 86, 92, 43, 82, 55,166,127,144, 41,186, 58,150,191, 63, 56,173,213,
-163,100,246, 61,160,231,126, 67,155,207,143, 32,116,229, 97, 92,158,218, 21,177, 59,202, 64, 68, 65, 16, 18, 64,200,120, 87, 64,
-159,126,230, 25,242,218,251,239,224,185, 5,243, 97, 97,109, 56,121,190, 16, 51, 30,155, 14,177, 68,130,239,191,219, 12, 88,108,
- 48,213,154,176,175,224, 32,140,198, 26,164, 38, 39,231, 20, 20, 20, 80, 15,132, 72, 38, 77,154, 36, 27, 55,110, 28, 8, 33,216,
-189,123,247, 77, 46,253, 23, 95,228, 31, 39,212,178,101, 75, 92,186,116, 9, 0,132, 25, 25, 25,184,118,237, 26,250,247,239,143,
-240,240,112, 48, 12,131,252,252,124, 48, 12, 3, 66, 8, 46, 93,186,132,150, 45, 91,122,149,169, 84, 42,223, 53,155,205,163,148,
- 74,229, 6, 23,178,126,108,228,200,145,233,179,103,207,142,200,200,200,144, 16, 66, 24, 0,223, 2, 88,160, 84, 42,175,122,145,
-247,175, 67, 22,203,144,250,242,166, 45,252,102,227,163,211,159, 38,247,207,201,128,230,208, 9,164,167,167,179, 85, 85, 85, 41,
- 74,165,242, 60,143, 41, 68, 0, 96,239,106,222, 60,188,211,149, 43,184,215, 96, 64,123,145, 40, 52, 84, 32, 96, 74, 75, 75,111,
-138,197,249,163,148, 0,238,143,215, 20, 0,128,179, 95, 31, 60,247,140, 86,111, 58, 12,123,224, 86,251,220,194,107,153,163,122,
-181, 93, 36, 60,119, 40, 18, 95, 62, 14, 4,133, 2, 38, 61, 64, 41, 44, 2,201,213,125,199, 47,127, 1,160,193,236, 75,235,214,
-126, 38,155, 62, 99,166, 26, 0,244,172, 5,103, 42, 74, 0,216,112, 87,139,110,144,201,238, 70,219, 86,237, 80, 94, 89,101,247,
- 21,152,173,184, 92,161, 71,111, 15, 55,213,177,115, 60, 46,150,228, 58,222, 76, 33, 18, 7,216, 99, 0,118, 28,181, 96,231,214,
-108, 92,189,126, 9, 45,195,237, 43, 9,194,197, 34,220, 61,196,243,122, 80, 51,132, 16,179, 86,216, 32, 0, 75, 8, 24, 27, 11,
- 88,172,176,137,132, 0, 97,192,189,147, 44,133, 61, 87,128, 7, 60, 60,237, 37,242,221,127, 23,208, 16, 49,133, 80,228,226, 97,
-176, 0, 86, 10,212,154, 1,155,201, 6, 66, 8,136,152,192,106, 3,244, 38, 96, 86,242,191,137,187, 84,142, 54, 23, 13,141,101,
- 88, 16,135,251,223,174, 20, 16,216, 88, 6,140,192,110,245, 51, 0,168,128, 2,148,159, 23,192,149,252,221,109, 31,216,126,160,
-155,215, 41, 9,155, 13, 38,147, 9,147, 39, 79,238,155,157,157,189, 28,192,192,236,236,236, 29,217,217,217,251, 38, 79,158,252,
- 76,247,238,221, 45,132,144,150, 31,126,248,225,174,151, 94,122,105,134, 86,171,205,241,160,124, 58,251,228,130, 5, 11, 22, 47,
- 88,176, 0, 59,118,236,128,254,234,205,239,114,183,214,173,113,238,220, 57, 0, 80,243, 73, 12,212, 80,210, 31, 81,155, 54,210,
- 79, 63,253, 84, 77, 41,197,144,158, 61,101,131,121,172, 44,232,223,187,183,134, 48,204,248,147, 63,253,212, 21, 64, 16,128,143,
-184,213, 0, 61,218,183,199,252,249,243,113,224,192,129,165, 49, 49, 49, 57,253,162,162,188,198, 40,184,203, 3,224,111, 12,128,
- 43,184, 60, 0,113,113, 73, 63,229,229,149, 29, 80, 40, 20, 98,199, 52,193,112, 0,185,124,147, 0,117, 29,208,231, 21,227,229,
- 43,227, 88,171,173,151,190,178, 18,149,215,175,129, 16, 6,148,178,168,173,173, 5,165, 20,148, 82,156, 59,241, 59, 44,102, 19,
-238, 26, 18,235,173, 13, 93,199,156,112, 0,204,253,178,209,236,253,178,209,117,130,254, 28, 83, 4,188,113,242,151,111,164,151,
-206, 22,168, 1,160,107,151, 46,248,190,158, 23,160,117,231,193, 50,220, 70, 12,249,161, 12, 5,247, 1, 3, 99,229, 40,123,122,
- 56,218,125,118, 16,167,181,122, 68,136, 9,202,181, 58, 8, 9,241,234, 1,224, 48,115,230,204, 58,103,110,217,178,133,222, 63,
-225, 62,108,221,188, 21, 27, 55,110,196, 27,139, 94,195, 46,205, 30, 8,132, 2, 68,117,140, 26, 93, 89,233,121,233,114, 98, 98,
-162, 38, 49, 49,145,236,216,177, 67, 58,110,220,184, 58,177, 0,187,119,239,198,153, 51,103,106,149, 74,101,123, 62,215,214,181,
-107, 87, 20, 21, 21,161, 79,159, 62,214,121,243,230,137,215,175, 95,143,176,176, 48,156, 60,121,242, 38,207,107, 81, 81, 17,186,
-242,124,206, 74,229,141,196,115, 10,133,226,241,123,238,185,231,173,199, 30,123, 44,172,160,160,160,121,109,109,237, 63,131,131,
-131, 31, 48, 26,141, 31, 40,149,202,239,121,202,251,197, 85,222, 3,207,174, 95,115,239,216, 73,228,223, 42,128,116,120, 16,239,
-174,120,133,106, 11, 79,166, 40,149,202, 44,111,178, 92,188,108,164,218, 98,169, 16, 7, 5,161,133, 88,140, 96,155,205,164,183,
-217,108,183,131,252,249,162,142, 2, 32,121, 76,121, 92,251,181,226,180,228, 49, 37, 55,165, 89,114,236,107,197, 15,213,181, 86,
-253,176,187, 90,221, 31, 25, 34,184, 71, 96,170, 13,181, 82,166,186,188,218,156,151,123,230,202,206, 82,173, 33, 71,242,152,242,
- 50, 86,174,116,251, 3, 53,250,214,154,180,167,231,200, 0,168, 89, 1, 55,205, 39,192,153,170,203,120,253,153, 20, 24, 12, 38,
- 84, 25,237, 49, 0,102, 38, 8, 99, 18, 61,167,217,125,109, 81, 50,217,177,109,136,253,229,182,113,150,179, 21,137,253, 9,166,
- 61,181, 12, 33, 33, 65,104, 17, 44,145, 1, 80, 23, 30, 59, 34,139,239,231, 57, 33,136,144, 90, 97, 38,118, 37, 0,132,192, 70,
-169, 93, 17,224, 18, 54, 16, 6, 66,150,133,149, 91,118,224, 69, 9,168, 48,134,195,104, 42,135, 88,200, 56,211,156, 89, 89,192,
- 98,161,176, 88, 41,106,140, 44,136,128,192, 6, 2, 11,123,195,117,239,150, 96, 89, 6, 12,177,129,216, 8, 40, 67,157,238,127,
-210,128,241,204, 73,122,238,121, 25, 89,185,242,164, 71, 11,239,247,220,223, 27,219,119,204,148, 82, 24,141, 70,244,239,223,255,
-114,116,116,244,164,243,231,207,247,216,184,113, 99, 62,128,135,178,179,179, 31,114, 61,249,253,247,223,215,188,244,210, 75, 50,
-173, 86,235,141, 32,156, 13,146,150,150,214,224, 73,143, 62,241, 4, 0,223, 18, 3,113, 89,247,234, 99,104,239,222, 62, 45, 43,
-236,215,179,231, 46, 87, 79, 70,122,122,250, 39, 19, 39, 78,180,158, 58,117, 74, 88, 92, 92,140,174, 45, 91,230, 70,133,132,240,
- 10, 80,188, 21,121, 0,234,145,251,213,156,156, 28,215, 24,143,163, 14, 69,128,111,198, 64,125,112,251,118,143,158,220,179, 55,
- 55, 60, 52,180, 69,149,174, 2, 86,171, 21,212,241, 30,232,174,150,161, 74,167, 3,165,148,143,245,111,127, 89,111,196,156, 48,
-142,229,128,140, 99,217,159, 51, 49, 80,225,249,243,252,149, 0,195,175,210,139,133,249, 78, 43,255,251, 44,251,242,191,214,209,
- 35,100, 3, 98, 39,106,110,223,240, 74,111, 86, 2,240, 57, 6,166,189,142, 43, 44,139, 1,171,243,145,159,216, 22,125,183, 94,
-133,144, 0,205, 69,254,173,152,157, 56,113, 34,217,171,217, 75,199, 36,140,197,230, 77,223,225,237,165,239, 99, 97,101, 37, 40,
-203, 98,195,134, 77, 40, 45, 45,125, 0,128, 87, 31,180, 59, 69, 0, 0, 38, 77,154,244, 11,128,106, 62,215, 18, 31, 31, 79, 46,
- 93,186, 68,143, 28, 57, 34, 30, 60,120, 48,198,142, 29, 11,181, 90,141,206,157, 59,195,100, 50, 97,244,232,209,160,148,178, 71,
-142, 28, 97, 68, 34,145,207, 25, 1, 21, 10, 69,159,176,176,176,229, 83,167, 78, 21,157, 56,113,162,133,201,100,106, 40, 48,144,
-175,188, 65, 81, 3,167,172, 25, 56,106, 42,249, 34, 7,168, 50, 2,230,115, 59, 88,109,161,186,126, 96,160, 39,101,130, 83, 2,
-132,218,202, 74,171,216, 98,129, 65, 44,134,208,158,245,135,253,163,123, 29,151, 7,192,213,242,119,183,207,173, 43,213,133,252,
-185,237,223,139,191, 86,148, 20, 95,175,201, 5,208,222,241,242,154, 0,148, 2, 40,146, 60,166,244,234,226, 28, 60,224, 65,205,
-241,223, 74,100, 54,218, 76,237,250,114,212,232,171, 32, 16,134, 1, 76, 8,254,245, 1,255, 20,147,137, 19,250,145,119,230, 60,
- 32, 5, 99, 80,187, 54,111,179,102, 97,176, 89,116, 0,213,163,248, 96, 38,153, 57, 45,209,171, 44, 11, 4, 0,165,118,162,134,
- 0, 98,234, 80, 4, 28,228,111,207, 1, 8,128,231,218,205,228,212, 87, 73,230,199,111, 80,171, 69, 11,161, 99, 97, 47,165, 20,
- 54, 43, 69,173, 5,168,170,182,194, 2, 10, 43,101, 32, 20, 17, 44,121,235,147, 6,239,123,246,108,123,144,214,154,213,103, 40,
-177,216,173,127, 10,128, 82, 2, 80,135,197, 64, 5, 32, 2, 22, 44, 43,196, 11, 11,198,241,106,195,217,111,207,150,157, 63,123,
-222, 19, 1,139, 96, 95,170,225,137,157, 88, 0, 48,153, 76,208,233,116,186,176,176, 48,196,198,198,254, 58,116,232,208,160,107,
-215,174,225,236,217,179,246,229, 97, 44, 43,221,180,105,147,218,161, 4,168,121, 40, 1,150,164,196,196,164,174,253,251,219,238,
-233,213, 75,239,232,163, 38,212, 93, 17,137,164, 68,251,179,237,202, 35, 41,208,139, 47,190, 40, 3,128, 33, 61,123,222,116, 44,
-118,192,128, 70, 17, 68,255,222,189, 63, 99, 24,198,118,242,167,159, 66,219,182,109,123,189,223,240,225,107,110,167, 70,239,134,
-212,245,177,177,177,174,209,214,206,117,172, 62, 40, 1, 39, 6,141, 29, 51,108,243,127,190,216, 20,221,173,107, 31,147,169, 22,
- 54,139, 21, 44,203,162,121, 68, 4, 42,181, 90, 12,146,203,101, 60,172,127, 0,168,120,243,133,103,219, 0, 48, 23,158, 63, 47,
-230,230,255, 15, 29,249, 13,247,203, 70,179,139,211, 63,246,150, 28,200,137,152,246, 58,122,242,212, 73,217,222,157,223,215,113,
-241,143, 25,255,144,140,105, 17,223,168,231,218, 80,128,159,251,253,252, 57,108,200, 15,101,192, 15,207, 56,183,239,250,254,198,
- 18,224, 74,139,255,235,195,199, 72,199,144,175, 74,190,186,111,220,132,196,237, 79, 62, 62,107,255,221, 3,250,223,187,249,251,
- 45,200,253,229, 48, 82, 83, 83,183,173,108,192, 64,243,162, 8,204,250,246,219,111,255,243,237,183,223,198, 37, 38, 38,242,190,
-184,113,227,198,141,217,181,107,215,222,173, 91,183, 34, 58, 58, 26, 9, 9, 9, 8, 11, 11, 59, 93, 89, 89, 25,115,252,248,113,
- 20, 21, 21, 49, 34,145, 8,227,198,141,147,251,122,159,142,192,192,165, 91,182,108,105, 48, 48,208, 71,121, 63, 43, 20,138,247,
-190,203,126,240, 21, 99,212, 12, 24,127,122,149,189,180,111,201,227,190,202,115, 40, 1,181,197,101,101,162, 23, 78,159,190,104,
- 51, 24,152, 95, 25, 70,212, 78, 32,184,162, 80, 40,110,203, 20,128,187,108,128,222,166, 0,220, 66,242,152, 82, 15,224, 55,199,
-159, 95,120,252,241,103, 52,105,105, 47,201, 50,148,111,171,163,186,244, 0, 96,130, 40, 72,130,139,151,171, 48,122,226, 76,226,
-187,188, 7, 53,119,245,138,193,234, 85,223, 0,108, 49, 0, 33,172,181, 70, 68,181, 15,147,117,110, 97,229,255,242,219, 88, 8,
- 25, 22, 22, 34,132,136, 90,111, 40, 2,176, 2,212, 6,190,129, 97,174, 72,125,246, 13, 2, 0,139, 95,158, 67, 69, 66,187,181,
-111,101,237, 46,243,138,106, 10,155, 21, 16, 8, 89,124,246, 41, 63,165,231,137,100,123,106,228, 85, 95,156,162,224,114,194, 51,
- 0, 75,236,238,254,249, 11, 30,240,233, 34, 43,107, 42, 53, 17,109, 35, 26,219,191, 24,192,190,138,194,104, 52,194,102,179,161,
-170,170, 10, 2,129, 0, 54,155, 13,237,218,181,131,197, 98,129, 82,169, 84,215,243, 4,168,189,213, 12, 24,212,191,127, 54, 0,
- 52, 69,198, 63, 0,136, 36, 68, 3, 0,145, 3, 6,220, 18, 51,175,111,207,158, 25,141, 17,240,194,226,197,117, 86, 73, 44,120,
-227,141, 58,158, 1, 95,230,254,221,144,185,222,211,106, 0, 31,210, 1,159,124,112,246,172,126, 0, 4, 39,115,114, 44,181, 6,
- 35, 88,155, 13,189, 99, 99,101,237, 99,250,160,235,128, 62,252,222, 57, 74,166,238,252, 97,155,115,115,120,159,104,231,231,157,
- 63,108,187,105,219, 83,104,252,233,203, 17,132,105, 17,143,177,227,137,236,196,201,179,184, 92,124, 84, 13, 0,123,119,126,175,
-110,219,249,172,172,255,176,127,248,172, 4, 76,153, 50, 5,190,166,247,181, 17,207,121,183, 75, 38,181,195, 15,151,106,111,249,
-128, 63,115,230,204, 31, 0, 48, 5, 5, 5,236,158,188, 28,180,108,213, 18,141,169,207,145,152,152,248, 69, 98, 98,226, 87,240,
-158,222,185, 14,154, 55,111,174,126,244,209, 71, 73,110,110, 46, 61,123,246, 44,242,243,243, 81, 93, 93, 29,211, 20,181, 0, 28,
-100,251,127, 10,133, 66,148,155,155,219,223,108, 54,191,234, 58,151,239,167,188, 69, 10,197, 63, 68, 97,221,191,154, 95,121,118,
-215,140, 70,200,179,174, 63,116,232, 1, 0, 9, 0,126, 6,203, 86, 3,184, 58,109,225, 55, 72, 13,123, 4,153,149,127,140, 18,
-192,173, 2,112,183,223, 47, 5,192,215,169,132, 6, 93, 85,143, 60,161,217,182,243, 12,121,120, 66, 8,109, 19,213, 9,218,106,
- 43, 70, 79,120,220,239,142, 16,127, 79, 47, 18,127,207, 43, 80, 40, 94,167,192, 85, 68, 52, 23,162,115, 36,235,211, 75, 63,228,
-159, 11,110, 89,150,176, 55,223, 91, 73, 0, 96,238,188,103,168,217,104, 1, 11,251,178,185,229,159, 46,247,235, 55, 83,102,217,
-107, 6,172,250,207, 73,202, 82, 1, 94,126,233,161,219,153,225, 76,236,234,198, 54,153, 76, 48,155,205, 78, 34,227, 8, 44, 80,
- 37,208,139, 11,210,135,244,195,126,194,188,112, 97, 82,144,195,131,210,216, 20,100, 20,128,181,215,232,209,117,174,185,107,251,
-118,188, 5, 4,177, 38,205, 19, 19,125, 54,252, 80,191, 20,112, 29,251,187, 69,156,166,239,208, 56,244, 29,138, 70,183,165,183,
-194, 62,245,117, 96, 43, 9,130,145,241,188, 34,245,108,181, 21, 49,205,249, 12,145, 77,210, 21,232,144, 33, 67,154,178, 79, 89,
-252,253, 98,124,124, 60,241,150,136,173, 17,164,253,174, 66,161,248,206, 53, 54,160,145,242,254,165, 80, 40,214,185,198, 6,248,
- 33,195, 2,160, 2, 64,189,184,129,107,127, 24,249,123, 34,123,183, 61,110,224,192,129,119,106,249,200, 0,254, 68,232,209,163,
- 7, 10, 11, 11, 3, 13, 17, 64, 0, 1, 4,240, 39, 1, 19,104,130, 0,154, 2, 1,242, 15, 32,128, 0, 2, 8, 40, 0, 1, 4,
- 16, 64, 0, 1, 4, 16, 64, 64, 1, 8, 32,128, 0, 2, 8, 32,128, 0, 2, 10, 64, 0, 1, 4, 16, 64, 0, 1, 4,112,219, 81,
- 39, 52,117,206,156, 57,126, 71,143,186,203,100, 23,144, 23,144, 23,144,119,103,200, 83, 40, 20, 84,169,108,120,217,105,160,253,
- 2,242, 2,242,254, 90,242,124, 86, 0,184,129,194, 87, 33,158, 6,150,166,150, 23,192,157, 9,111, 4, 19,192,157,249, 28,124,
- 60, 63, 20,192, 61,251,247,239, 95, 34, 16, 8,134, 7, 5, 5,193, 96, 48, 28,188,247,222,123, 23, 1,200, 7, 96,184, 19,218,
- 64,165, 82, 73,179,178,178,212,127,197,113,229,216,177, 99,200,207,207,247,122, 94, 94, 94, 30, 61,118,236, 24, 50, 51, 51, 73,
-191,126,253, 26, 45,143,195,208,161, 67,225, 73, 94, 0,127, 98, 15, 0, 7, 95,210,147,242, 73,148,227, 78, 94, 67,229, 97,253,
- 73,188,243, 87, 31,208,249,158, 59,126,252,120,217, 35,143, 60,162,225, 43, 51, 42,234,230,210,203,165,165,165,117,182,147,146,
-146, 32,151,203, 9, 31,121,183, 82, 9, 24, 63,126, 60, 5,128,157, 59,119,146, 59, 65,158, 94,175, 31,187,105,211, 38,213,233,
-211,167, 1, 0,209,209,209, 15,166,164,164,108,241,247,249,186,246,123, 74,169,243,253,224,246,115,239, 10, 33, 4, 25, 25, 25,
-196,147,242,204,247, 57,248,248,188,250, 28, 59,118,108, 83, 85, 85, 85,175, 46, 93,186,224,250,245,235,168,173,173, 5,128,225,
-155, 54,109, 82,135,134,134,158, 76, 76, 76,124, 24,128,199, 82,146, 35, 70,140,240,201, 32, 56,112,224,128, 12, 60, 83, 61,115,
-200,202,202, 82, 39, 37, 37,201,228,114,185,198,215,231,145,154,154,234,211,245, 77,153, 50,133,247,251,193,161, 75, 23,123, 5,
-220,234,234,106,152, 76, 38,174, 63,241,122,223,242,243,243,241,223,255,122,206, 80,107, 50,153,232,240,225,195,209,187,119,111,
-172, 93,187,182,204,100, 50,117,110,104, 93,120,126,126, 62,102,204,152,193,235, 94,175, 94,189,138, 37, 75,150,224, 78,206,109,
- 31,192, 13,212, 79, 6,116, 43, 19, 1, 5,172,216, 91,136,239, 51,188,167, 52,126,120,206, 14,159,100,170,213, 55, 12,164,211,
-167, 79, 35, 52, 52,212, 57, 8,185,180, 7, 31,107,139,214,223,174, 63,128,169, 84, 42,154,149,149,229,183, 5,182,110,221, 58,
-233,248,241,227, 27,148,223, 24,164,165,165,209, 81,163, 70,201,166, 79,159,238, 19, 89,108,218,180, 73,213,166, 77, 27,204,156,
- 57, 19, 58,157,142, 77, 79, 79,223,172,211,233,166, 69, 68, 68,248,148, 69,140, 16,130, 31,126,248,193,185,157,152,152,136, 29,
- 59,118,120,220,246,134,250, 74,128, 66,161,160,177,177,177,200,204,204,164, 92, 98, 38, 95,201,191,178,178, 50,183,123,247,238,
- 45, 0, 64, 34,145, 32, 56, 56, 24,101,101,101,168,168,168, 64, 88, 88, 24,202,202,202,122,237,216,177, 35, 63, 49, 49,177, 39,
-128, 43,158,132,245,235,215, 15, 73, 73, 73,136,142,190,145,245,111,233,210,165,117,206, 89,184,112, 33,103,201,170,167, 79,159,
-238,243,243,246,135,252, 57,172, 88,177,162,161, 67,206, 90, 5,254, 34, 52, 52, 20, 39, 78,156,128, 72, 36,130,217,108,198,142,
- 29, 59, 80, 88, 88,136,151, 95,126,217, 39, 57, 87,235, 21,201,122,240,193, 7, 5, 0,228, 63,254,248,227,142,209,163, 71, 95,
-125,248,225,135,219,170, 84, 42, 8, 4,130,214,225,225,225, 2, 95,100, 53,132,243,231,207, 7, 72,226, 79, 74,254,220, 62,175,
-181, 0,254,172, 88,181,106,149, 52, 37, 37, 69,211, 88, 57,127, 22, 87,118,212,144,119,110, 88,237, 5,175,250, 37, 67,167,211,
-193, 96, 48, 56, 45,144,204,204, 76, 87, 75,136,175,181,117,211,182, 92, 46,199,238,221,187, 41, 33,228,166,227,254,224,199, 31,
-127, 84,191,248,226,139,200,206,206,198,228,201,147,155,164,253,118,238,220, 73,246,236,217, 67, 41,165,200,201,201, 81,231,228,
-228,248,164,160,156, 62,125, 26, 51,103,206,100, 1, 48, 98,177,152,137,137,137, 65,122,122,250,122, 0,235,163,163,163, 39,164,
-164,164,108,231, 35,231, 86, 20, 3,226,148,128,204,204, 76,202,165, 1,230,254, 87, 40, 20, 52, 41, 41,201,151,123, 13,213,233,
-116,155, 36, 18, 73, 11, 0,120,250,233,167, 81, 91, 91,139,140,140, 12, 4, 7, 7, 59,203,102, 11, 4, 2, 84, 86, 86,182, 0,
-144, 14,224, 31,158, 4,114,228, 94, 84, 84,116,211,190,166, 64, 82, 82,146,204,113,159, 50,127, 21,129,231,159,127,222,249,121,
-249,242,229,220, 71,166,222,126,222, 10, 1,231, 53,121,245,213, 87, 17, 26, 26,138,236,236,108,140, 30, 61,218, 47,242,175,143,
-145, 35, 71, 2,246, 44,141,255,124,252,241,199,209,163, 71,143,182, 59,118,236, 64,121,121, 57, 87,114,215,236,229, 93,104,234,
-238, 39,157, 48, 97,130,122,219,182,109,238,188, 55,210, 49, 99,198,168, 9, 33,216,179,103, 79,192,221,123,139,201, 63,117,225,
-251, 0,128,204,165, 47,185, 85, 2,254, 16, 5, 32, 51, 51,211,221,131,166, 13,237,247,231, 55, 14, 29, 58,164, 6, 32,107,172,
- 18, 48, 99,198,140,191,205,124,182,193, 96,184,201,234,247,135,104, 56, 98,153, 60,121, 50, 18, 18, 18, 8, 0,100,103,103, 55,
-201, 53,174, 91,183, 78,234,176,232, 72, 89, 89,153, 52, 43, 43, 75, 93, 86, 86, 38,245,213, 98,119,135,177, 99,199,146,177, 99,
-199, 98,221,186,117,210,156,156, 28,245,186,117,235,124,146,171,211,233,172, 17, 17, 17,226, 77,155, 54,193,225, 13,168,213,233,
-116, 76,122,122,250, 54,157, 78, 55, 46, 34, 34, 98,247,237,124,190, 28,233,187,246,101,133, 66, 65, 57, 37,141, 39,238, 41, 44,
- 44,236,213,191,127,127,204,154, 53, 11,149,149,149, 40, 47, 47,135, 72, 36,130, 80, 40,132, 80, 40,132, 72, 36, 66,112,112, 48,
-180, 90, 45, 84, 42,213,116,185, 92,254,172, 55,161, 69, 69, 69,117,148, 67, 78, 1,224, 60, 1,177,177,177,190, 92,163, 59,235,
- 95,150,149,149,165,110,140,231,201, 5,214, 6,198, 74,222,222,128,243,231,207, 35, 39, 39, 7, 19, 38, 76, 64,151, 46, 93,208,
-170, 85, 43,228,228,228,224,229,151, 95,118,122,223, 4, 2,129,207, 23, 54,114,228, 72, 44, 90,180, 8, 75,150, 44,105,159,146,
-146, 50,245,177,199, 30, 67, 66, 66, 2, 0, 64, 32, 16,204,108,217,178,229, 22,165, 82,105,241, 84, 12,104,221,186,117,188,188,
- 0,165,165,165,152, 54,109, 26, 63, 3, 37, 42, 10,169,169,169,234,162,162, 34,168, 84, 42,174,253,165,169,169,169,106, 78,129,
- 14,224,214,130, 35,127,238, 51,167, 4,252,225, 30,128,134,230,177,253, 9, 16,188,213, 74,192,253,247,223,223,104, 79,128, 47,
-247,229,203,111, 60,250,204, 78,108,250,100,124,147,180, 21,247, 2, 54, 84,169,234,224,193,131,141, 86, 12,154,226,249,254,248,
-227,143,106,206,234,159, 62,125,186,230,199, 31,127, 68,155, 54,109,212,104,162,196,233,156,220,156,156, 28,228,228,228,120,117,
- 55,235,245,250,251, 55,109,218,180, 13, 0,210,211,211,197,209,209,209, 72, 73, 73,225, 14, 75,126,251,205, 94, 47, 43, 61, 61,
-125, 87,116,116,244,195, 41, 41, 41, 94,235,147, 39, 38, 38,214,137,137,185,239,190,251,234,120, 6,248,184,253,221, 40,221,212,
- 93,255,226,158,139,235,116,128, 39,236,216,177, 99, 73, 76, 76, 12, 0,224,204,153, 51,160,148,226,212,169, 83,206,186, 15, 66,
-161, 16,132, 16,216,108, 54, 24, 12, 6,124,251,237,183,144,203,229, 94,171, 46,185,146,127, 82, 82,146, 91,229,197,117,138,192,
- 31, 37, 64, 46,151, 19,133, 66, 65, 27,235, 13,104,138,113,210, 98,177, 96,240,224,193,208,104, 52, 24, 50,100, 8,244,122,189,
-115,106, 71,163,209, 96,252,248,241,176,114, 37,200,125,179,252,177,100,201,146, 14, 41, 41, 41, 23,191,248,226, 11,231,177, 14,
- 29, 58, 96,217,178,101,255,229, 75,216, 77, 12,205,225,195,135, 17, 27, 27,139,232,232,104, 12, 30, 60,152, 30, 57,114, 68,198,
-145,127, 81, 81, 17, 52, 26, 13,159, 24,149,161, 0,158, 1,240, 79,165, 82,105,243,112,222, 4, 0, 81, 0,190, 85, 42,149,215,
- 2,212,255, 7,118,108, 62,248, 35,131, 0,155, 66, 9,232,218,181,107,163, 60, 1,220, 32,187,118,237, 90,183,199,183,111,223,
-142,181,107,215,250,101,153,228,157,235,131,184,110, 39,252,118,251,115,112,157,243, 87,169, 84,144,203,229, 78,183,255,193,131,
- 7,209,169, 83,167, 38, 81,250, 26, 99,125,113,214,255,245,235,215,157,117,230,165, 82,169,172, 41,189, 0, 28, 70,143, 30, 45,
-203,201,201, 81,123, 59,111,211,166, 77,219,184,185,127,189, 94,143,165, 75,151,162,166,166, 6, 34,145, 8, 65, 65, 65, 56,119,
-238, 28,222,121,231, 29,232,116, 58,164,167,167,127,167,211,233,198, 68, 68, 68,168,189,144,108, 29,178,247, 22, 19,208, 20,138,
-231,225,195,135,235,156,223, 80,144, 88,100,100,228,112,147,201, 4,171,213,138,131, 7, 15, 66, 32, 16,192,108, 54,195,104, 52,
-130,101, 89,231,123,108,177, 88, 96, 50,153,184,119,218,107,152,120, 67, 46,255,133, 11, 23, 58,189, 0,209,209,209, 40, 43, 43,
-107,180, 34,202,173, 10,240, 33,118, 68, 11, 32,210,221, 1,151,233, 0,159,144,158,158,142, 23, 95,124, 17,131, 6, 13,114,122,
- 64,184,244,217,131, 6, 13,194,169, 83,167,208,166, 77, 27,159,100,238,219,183, 15, 35, 71,142,236,146,146,146,114,158, 35,127,
-199,248, 25,181, 97,195,134, 75,245, 3,122,249, 42, 20, 13,253,150,143,222, 39,114,248,240, 97,105,106,106,170,122,200,144, 33,
- 24, 50,100,136, 26, 0, 78,157, 58,133,156,156, 28,190,207,225, 23, 0,193, 0,214, 43, 20,138,105,238,148, 0,133, 66,241, 12,
-128,143, 29,155,139, 20, 10, 69, 47,165,210,123,137,250,191, 50,184,106,128,153, 75, 95,186,105, 10,224, 47, 27, 3,112, 39, 42,
- 1, 51,102,204,160,139, 22, 45,186,201, 21,232, 15,249, 63,250, 76,211,206,211,233,245,250,155,130,252, 56,171, 95, 36, 18,225,
-202,149, 43,183,149,252, 93,173,127, 87,203,109,218,180,105, 26,141, 70,211,228, 94, 0, 95, 60, 39, 51,103,206, 52, 0, 8, 9,
- 13, 13,197,107,175,189, 6,145, 72,228, 60,158,156,156, 12, 0,136,136,136,192,196,137, 19,177,127,255,254,189, 19, 39, 78,252,
- 67,174,211,181,189, 93,231,255,221, 33, 54, 54,182, 78,165,198,134,214, 17,155,205,102,104,181, 90,212,214,214, 34, 44, 44, 12,
- 65, 65, 65,176, 90,173,160,148,194,102,179,193,108, 54,195, 98,177,192,102,179,185, 42,244,215, 61, 93,103, 81, 81, 81, 29,235,
-190,254,116, 64,253, 0,193,198, 66, 46,151,107,124,140, 69,145, 52,116,160,129,216, 0,175,120,231,157,119, 48, 97,194, 4,116,
-237,218, 21, 33, 33, 33,144, 74,165,208,106,181, 8, 13, 13,133, 78,167,195,234,213,171,193, 48,190,197, 23,142, 28, 57,178, 99,
- 74, 74,202,249,121,243,230, 97,243,230,205,120,232,161,135, 0,160,221,190,125,251,174,250,211, 78, 14,133, 2,220,152,197,141,
- 85,190,146,191,171, 39, 96,195,134, 13,178,169, 83,167,170, 1, 96,195,134, 13,178,202,202, 74,141, 15,253,217,172, 80, 40,102,
- 0, 88,235, 65, 9, 72,112,249,220, 25, 64,127,216,151,164, 6,224, 66,252, 13,225, 47,153, 9,112,216,176, 97,178,166, 8, 8,
-244,215, 74,119, 29,144,151, 44, 89,210,104,242,231, 48,120,208, 64,236,217,171,198,186,189, 33, 78,165, 32,239, 92,159, 70,221,
- 99,108,108, 44,138,138,138,144,157,157,141, 78,157, 58, 97,205,154, 53,126, 88, 93, 84,202,125, 74, 75, 75,107, 18,242,231,172,
-255,178,178, 50, 89,253, 99,163, 70, 43, 88,140, 99, 0, 0, 32, 0, 73, 68, 65, 84,141,146,101,103,103, 59,207,105, 10,228,228,
-228,168,249,122,159,116, 58,221,239,176,207, 11,179, 27, 54,108,192,234,213,171, 1, 0,235,215,175,135, 78,167,227, 78,179,158,
- 58,117, 10,173, 91,183,190, 45,239,128,107,180,191, 59,229,140,111,153,230,162,162,162,131, 54,155, 13, 58,157, 14,215,175, 95,
-119, 6,142, 26, 12, 6,212,212,212,160,170,170, 10,149,149,149, 48, 26,141, 48,153, 76,176,217,108, 0,144,235, 73,102,125,114,
-119, 23, 72, 90,127, 85, 0, 95,168, 84, 42,105,253,123, 86,169, 84,190,246,147,144,166,126, 30,107,214,172,129, 84, 42, 69, 72,
- 72, 8, 78,156, 56, 1,141, 70,131,208,208, 80,188,254,250,235,216,191,127, 63, 94,126,249,101,159, 20,128,145, 35, 71,182, 75,
- 73, 73,185, 48,109,218, 52,124,243,205, 55, 28,249,119, 0,112,213,147, 37,207, 71, 9, 88,178,100, 73, 83,144, 63, 0, 72, 57,
-242, 7,128,169, 83,167,170, 71,143, 30, 77,125, 28, 67,205, 0,184,117,138,235, 21, 10, 69,253, 64,137, 51, 46,159, 75, 0, 28,
- 13,208,190,203, 56,176,240,253, 58,177, 0,245,241,151, 9, 2,108,106,242,119,172,119,109,180,229,198, 77, 7,204,152, 49,195,
-111,242,127,244,153,157, 24, 60,232,134,235,102,211, 55,223, 98,211, 55,246,207,123,246,170,129, 49, 50, 0,190, 45, 3, 84, 40,
- 20,136,141,141, 5, 96, 15, 6, 60,124,248, 48,118,239,182,199,172, 29, 61,122, 20,163, 71,143,246, 65, 26,209, 0, 55, 2,255,
- 26, 27,169,191,110,221, 58,169, 59,235,191, 62,154,202, 11,192, 41, 18, 82,169, 84,230,237,220,232,232,232,113,233,233,233,187,
- 38, 78,156,136, 83,167, 78,225,244,233,211,120,231,157,119,172, 0,132, 6,131, 1,233,233,233,112, 28, 19, 22, 23, 23,227,241,
-199, 31,247, 42,243, 86,196, 0,112,150,116, 86, 86,150,211,139,197, 17, 35,247,220,249, 32, 38, 38,166,192, 96, 48, 12, 55,155,
-205,184,118,237, 26,130,130,130, 32, 20, 10,157, 30, 0,189, 94, 15,131,193, 0,147,201,132,202,202, 74,110, 62,255,162, 39,153,
- 28,185,115,211, 0,177,177,177,168,239,173,112, 23, 23,192,135,252,185, 28, 0,245,247, 53,166,127,112, 86,191, 27,139,223,202,
-119, 12, 45, 44, 44,196,169, 83,167, 96, 48, 24, 16, 31, 31, 15,131,193,128,172,172, 44, 76,157, 58, 21,155, 55,111,134, 64, 32,
-224,173, 0,196,196,196,116,228,200, 63, 63, 63, 31,111,188,241, 6, 0,116,158, 49, 99,198,229,181,107,215,146,125,251,246, 53,
-106, 12,229, 60, 1,141, 33,255,216,216, 88,202,245,179, 35, 71,142,160,160,160, 64,150,154,154,170,238,217,179, 39, 68, 34, 17,
-117, 9, 12,244,219, 19,160, 80, 40,230, 2,152, 0, 96, 50,128, 54,176,199, 0,252,173,221,255,192,141, 85, 0,238,130, 0,111,
-203, 42,128, 63, 42, 8,240, 78, 35,255,250, 74, 64, 99, 44,127, 79,219,123,246,170,253,121, 65,111,152, 59, 33, 33,232,221,187,
-119,157,227,135, 14, 29,242, 73,222,228,201,147,157, 10, 64,118,118, 54,178,179,179,235,172, 10,240,229,254,215,172, 89,163, 6,
-128, 29, 59,118,184, 37,207,233,211,167,107,214,172, 89, 3,128,223, 18,166,134,146,254,112,138, 6,165, 20,163, 71,143,150, 77,
-155, 54,205,107,223, 73, 73, 73,217,173,213,106,199, 30, 56,112, 96, 79, 76, 76, 12, 78,159, 62, 13,157, 78, 39,140,136,136, 64,
- 74, 74, 10,180, 90,109,241,129, 3, 7,186,196,196,196, 96,230,204,153, 94,239,215, 93, 30, 0,127, 99, 0,234,191, 91, 74,165,
-146,200,229,114,168, 84, 42, 90,127, 90,134,239,243,136,139,139,123, 69,163,209, 60,103,179,217, 80, 85, 85, 5,139,197,226, 84,
- 86,106,107,107, 65, 41,173, 19, 24, 40,151,203, 31,115, 16, 35,111,200,229,114,200,229,242, 58,203, 2,125,157, 2,112, 37,122,
-185, 92,174,169, 63,182,184, 42, 5, 77, 8,222,227, 39,183,212,239,133, 23, 94,128, 70,163,129, 76, 38, 67, 97, 97, 33,154, 53,
-107,134,146,146, 18,222, 10,192,161, 67,135, 72, 74, 74,202,133,199, 31,127, 28,251,246,237,195,235,175,191, 14, 0, 81, 51,102,
-204,184,212, 20,228,239,170, 4, 52,198,242,231,198,151,162,162, 34, 20, 20, 20, 16,135, 33, 40, 75, 77, 77, 85, 71, 71, 71, 67,
- 42,149, 82, 62,129,128,245,148,128,105, 0,214, 59,148,128,131, 0, 20, 0,164, 74,165,242, 10, 2,104,186, 14,220,212,217,248,
-220, 5,252, 44, 93,186,180,193,253,183,147,252,103,204,152,113, 75, 82,134, 54, 70,230,133,139,222,251,119,112,176,111, 94, 75,
- 79,243,195,254, 64, 46,151,203, 18, 18, 18, 52,123,246,236,161, 27, 55,110,172,163, 8,212, 39, 37,190, 50,211,210,210, 26,212,
-108,184,164, 36,190, 36, 6,106, 72,225,148,201,100,188,200,159, 67,100,100,164,115, 94,255,196,137, 19,255, 72, 79, 79,255, 47,
-231, 17, 40, 46, 46,238,242,234,171,175,202, 8, 33,188,228,221,138, 60, 0,245,219,217,221,252,183, 15, 74,169,126,244,232,209,
-139,183,111,223,254,166,213,106, 69, 69, 69,133, 51, 6, 0, 0,174, 93,187,134,138,138, 10, 80, 74, 57,171,221,167,201,118,110,
-254,191,254,178,191,250,113, 2,124,201,223,245, 57,223,105, 75,121, 57, 37,224,165,151, 94, 66, 78, 78, 14, 38, 78,156,136,247,
-222,123, 15, 11, 22, 44,128, 80, 40,132, 68, 34,241,246, 92, 9,165,148,157, 53,107, 22,254,251,223,255, 98,213,170, 85, 0,208,
-105,223,190,125,151, 28, 22,187, 95,157,201,101,218,170,201, 80, 90, 90, 10, 55,121, 0, 52,153,153,153,178, 49, 99,198,168,253,
- 89,242,232,176,250,167, 1,216, 10, 96, 46,128,184, 0,249, 55, 12,119, 65,128,188, 20, 0, 95,146,114,248, 75,216, 77,141,166,
- 32,255, 59,113,208,152, 59,119,174,236,228,201,147, 77, 42,211, 97, 13,169,155, 82, 38, 71,120,220,218,122, 0,206,100, 64, 44,
-203, 98,211,166, 77,188,149,128, 23, 95,124,145,187,206,155, 98, 0, 24,134, 1,203,178,248,215,191,254,165,230, 75,158,158,228,
- 53,118, 37, 65, 74, 74,202,255,180, 90,237,181, 3, 7, 14,236,224,107,245,223,106,111, 91,253,246,117,231, 98,247, 69, 9, 32,
-132,188, 53, 97,194,132,236,181,107,215, 30, 23,139,197,224, 86, 5,176, 44,139,240,240,112,232,116, 58, 46,133,109, 8, 0, 27,
- 95,131,192, 53,248,239,240,225,195,144,203,229,117,198, 19,111,227, 80, 81, 81, 17, 45, 42, 42,146,213,119,241, 55,114,201, 31,
-128, 6,221,253,214,229,203,151, 75, 0,152, 97,143,159,226,254,124, 82, 2, 92, 19,255, 60,245,212, 83,206,207, 85, 85, 85, 94,
- 95,179,184,184, 56,210,183,111, 95,250,213, 87, 95, 61,188,126,253,250,239, 57,178, 93,191,126, 61,124,141,250,231,112,233,210,
- 37,103, 74,226, 38,130,102,219,182,109, 13,245, 41,205,222,189,123,125,170, 85,225,225,240,101,119,217, 74,255,238, 53, 73,184,
- 85, 0,238,136,159,215, 42,128,166, 38,245,134,228,221, 41,202,195,157,220,113,250,244,233,163,233,211,167, 79,147,202,116, 12,
-142,183,252, 94, 93,221,255,245, 95,234,134,150,157, 57,174,143,207,181, 17, 31,238,247,150,222,107,100,100,228,206,198, 68,250,
- 55,101, 12,128,187, 62,236,201,219,227, 67,159, 63, 49, 99,198,140,102,187,118,237,122,183,164,164,228, 57,163,209, 8,155,205,
-134,129, 3, 7, 98,200,144, 33,233,114,185,124, 33, 31,242, 7,128,188,188, 60,231,103,215, 88,147,188,188,188,155,182, 61, 33,
- 58, 58,154, 56,188, 4, 50, 0,106, 78,153,112,153, 10,240,249,153, 76,153, 50,165,161, 67, 66,151,241, 82,124, 59,198, 21,165,
- 82,201, 30, 59,118, 12, 31,127,252, 49, 1,192, 43, 41,207,179,207,122,206,201, 52,116,232, 80, 76,154, 52,137,247, 53,120,147,
- 23,192,157,167, 4, 52, 68,254,110, 21,128,166, 38,193, 64,133,184, 0,220,245, 1,127,203, 87,254, 29,218,230, 14,254, 13,253,
-184,113,227,230,194,238,126,245, 11, 7, 14, 28, 32,211,167, 79,191, 37, 10,173,191,153, 3,255, 72,101,177,177,232,215,175, 95,
-147, 22,227,105,106,121,127, 7,163,236,207,164, 4,120,181,162, 6, 14, 28, 24, 24,136, 3, 8, 32,128, 0, 2, 8,224,111, 6,
- 38,208, 4, 1, 4, 16, 64, 0, 1, 4, 16, 80, 0, 2, 8, 32,128, 0, 2, 8, 32,128,128, 2, 16, 64, 0, 1, 4, 16,192,159,
- 16, 86, 0,108,160, 25, 2,240, 4, 97,160, 9, 2, 8, 32,128, 0, 2, 99,123, 0,127,243, 78, 50,103,206, 28,191, 35, 46,221,
- 69,117,123,146,231,109,253,177,175,242,154,250,250, 2,242, 2,242,254,238,242,126,126,165,216,239,129,101,208,187, 93,112,171,
-229, 29,126,217,127,121,177,239,221, 44, 47, 45, 45,141, 0, 0, 33, 68,106,177, 88,112,238,220, 57,181,217,108,134, 80, 40,196,
-197,139, 23,241, 88, 88, 87,236, 44, 40,128,241,238, 78,136,139,139,147, 9, 4, 2, 80, 74, 53, 0,144,145,145,113,203,159, 7,
-119,125,174, 32,132,244, 1,208,230,248,241,227,219, 58,116,232,192,104,181, 90, 73,135, 14, 29,222, 9, 14, 14, 94, 9,224,146,
- 99, 57, 41,147,145,145, 97,243, 32,175,185,195, 91, 96, 32,132, 80, 0,184,112,236,127,159, 43, 70,150,164,172, 43,136, 57, 39,
-108, 51, 46,174, 89,243, 22, 53, 0, 40,165, 84, 8, 32, 34, 35, 35,227, 66,224,125,187,179,229,221, 82, 45,145,111,182, 45, 95,
-179,191,249,147, 50,183, 98,245, 55, 82, 97,100,152,250,236,233, 51,178,187,130,154, 33,244,217, 25,154, 59, 73,203,106, 40, 31,
-121, 96,137,203,237,199,230,205,155,165,219,183,111, 87,167,191, 98,223,254,110,223, 72,204,152, 49,131,215,115,217,151,123, 80,
-202, 16,162, 62,117,242, 36,116, 58, 29,186,116,233,130,102,205,155, 35, 49, 97, 28,239,231,186,123,247,238, 58, 47,110,118,118,
-182,199, 90, 10,217,217,217,126,247, 27,174, 80, 83, 70, 70, 70,227,250, 93,146,214,241,129, 2, 32, 64, 86,164,255,178, 98,151,
- 3,209, 79,216, 63, 23,173, 6, 14,207,111,252, 67,157,124,189,238,245,101,183,226,245, 53, 66, 8,213,235,245,178, 93,187,118,
-169,139,138,138,144, 36,106,137,118,157, 90,163, 86,111, 68,176,193,138, 17, 11,158,196,168,137, 83,177,245,139, 12,108,217,179,
- 71, 61,110,220, 56,217, 29,208,133, 79,219,108,182,246, 69, 69, 69,236,128, 1, 3,196, 49, 49, 49, 56,114,228,200, 43,181,181,
-181, 19,122,244,232, 33, 39,132,104, 41,165,222,166, 2,170, 93, 55,172, 86, 43,243,107,193,207, 61, 58,206, 26,132,127, 13,237,
-219, 58,111,215, 7, 27, 55, 29,149,254,210,163,223,152,247, 28,242, 46, 58, 20, 6, 54,224,105,248,155,185,137,124,205,223,239,
- 75, 30,124, 95,201,223,182,110,155, 52,190,117, 71, 53,137,138, 70, 97, 77, 5,218,119,232,170,182,176, 54,156,252,100, 13,202,
-186,180,150, 13,157,120, 63, 47, 69,224,176, 90, 65,123,117,231,182, 4,248,118, 23,139,125, 63, 81,164, 78, 3,122,117, 7,230,
- 47,105, 28,113,115, 5, 74, 26,155,157,204,157, 50,209, 84,114, 27,131,212,212, 84,138,197, 4,228,173,134,207,161,148, 2,139,
- 9,166,252,158,116,199,172,181,190, 65,254,212, 65,254,163,176,127,255,126,204,152, 49,195,235,119,239, 30,176,139,246,233, 51,
- 4, 89, 89,151,113, 40,215,158,176,230,244,201, 83, 0,128,217,255,252,134,158, 58, 51, 89, 22, 42,225,247, 92, 18, 18, 18,216,
-221,187,119, 51,217,217,217,216,187,119,175,199, 66, 76,254,164, 80,245,244,222,166, 41, 20, 52,195, 15,133,130, 75, 23,222,232,
- 84,198,209, 79,212, 45,182,211, 20, 10,128, 75, 59, 57,170, 19,242,194,217,179,103,161,217,184, 81,253,150,124, 10, 6,206,120,
- 10,226,182, 17,128,208,145,236,143,165, 0, 43, 2,107,162,184,255,137, 84,148,124,244, 62, 14, 30, 60,168, 30, 62,124,184,140,
-243, 2,220, 38,216, 24,134,105,211,170, 85, 43,104, 52, 26,225,128, 1, 3, 48,116,232, 80,230,202,149, 43,131,126,253,245,215,
- 99,119,223,125,247, 96, 66,200, 21, 7, 89, 51, 60,219,174,217,216, 49, 9,209,239, 45,219,204, 44, 76, 62,218, 34, 46,113,142,
- 44,110,152,106,228,130,143, 47, 62, 16,115,207,204, 88, 66, 72, 53,236, 49, 6, 76, 67,253,204, 53,177,149,183,126,212,104,133,
- 52,128, 58,168,159, 0,168, 62,252, 42, 6,228, 58,128, 12,156,217, 31,115, 70, 60,195,128,103,229,190,250, 74,128, 66,161,160,
-177,177,177,200,204,204,164,174,101, 75,125, 34,214,156,195,210,233,131,226,213, 98, 27, 11, 27, 40,130, 43, 66,112,229,218, 53,
- 92,169,174, 68,183,160,102, 48, 21, 94, 82, 31,218,178, 93, 54,140,135, 18,208,171, 59,112,242, 44, 3, 74, 37,176,145, 32, 60,
-156, 96,193,164,113, 70,220,136,161,105,124,170,132,198,146, 52, 71,252, 11, 23, 46, 68, 65, 65, 1, 0, 96,219, 73, 17,106, 45,
- 22,181,226,159, 67,124, 82, 4,124, 81,226, 28, 41, 94, 61, 63,151,197,246,195,177,177,177, 13,231,111, 95,236,223, 59,190,245,
-179,203,210, 45,191,190,225, 84,120, 38,244, 95, 44,123,240,153, 14,141, 30,112, 55,111,222, 44,221,182,109,155,154, 97, 24,188,
-240, 46,156,213,207,248,212,193,136,136,248, 81, 26, 55, 44, 13,192, 22,140, 28,249, 81,157, 99,211,167, 3,247,223, 15,220,143,
-108,245,242,143,192, 75, 9,224,200, 95,163,177,159, 58,117,234, 84,103, 97, 37, 95, 8,204,147,229,207,165,100,118,189,191,180,
- 52,255,200,191,201, 16,187, 12, 0,176, 98,197,138, 27, 10,192,224,116,224,200, 11,183,229,114,246,238,221,139,149,147, 82,209,
-109, 76, 2, 32, 48,129,136, 24, 16, 33, 3, 34, 16,129, 82, 2, 86,111, 5,181,217, 64,205, 54, 60,249,196, 83,120,234,245,185,
- 56,219,182,173,186,123,247,238,183,211, 19, 64, 10, 10, 10,226, 59,117,234, 36, 46, 42, 42, 66, 78, 78, 14, 78,158, 60,137,132,
-132, 4,196,199,199,183, 95,181,106,213,219, 83,166, 76,121,210, 7, 5, 64,176,127,207,215, 95, 62, 50,208,208,246,112,181, 0,
-211, 23,215,224,222, 65, 31,226,153,121, 83,133, 31, 44,172,232,182,240,131,181,211,163, 7, 77, 87,162,129, 52,200,174,132,238,
- 58,166,167,165,165, 81,119,251,155,186, 32, 92, 0,183,192, 3,224,250,144,214,237, 88, 91,209,253,174,238,225,138,183,158,100,
-231,140,120,198,151,106, 78, 36, 51, 51,147,114,105, 73,185,255, 21, 10, 5, 77, 74, 74,242,205,170,222,113, 80, 58, 62,166,175,
- 90, 92,107, 69,240, 7, 47,194,106, 48, 67,242,194, 18,132,137, 37,168, 21, 25,161,175, 53, 34, 24, 4,166, 11,101,234,202,202,
- 74, 89, 88, 88,152,199, 65,248,228, 89, 32,115, 61, 11,192,224,248, 3, 70,222,195, 96,210, 56, 2,215, 64,218,212,105, 64,230,
-122, 63, 60,166, 73, 73, 50,199,125,250,101,173,115,228,207, 17, 63, 0, 40,247, 91, 96, 52,235, 1, 0, 99, 23,238, 70,214,210,
- 4, 53, 0,222,242,207,190,127, 22, 34, 82,120,163, 35,144, 82,144, 86,189, 92,182,203,208,250,159,252, 82,132,146,183,236,228,
-239,169,198, 60, 81,100, 81,251, 57,252,172,255, 35,219, 44,210,204,205,207,170, 41, 40,222,155,247, 29,134, 73, 99,176,238,179,
-125,248,207,174, 52,245, 54, 5,197,156,127,188, 33, 27, 56,178,189, 95,138, 64, 77,177,130,142, 25, 0,100,125,117, 28,148, 82,
- 52,111,115,183,147,252, 87,174, 92,233,241,250,244,181, 42,105,106, 82,123, 53,240, 41,128,239,112,232, 16, 48,108,216,141,227,
-111,191,125,227,243,243,207,101,171, 51,254,211, 83,198,176,157, 60, 94, 39, 71,254,163, 71,143, 6,203,178,248,228,147, 79,154,
-236, 5, 87, 40, 20, 78,242,175,171, 20, 40,104, 70,134,231,119,142,153,162,171,163,254, 18,199, 63,108,146,155,243,136,227, 68,
- 98,255, 48, 96,192,205,115,236,204, 84,157,211, 43, 15, 0, 44,155,140,121,243,230, 57,143,207,155, 55, 15, 43, 86,172, 0,211,
- 99,214,141, 95,117,156,239, 78,158,112,170,251,235,179, 90,221,156,199,227,250,106,107,107,209,174, 75, 87,128, 53,131, 9, 2,
-136, 80, 0,107,117, 37,106,139,206,225,218,197, 82,116, 28, 46, 5, 17,135,131, 88,204,128,128,193,210, 57, 11,144,144,249, 6,
-230,207,159,223,164,131,178,183, 84,217, 46,100, 75, 40,165,225, 70,163,113,120,100,100, 36, 78,157, 58, 5,150,101,113,238,220,
- 57,172, 94,189, 26,189,123,247, 70, 84, 84,212, 76, 0, 79,214, 35,107,182, 33,242,166,148,182,234,194, 28,146,182,239,156, 40,
-174,200, 57,138, 74, 93, 16,254,187,213,138,237,121,255,195,115, 73,193, 66,161,129,141, 5,166, 55, 88, 7,225, 86, 20,183, 10,
-192, 55, 52,212,119,220,121, 6,132,124,137,159, 82, 10,217, 43,163,145,153,163, 12, 79,133, 2,191,124,117, 20, 24,225,124,173,
-120,129, 35,125,131, 97, 45, 0,130,218,218, 85,136,140, 84, 33, 43, 43, 11,190,164,241, 28, 26,212, 66,221,166,214, 6,201,226,
-167, 96,187,174,133,245,210,117, 8,197, 34,132, 16, 1, 66,137, 0,161, 2, 33, 34, 69, 18,232,170, 43,112,121,239, 65,117,216,
-164,251, 60, 14,116,238, 72,125,223, 79,172, 67, 1, 0,150, 45, 34,160, 4,176,135,199,248,222,193, 29,164, 44,203,202,202, 82,
-103,101,101,249, 53,133,224, 74,254, 16, 10, 80,116,217, 62,248,149, 92,173, 69,231,182, 18,244, 72,222,130,172,213, 19,213,124,
-221,235, 34, 82, 8, 33, 41,133,128, 92,135,141,182, 66, 80, 27,130,208,105,151,192,178, 90,212,214,102,193, 86,240, 47,223, 60,
-185, 60, 42,183,249, 82,226, 85,185,249, 25,117,124,228,171,248,228,187, 89,104,198,116, 6, 0, 60,245,108, 79, 12, 24, 26,141,
-181,159,230, 96,229,255,222, 84, 43, 71,250,231, 58, 36, 4, 80, 60,127,204, 57,232,221,123,239,189,216,183,111,159, 87,242, 7,
-128, 25,211, 68,106, 96, 47,128, 99,168,184,218, 12, 61, 58, 3,159,127, 94, 3,181, 26,232,209, 3,136,142,182,139,168,184,218,
-204,254, 50,246,255, 93,253,219,175,157,136, 39,242,223,187,119, 47, 88,150,117,146,244,134, 13, 27, 26, 77, 32,174,219,245,201,
- 31, 0,188,145, 63, 0,100, 40,149,132, 2, 82, 2,104, 82, 83, 83, 27,236,248,172,203,160,175,204,204,148, 17, 2,172,252,108,
-229, 77, 49, 47, 43, 51,148,174,254, 21, 41,165, 84,253,225,135, 31, 58,119,124,248,225,135, 88,177, 98, 5, 50, 50, 50,234, 86,
-145, 35,144,186,147,151, 97, 79, 97, 43,163,148,106,158,124,242,201, 6,175,207,234,226, 69,201,252,252,115, 25, 33, 64,198,202,
- 12,181, 59,242, 18, 54,111, 14,136, 4,176, 25, 42,240,251,246, 61, 88,187, 49, 27,159, 93, 58, 7, 0,200,127,179, 5,122,140,
-186, 31,166,146, 11, 56,254,235, 97, 28, 61,119, 26,149, 87,174,224,216,177, 99, 77, 86, 88,107,245,234,213, 82,126,125,152,132,
- 81, 74,123, 21, 20, 20,124,240,218,107,175,245,253,224,131, 15,196,102,179, 25, 2,129, 0,205,155, 55,135, 94,175, 71,126,126,
- 62,162,163,163,185,186, 5,158,172,255, 80, 66, 8, 75, 41,141,172,184,120,224,167, 55,191, 44,137,252, 98, 94, 7,104,245, 98,
-136,133, 12, 58, 70, 72,112,229,186, 25,138,127, 91, 49, 96, 72,108,104,103, 47,158,132,180,180, 52,202, 41, 2,174,125,177,161,
-207, 1,220,122,112,228, 95, 95, 57, 96,188, 13, 34, 92,189,239, 58,110,206,196, 25, 62, 95, 64,102,102, 38,181,147,255, 58, 39,
-249, 75,126, 58, 15,195,206,187,234, 28,247,106,185, 42,215, 73,195,180,213, 96,197, 66,152, 15, 31,135,233,247, 34,212,238,218,
- 7, 24, 77, 16, 83,138, 16, 8, 32, 4,129,137,181, 66,107,170,197,103,187,183,122,149,185,108,145,221,186,119,133,125,155, 51,
- 87, 40, 78,157,161,152,191,196,255, 62, 43,151,203, 53,174,110, 47,149, 74,197,235, 69, 87,169, 84,206,218,218, 28, 30, 91,113,
- 17,123, 14,235, 80,114,181,214,169, 4, 20, 94, 52, 2,242,141, 80,169, 84,188,220,145, 66, 98,175, 28, 38,170, 62,138,208,208,
- 51, 8,146, 84,131,101,181,176, 88, 14, 67, 32,136,134, 89, 95,126,219, 58,235,158,111,143, 73, 1, 82,135,252, 47,159,162, 24,
- 60, 81,128,103,223, 73,192,189, 9,125, 1, 80,199,121,190, 97,221,186,117,244,133,119, 9,154,181,238, 15, 10, 32,113,210, 28,
-236,223,191,159,215,119, 89,230, 2,109,211,230, 55, 39,249, 87,151,219, 75, 48, 15, 24, 96, 39,127,174, 16,160,253, 88, 48,170,
-203,131, 17, 25,114,217,163,204,201,147, 39, 67, 38,147, 97,204,152, 49,152, 58,117, 42, 4, 2,193, 77,127,174,251,249,194,221,
-123,235,151,178,228, 66,196,132, 16,231, 95, 67,251, 8,160, 1,133,166, 1, 89, 55,222,175,212, 84,181, 59,203,121,222,188,121,
- 72, 77, 77,173, 75,168, 13,200,251, 78,169,196,177, 99,199,212,132, 16, 41,128, 58,109,230,244,103,215,219,231,233,250,196,148,
-130, 9, 9,130,229, 74, 49,148,175,190,138,213,250, 10,232, 70,199, 57,143,127,241,191,213,120, 99,193,108,196,204,127, 12,111,
- 29,221,139,141,186,115, 72,120,240, 65, 68, 71, 71,251, 60, 5,176,122,245,106,169, 66,161,160,171, 86,173,170,211,135,243,242,
-242,212,158,166,161, 8, 33, 34, 66,200,144,163, 71,143,150,228,228,228,104, 94,120,225,133,184, 79, 62,249, 68, 82, 83, 83,227,
- 44,211, 92, 91, 91,139,102,205,154, 21, 78,153, 50,165,231,136, 17, 35, 58,123, 81, 36, 24, 66, 72,151,163,185,155,202, 78,239,
-156,127,126,254,203,233,237,183, 44,238,128,223, 75,133,168,172, 17,128, 37, 64,121,141, 25,180,101,247,218,231, 95, 89,210,247,
-129,135,255,225,117, 58, 33, 35, 35,131,112, 99,157, 82,169,244,250, 57,128,219, 67,254,110, 61, 0,174,196,207,103,156,241,197,
- 18,185,225,106, 91,229,214, 59, 80, 39,206,160, 1, 55, 70,223, 86,109,213, 90,106,129,184, 92, 11,201,119,123, 65,132, 12, 80,
-107, 6,173,214,131, 88,173, 16, 1,176, 81, 22,181, 54, 43,170,173,102,128,245, 62,135,202, 5,249, 45, 91,212,240, 48,104, 15,
- 18,108,252,128,170, 84, 42, 9,231,210,231, 99,173,223,100,253, 3,248,250,153,246,117,182,135,188, 84, 4, 17,189, 14, 11,105,
-133,172,172,172,189,124,189, 0,146, 26, 53, 34,223,250, 31,174,189,144,134,235,218, 96,116,176, 28,135,205, 86, 4, 0, 40,254,
-165,221,109,235,176, 27,119,124,172,158, 61, 78, 89,135,252, 57,196, 69,188,138,225,125, 39, 35, 62,242, 56, 54,238,120, 71, 61,
-118, 18,255, 65,100,237,218,181,244,199, 31,127, 68,121,249, 88,180,108,185, 7,205, 90,245, 3,165, 20, 12,195,240, 10, 68, 42,
- 41, 1,138,138,142,113, 19, 9,128,164, 6, 90, 61, 48,116,168,125, 79, 97, 33,240,233,167, 64,117, 21,160,175, 1,106,244, 64,
-104, 68, 21,175,107,107,104,174,255,236,217,179, 0,128,119,223,125, 23, 0, 16, 19, 19,211,100,110,102,215, 62,201,231, 59,115,
-231,206,133,171,197, 94,159,184,125,128, 20,184, 49,247,239, 10,206, 11,224, 56, 71,227, 73,200,172,168, 24,156, 62,126, 2,165,
- 17, 17,106,134, 97,240,220,115,207,225,163,143, 62,242,251,250, 70,154,194, 65,217, 26,204,126,119, 17,250, 79,158, 12,229,187,
-239,130, 97,110,240,156,178,240,216, 13, 15,225,190,125,216,189,123, 55,206,157, 59,231,115, 16,224,234,213,171,165,185,185,185,
-106, 0,200,207,207, 87, 51, 12, 35, 75, 78, 78,214,172, 90,181, 74, 74, 41, 69,124,124,188,204,104, 52,170, 27, 80,236, 44,121,
-121,121,253,103,204,152,209,162, 91,183,110,216,190,125,187,161,178,178, 82,104, 52, 26,237,222, 14,199,252,199,248,241,227, 99,
- 8, 33,193,148, 82,163, 27, 49,140,139, 60,166,232,212, 47, 43,222,248, 87, 74,179,150, 61,178,240,115,214, 19,248,237, 2, 65,
-201, 85, 33, 64, 25,152,204, 22,104,105,203,210,167,103, 61, 21, 71, 8, 41,165, 77,160, 85,242,137,179, 9,224,143, 65,131, 83,
- 0, 57, 57, 57, 55,237,171, 40,213,249, 76,118,174, 30, 0,251, 20,128,189,255, 72,126, 58,143,160, 99,165,176,133,219,173,168,
-250,115,200, 13,173,107, 60,113,177, 4,134,160, 96, 68, 91,173,232, 24,220, 12, 33, 34, 49,136,197, 2,176, 20, 86,155, 13,213,
- 54, 51, 12, 54, 43, 76,212, 6, 27, 40,168, 15,157,109,254,146, 27, 74,128, 61, 46,224, 6,233, 47, 91, 36, 64,250, 34,130, 23,
-150, 88, 27,221,232,114,185, 92,195,149, 46,229,131,133, 89,246,118, 95,154, 20,225, 36,124,167, 43,159, 94,135, 8,128,144,234,
-240,213,236, 8,235, 99, 42,126,113, 29,162,171, 63,193, 6,187,155,250, 3, 97, 24, 30,187, 90,140,130,127,119, 68,104,187,222,
-168, 44, 45,197,149,243,151,110,107,199, 28, 48, 52, 26,122, 71,119, 51, 4,159, 64,136,177, 15,190,121,211,226, 60, 62, 66,222,
- 23,185, 27,125,179,252, 39,141,250, 17,223,125, 39, 71,120,174, 10,203, 23, 1,207, 47,161, 24, 53,106, 20,239,101,127, 93, 59,
-118, 34,221,187,215,213, 2,183,110,181, 7,254,173, 91, 7,244,232, 65,177, 98, 5,193, 91,111,213,216, 21, 4, 0, 61,122, 70,
-224,133,231,249, 93, 35,103,165, 78,158, 60, 25, 27, 54,108,168, 99,201, 38, 38, 38, 54, 72,110,254, 42,162, 62,122,240,100, 43,
- 86,172, 80, 55,164, 0, 44, 91,182, 12,153,153,153,188, 44,225, 39,159,124, 82,205, 69,254,187,195,243,207, 63,143,229,203,151,
-171, 51, 51, 51, 61, 94,227,143, 39, 74,240,202, 91, 11, 48,107,241,191,240,178,217,140, 15, 63,252,176,193, 54, 90,182,108, 25,
- 84, 42, 21, 8, 33,210,134, 8,123, 84,159,206, 88,245,197,167,136,157, 62, 29,111,190,249,166, 71,165, 97,222,188,121, 88,182,
-108, 25, 62,255,252,115,141,175,109,159,155,155,171,230,130,229, 20, 10, 5,205,203,203, 83, 39, 39, 39,147, 67,135, 14,169, 9,
- 33, 72, 78, 78,214,172, 92,185,178,193,239, 27, 12,134,240,173, 91,183, 98,236,216,177, 40, 44, 44, 12,209,235,245,176, 88, 44,
- 96, 24, 6,102,179, 25, 73, 73, 73,196, 65,238, 70, 62,142, 45,147,201, 36, 62,188,105, 58, 70, 61,242, 22,118,230,156,197,185,
-203, 2, 84,233, 25, 8,132, 64,169, 62, 24,207,189,180, 40, 30,192, 69,190,220,207,197,157, 0,252,166, 3, 2,184, 61,214, 63,
-220,185,113, 56,215,140, 84, 42,133, 84, 42,197,175,191,254,234,252, 43,250,169, 24,149,198, 74,180, 28,234,251,186, 95,142,220,
- 67, 66,102, 64,242,211,121,136,138,203, 65, 9,129,120, 86,121,157,227, 94,137, 75, 44,128,141, 2, 23,245, 21, 40,169,212,226,
- 90,149, 14,149,181,181,208,153,141,184,102, 50,226,114,173, 1,165,181, 53,208, 90, 76,208,177, 22,152, 89,239,217, 48, 71,222,
-227,102,192,115,137, 11,152, 61,181, 25, 40,196,160,190,149, 1,119,186,240,235,119,118,190,238,127,167,229,121,181, 22,123, 14,
-235,234, 16, 63, 71,254, 65,108, 49,130,216, 98,188, 49, 94,136,146,146, 18, 51, 95,153,155,206,177,104,157,158,225,220, 62,167,
-183,225,226,217, 82,156, 58,112, 28, 87,206, 87,220,246,142,187,238, 51,187, 2, 90, 85, 70, 17, 98,236, 3,233, 44, 33, 30, 89,
- 44,114,254,165,111,156, 14, 2,194,123, 64,122,232,222, 28, 60, 49, 95,142,136,188, 61, 32,132,224,251, 3,246, 71,192,151,252,
- 57,196,244,234, 89, 79,177, 0, 62,249, 4, 56,115,198,238, 9,120,243, 77,234,116,191, 83, 74, 17, 17, 17,225,125, 4,118,244,
- 81,155,205, 6,155,205,134,119,223,125, 23,103,207,158,197,233,211,167,113,250,244,105,168, 84, 42, 44, 88,176, 0, 37, 37, 37,
-183,243,145,104, 26,178,164,231,206,157,203, 89,117,188,200,144, 16,226,214,250,231,224,233,152, 43,246, 5, 85,128, 48,205,240,
-159, 87,150,160,217, 86, 21, 82, 83, 83,225, 90,106, 88,209,163, 31,230,198, 14, 71, 72, 72, 8, 70,141, 26,133,215, 94,123, 13,
- 42,149, 74,173,211,233,220,190,127, 95,148,158,198,229,190,125, 16, 21, 21, 37, 99, 89,182, 65,111, 7,231,169,240,215,243,226,
- 26, 41, 31, 31, 31, 47,227,136, 18, 0,226,226,226,100, 94,218,110,204,168, 81,163, 90,148,148,148, 96,223,190,125,184,235,174,
-187, 32, 20, 10,157,202, 98, 84, 84, 20,223,233, 8,214, 33,143,116,239, 53,104, 97,230,174,112,252,182,125, 49, 70,198,247, 70,
-168,132, 65,104,136, 13,193, 65, 38,220,247,208, 20, 22,128,182,190,174,234, 77,185,228,238,143,207,116, 64, 0,183, 15,140,167,
-135,168, 84, 42,155,207,157, 59, 23,115,231,206, 5, 0,243,219,105,111,195, 82,102, 69,112,176,196,175,100, 36, 73, 73,246,240,
-225,144,241,103, 64, 5, 12, 94,251,198,224,180,254,249, 34, 36, 42, 74,102,109, 22, 2, 29,181,225,132, 94,135, 99,149,229, 56,
- 94,117, 29,199,171,180, 56,161,215,226,140, 65,135,114, 83, 45,106,172, 86, 92, 50,232,157,191,233, 9,147,198, 17, 44, 91, 36,
-192,178, 69, 2, 80, 8, 64, 9,131,212,105, 4, 79, 78, 19, 99,214,212,214,232,222,189, 45, 88,136, 0,248,118,203,156,171, 63,
- 41, 41, 73, 86,127,159, 15,109, 38, 43,188,104, 87,228, 11,222,183, 7,209,237,124, 49,204,238,190,161, 58, 8,168, 30, 38,198,
- 30,209,172,213,106, 67,146,146,146,124, 42,138, 30, 27, 27, 11,149, 74,133,117, 53,122, 24,205, 12,158, 88,255, 31,148, 73,130,
- 97, 52,223,190, 50, 17, 19, 7,188, 33,203,213, 46,193,186,255,222, 48,241,191,121,211,130,184,136, 87,111, 40,148, 15,124, 42,
-203, 80,102,240,202, 45,177,252, 85, 32,121,254, 88,132,231,169, 32,251,247,104, 48, 19, 0,141, 70,227, 87, 31,238,210,165,110,
-244,248,152, 49, 64,120, 56, 16, 29, 13, 12, 27,208, 28, 18,177, 0, 2,230,134, 88, 73,112,176,215, 1,153, 97, 24,231, 92,255,
-217,179,103, 17, 19, 19, 83,231,239,173,183,222,194, 91,111,189,133, 75,151,248,123,101,220,205,215,187, 34, 45,205,119, 11, 44,
- 51, 51, 83,182,124,249,114,183,132,205,215,250,119,113, 61,223, 20,167,192,109,179, 44,191, 20,246,102, 66,192, 26, 76, 16,181,
-235, 2,197, 59,239, 32, 57, 52, 28,225,154, 92,231,241, 89,255, 72,198, 27, 31,252, 7,133,203,190,198,235,253,199, 96, 74, 68,
- 55,236,222,188, 25, 69, 69, 69,110,223,191,135,211, 20,232,219,175,159,140, 11,106,228, 20, 50,215,233, 25,119,251, 60, 88, 95,
- 52, 45, 45,141,114,129,125,220,124,191, 43,201, 39, 39, 39,107,226,226,226,100,156,235, 63, 57, 57, 89,227,165,221,114, 68, 34,
-209, 93, 15, 63,252,240,217,202,202, 74,232,116, 58, 4, 7, 7,163,117,235,214, 8, 15, 15, 71,120,120,184,183,198, 99,235,201,
-179, 5, 5, 5, 25, 30, 77,251, 72,182,250,167, 33, 56,127,161, 10,109,195, 4,136,239, 73,112,119, 55,138,208, 22, 45, 42, 0,
-216, 60,240, 70,160,222,192,159,212,250, 7,188, 47, 3,172, 81, 42,149, 65, 0, 66, 21, 10,133, 83, 11,236, 56,186,131, 95,154,
-175, 82,169, 36,114,185, 28, 42,149,138,138,103,101,213,113, 69,242,205, 3,208,242,193,177,154,242,172,237, 48, 88, 77,168,210,
- 27,112,214, 98,129,136,181, 59,234, 43, 45,181, 96, 41, 5, 5,176,253,234, 57,232,173, 22, 0,224, 49, 48, 17,204, 95, 82,183,
-143,219,167, 2, 88,216, 96,194,239,103,170,177,106, 67,149, 79,247,235, 74,244,114,185, 92, 83,223, 11,224,170, 20,120,130, 92,
- 46,215,100, 41,166, 64, 52,246, 51, 0,209, 40, 47,191, 17,156, 39,102, 47,195,204,180,199,211,253, 79,227,242,101,251, 64,172,
- 84, 42,247,240,145,155,246, 77,102, 29,197, 43, 43, 43, 11,220,164,196,250,163, 7,125, 90,149,209,212,120,224,169,246,154, 45,
- 10,138, 3,170,227, 0,128,225,125,237,153,241,254, 53,111, 49, 14, 30,239,139, 15, 54, 78,135,114,235, 83,106,229, 68,126, 4,
-254,196,124, 57, 34, 35, 85,174,134, 44,180, 90, 57, 40,205,114,184, 42, 41,178,178,146,120,201,154,252,200,163,100,247,206, 93,
- 20,176,187,254,101, 50,130,235, 23,194,160,215, 73, 96,172, 18, 99,253, 26,130,185,115, 41,138,203,170, 49, 44, 62, 14,211,167,
- 78,227,101, 21,219,108, 54,231,124,191, 74,101,191, 86, 87,194, 47, 43, 43, 67, 89, 89,153,207,238,125,133, 66, 65, 25,134,185,
-137, 84, 51, 50,148,196,143, 36, 64, 26, 74,105,157, 88, 0, 23,143, 0,111, 87,184,171,107,191,126,244,190, 55,183,127,125, 37,
-199, 90, 93, 13, 81,171, 72, 8, 66,154,161,239,163,147,241,214,184, 4,188,194, 45,219, 27, 52, 24, 54, 99, 45, 68, 45,219,162,
-127,156, 20, 93, 59,118,195, 71,191,231,162, 95,191,126,178,159,126,250,233, 38, 37, 32, 77,161, 0, 64,212, 0,240, 84, 90,154,
-115,233,160,181, 30,217, 11,133, 2,128,222, 88,168, 72, 0, 12,112, 51,200, 14, 28, 56,144, 80, 74,157, 46,254,252,252,124,167,
-139,223,245, 60,199,182, 87,242,119, 24,236,175,134,135,135,247,141,139,139,235,126,242,228, 73, 28, 57,114, 4, 54,155, 13,161,
-161,161, 48, 24, 12,101,145,145,145,231,125, 49,250, 8, 33, 76,219,182,109,119, 63,244,208, 67,109,243,246,231, 99, 69,214,110,
-180, 32, 98,244,108,107,194,153,235,161,184,183,167,229, 28, 0, 11,167,160, 57, 20, 74,155,167,103,226, 58,214, 5,166, 0,238,
-108,240,153, 47, 54, 3, 48,187, 18,245,197,156, 75,192,116,223,201,223,149,108,220, 13, 90,124,149,128, 42,173, 78,102, 9,145,
-168, 43, 25, 22, 87,106,107, 0,139, 5, 54, 74, 65, 0,252, 94, 83,129, 82, 67, 21, 40,165, 92, 18, 27, 30, 3, 19, 69,234, 52,
-130,204,245, 55,250,228,201,179, 64,175,238, 86, 8,160,111, 20,249,187,118,118,127, 93, 94, 73, 73, 73,178,172,172,167,212, 64,
- 1,180, 90,173,185,164,164, 68,184, 52, 1,204,194,221,163, 48,175,223, 65,167, 21,198, 87,169,112,231,117,169,191,205,145, 16,
- 95,107, 14,139, 9,134,100, 22, 81,192,253,114, 63,103, 38, 64, 21, 40,159, 32,197,180,137,159,201,148, 91,158, 86,231,110,164,
-136,143, 60,142, 17,242,190,216,191,251, 56,242,116,239,128,128, 64, 49,241, 83,222,247, 26, 25,169, 2, 33, 4,147, 38, 77,194,
-231,159, 87,129, 51,138,237,255, 83, 71, 27,103,213, 25,144, 60, 76,193, 98,244, 24,153, 44,103,175, 90, 61,102, 12, 96,190,210,
- 9, 23, 42,130,192, 58,102, 91,219,235,219,226,197,212,106,236,206,235,137,230, 29,123,242,186, 70,142,248, 47, 94,188, 8, 0,
-184,114,229,138,211, 51,112,245,234, 85,231,192,234, 15,148, 74, 37,225, 18, 1,213,159,195,205, 80, 42, 9,159,124, 0,174,248,
-252,243,207,235,196, 2, 44, 95,190,220,103,235,191, 62, 97,248, 11,137, 68,130, 43,197,231,209,173,123, 15,176, 86, 19,136,213,
- 6, 97,243, 22,104, 62,120, 8,154, 13,186, 7,172,222, 10,155,193, 4,106,181, 1, 54, 22, 11, 87,126,128,169,211,167, 66, 34,
-145,184,149,103, 93, 31,193,235,119,221,157, 23,251,158,251,115,227,227,227,101,121,121,121,106,110, 12, 24, 49, 98,132,219,182,
-226, 65,254, 32,132,176, 0,118,244,236,217,115,208,199, 31,127,108,190,118,237, 90,109, 66, 66,194, 67, 5, 5, 5,175, 27, 12,
-134,242, 86,173, 90, 41,250,244,233,163,245,161,237, 69, 0, 58,199, 13, 27,214, 58,109, 86, 26,206, 93, 60,167,125,124, 86,218,
-200, 67,187,215,164, 95,174,214, 14, 31, 50, 58,129,109,219, 49,230, 17, 55, 94, 3,214,211, 88,224,202, 21, 13, 37,255, 9, 36,
- 2,250,243, 40, 0, 13, 90, 23,254,144, 63, 71, 54, 92, 78, 0,127,148,128,110,138, 25, 26, 0,164, 84,185,154, 34, 88, 2, 29,
-181,194,108,181,130,165, 44, 90,134,133,225,162,190,146, 95, 6, 59, 7,220, 45,239,187, 17, 3,224, 91, 38, 54,119, 46,254,198,
-166,235,117,124,119,226,144, 33, 67,182, 44, 92,184, 80, 28, 25, 25,201, 94,190,124, 25,243,250, 93,174, 67,254,190,252,134,187,
-246,247, 27,142, 44,127,245,147, 60,185, 59,135, 47, 6, 61, 32,208,100, 60,144, 65, 54,127,114, 73,186,237,232,155,234,220,141,
- 0, 1,193,196, 1,111,200, 30,120,138,127, 2, 32,174, 47,217, 9,190,202, 49, 72, 1,238,120,103,117,186,221,121, 18,218, 57,
-131, 0, 13, 23,215,152, 62,117,154,102,250,212,105,164, 92,247,177,212, 86, 93,173, 38, 2,192, 80, 27, 12, 82,109,133,144, 17,
-194,192, 72,100,227,166,204,134,144, 18,175,215,153,144,144, 64,238,186,235, 46,122,171,222, 63,187,181,159, 65,210,210,210,168,
-107, 68,187,171, 39,192, 71,113, 26,206,242,119, 81, 40, 52,183, 99,240, 26, 51,102, 12,158,222,152,137,183,170, 43, 48,112,244,
-189, 96,218, 70,216,175,201, 66,237,169,123, 33, 2, 17, 8, 65,196, 2,124,158,177, 12, 45,198, 14, 65,247,238,221,255,208,212,
-189,156,117,159,155,155,171, 30, 54,108,152,108,230,204,153,141,250,237,179,103,207,202,247,236,217, 83, 44, 16, 8, 54,143, 28,
- 57,242,109,134, 97,174,197,197,197,229, 56, 45, 25, 23,143, 18, 33, 4,238,158,185,139, 39, 64,117,228,200,145,161, 95,173, 94,
-195,136, 5, 65, 23, 38, 63, 54,121, 0,195, 48,186,123,239,159, 61, 1, 64,152,131,248,171, 1, 80,171,213,234,148, 87, 79,105,
- 11,148,148,191, 3,193,199,253,239,151, 2,208, 20, 10,131, 39,242,241,101,128,147, 10,122,251,182, 0, 0, 32, 0, 73, 68, 65,
- 84, 41,146,137,106,183, 74,202,158, 42, 84,235, 77,102, 88,109, 54,116, 31, 58, 24, 49,214, 97, 62,145, 97, 83, 6,163,112, 73,
-127, 0,168, 57, 79,135,203, 84, 0,105,132,220,173,114,185, 92,168, 82,169,230, 47, 93,186,244,223, 46,202,197, 24,165, 82,233,
- 83, 34, 18,135,167,160,201,146,151, 76,249, 61,201,209,142, 13,223,223, 20,149,202, 47, 77,255,193,103, 58,104, 30, 68,227,159,
-143,157,220, 9,158,152, 63,198,153,167,156, 27,199, 86,167,239, 65,104,231, 12, 18,218, 57,201, 39,153,225, 45,158,213, 28, 40,
- 6, 97,153, 11, 82,163,193, 94, 7, 32, 84, 34,215,132, 69,193,167, 21,163, 46,253, 79,228,208, 56,155,124, 94,149, 83, 2,154,
- 66,150, 35, 22, 64,205,125,110,172, 60,127, 87,150,117,239,222, 29,237,158,123, 78,182, 98,215, 46,117,209,219,223, 33, 73,212,
- 18,225,142,226, 61, 70,131, 21,115, 23,188, 12, 65, 72, 36,182,175, 81,226,215, 86, 4,227, 26,145,183,223,102,179,194,215, 24,
-160,250, 74, 0, 31, 43,223, 75, 59,145,211,167, 79, 95,163,148,166,247,234,213,235,203,242,242,114,189, 80, 40,132,213,106,165,
- 45, 91,182,116,122, 84,244,122, 61,196, 98,177,211,139,228, 65,222,168,252,252,124,176, 86,130,225, 35, 6,188,113,241,226, 69,
-157, 86,171, 69,100,100, 36,219,177, 99, 71, 29,247,108, 42, 43, 43, 33,145, 72, 64, 8, 65, 80, 80, 16, 47,163,143, 83, 18,234,
-127,174,239, 21, 13,224, 79,230, 1,184, 85, 74,129,223,196,152, 32,215, 32, 65,126, 71, 69,147, 58,148, 0,114, 11,230,209,109,
-114,185,252,255,228,114,249,255, 53,197,245, 53,225,253,146,166, 56,231, 86,194,110,213, 3,142, 20,251,245,142, 37, 53, 74, 54,
-195,118,210,132, 74, 58, 53,197,101, 90,110,101, 27, 52, 97,209, 21,141, 47,115,245, 94,148, 9,191,229, 80, 74, 73, 72, 72, 8,
- 38, 77,154, 4, 71,249, 94,148,184,148,239, 61,176,103,183,179,124,239,216,184,177,112, 40,189, 13,254,222,231,186,247,200,147,
- 17, 47,223, 76, 76, 60,171, 9,242, 80, 2, 26,141,123,238,185,199,100,181, 90,115, 0,232, 89,150,165,102,179,125,225,207,181,
-107,215, 0, 0,205,154,217,151,246,114,251, 69, 34,145,199,246,123,224,129, 7, 56, 25,187, 88,150, 69,120,120, 56, 88,150,117,
-174, 56,113,172, 98, 33,181,181,181, 20, 0,196, 98, 49, 8, 33,204, 31, 49,182, 7,224, 63,248,164,146, 6, 0, 50,112,224,192,
-128, 38, 22, 64, 0, 1, 4,240,231,129, 21, 64, 45, 0, 73, 19, 27,113,222, 10, 6,241,174, 40, 24,192,159, 3,129,135, 25, 64,
- 0, 1, 4,240,231,130, 16, 64, 51, 30,228,111,128, 61,136,187,169,248,128, 69, 96,217,223, 95,174, 35, 5, 16, 64, 0, 1, 4,
-240,215, 67, 72,128, 47, 2, 8,120, 0, 2, 8, 32,128, 0, 2, 8, 32,128,128, 2, 16, 64, 0, 1, 4, 16, 64, 0,127,119,212,
-113,233,204,153, 51,199,239, 8, 78,119,197,123,238,116,121,209,131,131, 16, 28,116, 5, 34,113, 5, 88,214,190, 44, 76, 32, 96,
-192, 16,129,253,127,134,128, 16, 6,148, 8,237,107, 96, 97,197,150,109, 34, 80, 74, 17,201,180,132,143,215, 23, 4,160, 21,236,
- 1, 60,213,176, 47,247,178,192, 49,167,246,103,108,191,128,188,128,188,128,188,128,188,128,188, 59, 83,158,207, 10,192,223, 13,
- 63,238, 63,131,161, 67, 44,136, 8, 7,180, 58,130,159,127,149, 64,200, 8,113,255,120, 27,118,171, 91,131, 16, 6,132, 97, 32,
-105, 14,140, 25, 90, 1, 64,136,123,227, 41,242, 11,132,118, 26,231, 1,245,193,253, 20, 0, 68,212,130, 97, 35,199, 20,159,254,
-237, 39, 83, 89, 85,109,140,205, 80, 11,185, 92, 30, 14,160, 50,160,135,254,185,145,253,205,127,165, 61,186,119, 83, 95,187, 86,
-219,168,132, 79,127, 34, 72, 83, 83, 83, 93,243, 0, 52,234,158, 83, 83, 83,253, 78, 7, 28, 64, 0, 1, 52,145, 7,128,195,154,
-175,190,224,173, 77, 60, 49,115,150,215,151,181,169,229, 53, 37,242, 11, 68, 72, 76,176,225,215,223,130, 33, 22, 9, 33, 20, 8,
- 33, 18, 81, 4, 9, 44,128,176, 57,132, 48, 98,104, 95, 43, 36,226, 32, 80, 0,237,219, 2, 15,222,207, 98,207,102,126,228,127,
-230,247,211,184,171, 79,119,116,136, 10,199,197,226,147, 93,194,218,117, 67,171, 14, 54,252,240,253,247, 80,169, 84, 21,183,123,
-125,188, 74,165,186, 63, 43, 43,107, 27,183,157,148,148,244,128, 92, 46,223, 22,120, 53,188,227,183, 95, 85,212, 90,123, 92, 54,
-237,193,238,106,150, 45, 71,101, 7,163,250,228,177,141,168, 49,181,199,144,216,145,127, 89, 18, 75, 77, 77, 85,207,155, 55, 15,
-132, 16, 94,101,123,249,128, 75, 22,211, 4,229,230, 3,104,164, 2,230, 17,148, 34,243,243,207, 27,124,222, 92,130, 31,215,108,
-129, 92, 13, 1,151, 90, 2,206,231,236, 90, 25, 49,128,166, 5,151, 13,144,131,187,220, 0,119,148, 7,128,193, 31,219, 15,238,
- 31,103, 1,133, 0, 66,129, 8,195,135, 17,180,105,205, 64, 40,100, 16, 36, 18,160, 87, 12,131,226, 11, 86, 12,141,101,208, 50,
- 82,130, 31,246,182, 0, 0, 8,168, 17,246, 84,216, 54,175,228,255, 91, 65, 1,186,118,232,136,223,114,243,112,200,108,129,238,
-186, 14,226,160,230,232, 61,104, 4, 6,140, 24, 7,245,150, 44, 0,252,114,227,223, 2,226, 31,147,149,149,181,103,225,194,133,
- 40, 40, 40,224, 58, 76, 5,128,231,102,207,158,189, 53, 41, 41, 73, 46,151,203,247,252,229, 94,138,159, 85, 52, 72,168,133,144,
- 49,163,182,214,134, 74,125, 48,238, 29, 53,197,167,246,223,152,253,149,180, 69,176, 22,255,152, 58, 24, 93,187, 60,168,110,209,
- 34, 12, 22,171, 21,215,174, 93, 71,219,146, 11, 40, 60, 91,132,131, 7,180,116,248,136,135,252,122,174,153,153,153,212,101,112,
-190,211, 6, 71, 41,112,163, 28,174,163, 58,160, 20,183, 41, 29,240, 31,248,190,208, 77,155, 54,221, 92, 79,225,182,145, 23,149,
- 18, 16,208, 38,104,119, 90,242, 13,200,161,217,174, 28,239,200,146,233,168,134,228,130,217, 25,122, 12,157,250,177, 71, 69,238,
-135, 31,126,112,110, 39, 38, 38, 98,199,142, 29, 30,183, 3,184,245,228,239,186,207, 85, 17,240,168, 0, 28,216,127, 8, 35,238,
- 29,246,135, 93, 52,235, 67,254, 84,215, 84,146,254,102,159, 98,132, 2,232,180, 66,180,107, 35, 66,187, 54, 98,212,212,136, 32,
- 17, 9, 97, 19, 6, 97,112,127,130,129,119, 11,192, 16,145, 61, 5,166, 72, 12, 17, 99, 2,145,136, 97, 53, 0, 86,232, 61,146,
-255,254,189,123,208,173,125,107, 28,251,245, 24, 22,189,253, 70,157,235, 91,242,230,187,148, 17, 16, 12,142, 29,140, 31,118,236,
-241,169,242, 30,203,178,210,130,130, 2,245,153, 51,103, 16, 28, 28,140,224,224, 96, 89, 98, 98,162,198,199,193, 76,150,149,149,
-181,135, 35,126,151,206, 17, 14, 96,220,127,254,243,159,235,179,103,207, 86, 1, 72,144,203,229,170, 59,177,131,175, 90,181, 74,
-154,146,146,194,251,190,191,222,176, 70,218, 47,166,185,186, 75,251, 90,132,181, 8, 2,195,132,192,104,180,162, 92,107, 68,142,
-106, 5,149,180, 24,140, 97, 67, 71,241,234, 71, 34, 92,193,164, 7,238, 86,247,237,219, 27,151,175,232,112,248,231, 35,168,169,
-209, 35, 44,172, 57,162,163,187,128, 17,136, 96,179,149,224,231, 95,246,211, 65, 3,239,253, 75, 89, 55,169,169,169,234,231,159,
-127,222,185, 61,111,222, 60, 44, 95,190, 92,253,185, 7,171,208, 39, 50,186, 67, 61, 0, 14, 37,157,102,103,103,195, 93, 97,165,
- 63, 18,174, 86,182, 82,153, 33,163,180,113, 74, 0,211,229, 81, 39,121,231,191,215,204,173, 25,214, 46,156, 65, 84, 36,243,167,
-125,126,127, 87,184,146,189, 59,165,192,171, 7,224,192,254, 67, 0,208,104, 69, 96,255,115,133, 30,143,223,251, 81, 15,191, 7,
- 11, 66,136, 95,213,246, 84,154, 54, 16, 9, 69,232,212,161, 6,213,213, 34, 28, 62,214, 9, 2,129, 0, 2, 34,128, 88,100, 69,
-223, 30, 6,244,236, 33, 0, 1, 3,177, 40, 8, 98, 1, 65,236,221,102, 68, 70,176, 88,247,165,103,217,189,187,181, 69,241,217,
-178,155,200, 31, 0, 22, 45,126,133,188,251,246,191,105,251,248,187, 17, 17,222,156,247,245, 26,141, 70,233,242,229,203,213,197,
-197,197,117,244, 13,147,201,132,135, 30,226,111,109,102,101,101,237,117, 37,127, 55,104,149,158,158, 94,241,194, 11, 47,236,190,
-221, 83, 20, 13,145,255,161, 67,135,212, 41, 41, 41,188,175, 45, 38, 58, 82, 29,213,182, 10,173, 90,134,162, 99, 84, 59,132,132,
-134,160,184,184, 20, 54, 27,139,168, 14,205,113,252,247, 92,172, 62, 85, 40, 77,126,124,150,199,193,244,232,209,253,244,145,137,
-189,209,185,115, 71,156,248,189, 24,135, 15,255,142,107,215,171, 65, 41, 16, 17, 17, 12,131,161, 6,131, 6,245, 69, 69, 69, 37,
- 74, 15,255,140,175,254,119, 90, 58,243, 31,252, 21,149, 59, 28, 82,192, 94,124,138,195,135, 31,126,200,109,251,228, 5, 72, 77,
- 77,165,174, 46, 97, 87, 11,210,213, 37,221, 20,211, 11,111,191,253, 54,237,212,169, 83,163,115,241,203,229,114, 66, 8,161, 27,
- 55,110,244,152, 99,159, 67, 90, 90, 26,117,231, 33, 88,189,122,181,148, 43, 14,228, 78,137, 85, 40, 20,180,161, 84,174,174,245,
- 28, 40,165, 80, 40,210,212,141,241, 66,212,151, 55,244,229, 26,252,244, 94,179, 58,196, 31,192,159,211,250,175,223,135, 26, 53,
- 5,208, 88, 69,224,222,143,122, 52,168, 4,248, 67,254, 28,114,114,114, 80, 90, 90, 10, 0,136,138,138,162,190, 40, 1, 2,106,
-132,144,216, 32, 22,137,240,243,177,214, 16, 8,133,104, 46,210,219,227, 0,154, 49, 40, 45,109,142,187,251,178, 32,132, 32,233,
- 65, 43, 40,203, 0, 36,200,238,120, 67,117,131,114, 13, 21, 23,112, 69, 91,131, 23, 94,127,189,193,107,169,168,212, 66,119,237,
-138, 67, 22,111,226,174, 79,254, 0,128,237,219,183,195,102,179, 73, 31,121,228, 17,175, 3,156, 74,165, 26, 83,191,244, 47,215,
- 97, 42, 43,235,196, 35,134, 47, 94,188, 24, 42,149,106,236,157, 52, 21,192,145,191, 47,223,249,122,195, 26,233,221, 49, 38, 4,
- 7,135, 67, 18, 36, 70,183,110, 93,209,169,107, 87, 84, 85,105,160,213,214, 64, 44, 22, 32, 50, 66, 2, 97,112,184,199, 92,241,
- 0, 32,164,165,104,222,172, 37, 12, 70, 43,142, 29, 43,196,165, 43,149,184,124,165, 6, 70,147, 4,157,163,172,144, 4, 9, 80,
-120,186, 8,119,117,239,142, 75,151,171, 96,180,182,240, 42,211, 65,116,212,219,126, 95,167, 3, 26,146,233,143, 44,206,250,159,
- 55,111,222, 77,251,159,127,254,121,191, 98, 1,220,145,104,253,185,227,166,242, 42,228,230,230,170,209,200,130, 60,123,246,236,
-161, 89, 89, 89, 72, 74, 74,130,187,233, 0, 62,158, 42,142,252, 1, 32, 63, 63, 95,205, 48, 76,157,107, 90,189,122,181,148,143,
-209, 19, 31, 31, 47,227,228, 52,133,199,101,227,243,161,152,178, 92,239,150,248,163, 34, 25,199, 40,197,239,241, 38, 38, 38,214,
-241,146,220,119,223,125,117,218, 42,224,246,191,115,224,115, 12, 64, 83,121, 4,154, 18,133,133,118,197,162,180,180,212, 39, 37,
- 64, 40, 20, 66, 36, 16, 65, 36, 34, 24, 53, 2, 48,232, 77, 56,119, 86, 12,145, 80, 4,161, 77,136,184, 97, 20, 98,145, 8, 2,
- 1, 3, 80, 2,173, 14,248,233,136, 16, 44,203, 2,184,214,160,220, 35, 63,159, 69, 77, 77,195, 25, 56,223, 95,188,152, 6, 5,
- 73, 96, 52, 86,194,198, 90,121,223,231,145, 35, 71, 26, 86, 58, 12, 6, 94, 68, 83,223,245,239, 78, 51,220,178,101,139,235,249,
-170,219,225, 5,112,231,226,119, 37,255,248,248,120,222, 85,232, 58, 70,181, 85, 51,204, 5, 88,109, 44,204, 22, 43,174, 93,215,
- 66, 36,150,192,100,178,192, 98,181,193,106,101, 97,181, 81, 84,232,174,123,149, 37, 22,233, 33, 9,238,136,242,242, 74, 84, 85,
- 27,160,213, 25,209,162,229, 0, 12,191,251,110,228, 31,216,129, 14,102, 43, 42,171, 42,209,179,103,119, 4,137,133,208, 87,107,
-255, 42, 99,133,148, 82,234,156,251,119,197,138, 21, 43,252,138, 5,152, 55,111, 94, 29,111, 66,253, 99,124, 21, 0,123,169,103,
-206,162,141,196,216,177, 99,235,244, 87,206, 64, 40, 41, 41, 81,171, 84, 42,191, 10, 83,169, 84, 42, 39,249,115,211, 1,155, 54,
-109,242, 74,174,245, 61, 85,185,185,185,106, 46,240, 77,161, 80,208,188,188, 60,117,114,114,178,243,120, 94, 94,158,154, 16,207,
-151, 23, 31, 31, 47,115, 45, 51,156,150,150, 70, 61,181,149,183,241, 48, 41, 41, 9,147,227, 85,216, 0, 96,234,114, 61,238,121,
-185,198, 99,219, 15,157,234,185,173,234,207,241,123,139, 9, 8,224,214,123, 3, 26,242, 0,252,161,254, 29,119,150,126, 99,172,
-255,122, 22, 43, 10, 11, 11,177, 98,197, 10,222,165, 38, 5, 2, 33,226,134,178, 16, 48, 66,252, 84, 32,193,169, 66, 9, 38,140,
- 7, 30,184, 15,152,152, 72,208,190,173, 24, 18,113, 16, 36,226, 32, 4, 75,130, 16,213, 62, 8, 18,177, 4, 18,177,231,146,152,
-175, 45,122,149, 44,125,239, 45,210,208, 64,210,189, 91, 23,132,133,135, 66,194,154, 81, 99,176,252,225,157, 98,255,254,253,123,
-246,239,223, 95,135,240, 93,255, 0,160,188,188, 28, 19, 39, 78,188,109, 86,126,126,126,190,218,213, 26,226,246, 1,192,176, 97,
-195,124,178,228,108, 54, 64,111,176, 64,175, 55,163,170,202,132,171, 87,117,184,116,233, 58,170,171, 77,168,169,177,160,166,198,
- 12,189,222,130,202, 10,239, 43, 50, 77, 38, 43,106,107,109,176, 88,204,104,222, 92,140, 78, 81, 45, 16, 18, 26, 10, 0,136,238,
-222, 21, 29, 59,180, 64, 88, 11, 9, 40,181,193, 98,101, 97, 50,233,255, 18, 3, 73,106,106,170,122,254,252,249, 30,201,156, 91,
- 26,200,211, 59, 33,115, 40, 13,110,177,124,249,114,124,254,249,231, 62,151, 26,182,187,197, 21,212,245,143, 35,212,210,210, 82,
-100,101,101,249, 92,138,118,207,158, 61, 52, 59, 59,219,149,252, 33,151,203,201,228,201,147, 61,126,111,206,156, 57, 32,132, 56,
-173,250, 85,171, 86, 73, 1, 32, 46, 46, 78,230,170,196,186, 30,167,148, 58,143,243,184,219, 58, 86,188, 59,197,193,155, 50, 1,
- 0,173, 90,181, 2,113,177, 30, 26, 43, 47,128, 59,143,252,221,109,251,229, 1,184,147, 44,255, 27, 3,188, 13, 2,129,192,231,
-239,141, 24,202,162, 77,235, 32, 84, 85, 9, 17, 36,180, 34, 72, 44,128,230,144, 24, 19,100, 34,136, 69, 34, 84, 85,137,112,160,
- 32, 20, 45, 36, 4, 12,195, 32, 81,110,198, 67, 19, 40, 24,134,226,157, 95,124,191, 78,149, 74, 69, 5, 33, 18,104, 69,173, 16,
- 98,185,136, 51,165, 20, 99,164,163,120,127,127,208,160, 65, 56,120,240,160,219, 99, 33, 33, 33,188, 7, 75,157, 78, 55,214, 49,
-240, 32, 57, 57,217,185,191,188,188,220,249, 57, 57, 57, 25,101,101,101,183,229,121,166,164,164,104,242,243,243,145,155,155,171,
-102, 89, 86,198, 48, 12, 56,203,191,161,121, 83, 79, 40,185,112, 73,214,186,133, 65, 29, 36, 22,192,108, 97, 81,107,186,136, 11,
- 23,203,161,213, 85, 65,171, 53,160, 92,107, 68,185,214,136,240,200,174, 94,101, 93,189, 78,113,229,234,117,244,238,221, 29, 21,
- 58, 29, 68, 66, 6, 85,213, 23,161,175, 96,209,231, 46, 61,218,182,110,141,144,144, 16, 4, 5, 5,227,242,149,106, 16, 65, 4,
- 95,130, 37, 46,228,216, 36,171, 0,154,122, 5, 65, 67,214, 58, 80, 39, 22,128, 47, 52, 0, 48,119,238,220,155,188, 10, 46,211,
- 12, 26,127,174,115,202,148, 41,117, 44,216,172,172, 44, 39,121, 61,250,232,163, 72, 72, 72, 32,124, 19,167,184,177,252,157,168,
-239,105,168,143,129, 3, 7, 18, 74,169,211,202,207,207,207, 87, 19, 66,156,165,129,147,147,147, 53,185,185,185,200,205,205, 85,
- 39, 39, 39,147, 67,135, 14, 57,143,175, 92,185,178, 65,185,185,185,185,106,134, 33,178,188, 60,251, 59, 49,103,206, 28,252,242,
-203,207, 50,142,194,243,242,242,212,220,253,243, 81, 38, 86,174, 92,137, 79,101, 17,152,186,194, 0,192, 62, 29,224,138,169, 43,
- 12,206,246, 76,145,137, 2,204,250,103, 81,218, 23,190, 95, 87,233, 94,250, 18,126,249,229, 23,254,171, 0,110, 5,241,187,198,
- 2, 52,198,250,175,107,201,215, 37,255,196,196, 68, 40, 20, 10,175, 83, 1,173, 90, 9,192, 16, 1, 90,183, 18,160, 71,119,138,
- 75,151,132, 96, 4, 4, 34,161, 16, 34,161, 8,191, 29, 13, 69,100,168, 8, 2,129, 0, 35,134,217, 16, 28, 28, 4,150,165, 0,
-181,249, 69,254,205,218,118,194,213, 26, 10,253, 25, 13,132, 68,128, 23, 23, 47, 34, 62, 14,108,178, 11, 23, 46,168, 47, 92,184,
-112,211,253, 78,154, 52,137,215, 96,153,148,148,148, 80, 94, 94,190,155, 35,121, 0,152, 56,113, 34, 86,175, 94,237, 60,167,170,
-170, 10,101,101,101,216,186,117, 43,146,146,146,198,220,142,206, 27, 23, 23, 39,203,205,205, 85,231,231,231,171,185, 96,177,184,
-184, 56,191,230,112,103,254, 35,229,255,217,251,242,240,166,170,252,253,247,220,236, 93,105, 75, 41, 75,217,165,130,108, 5, 42,
- 32,107, 2, 5, 20,176, 34,180,200, 38, 95,100,102, 26, 24, 87, 96, 20, 69,231,231,204,168, 40, 46,128, 35, 35,180,140,138, 11,
- 21,105, 21, 44, 88, 4, 10, 9,139,136,149,138,128, 44,178,148,181,133,174,105,211, 52,123,238,249,253,145,222,152,134,180,185,
- 73,195, 58,247,125,158, 60, 77,238,189,249, 52,247,220,115,206,251,217,206,231,104, 55,124,153, 9, 90,172,135,209,100,131, 78,
-102, 6,133, 14,102,179, 29,122,189, 5,101, 21, 70,148, 92, 53, 96,184,170,163, 79, 89, 38,107, 75, 20,157, 47, 71,151,206, 29,
-208,185,115, 60, 42, 43, 43, 16,213,194,129,110,221, 34,209, 42,182, 11,228, 10, 5,170,171, 13, 40,252,229, 20,174, 20,235,209,
- 58,190,231, 29, 59,129, 80,128, 18, 2, 21,199,165,238,164,218,212,186,125, 90,159, 44,120,189,249,136, 6,171,202, 50, 51, 51,
- 85, 43, 87,174,212,120, 42, 0,203,151, 47,231, 10, 12, 53, 41,143, 82, 74, 9, 33, 68,173,142,114,251, 77,244, 58, 98,206,206,
-118,134, 8, 82, 83, 83,121,185,255, 27,134, 20,118,121, 37,127,190,120,224,129, 7, 84, 7, 15, 30,212,112, 94,135,161, 67,135,
-170,188,157,231,146,241,124, 17, 54, 23, 91,255,225,135, 3, 26, 66, 8, 8, 33, 72, 76,236,171, 74, 76, 76,212,186, 41, 8,245,
-215, 2,190,198, 11, 39,143,153,170, 3, 39, 47,109, 84,167, 6, 15,106,234,138, 19, 46,121,124, 32,228, 0,220, 57,240,169, 0,
-220,142, 22, 63,135,105,211,166, 53,235,251, 12,195, 64, 36,114,190,122, 36, 48,232,215,219, 1,153, 84,238, 84, 0, 36, 18, 12,
- 25, 4,200,100,128, 68, 36, 67,203,150,114,136, 68,117,112, 56, 88,176,172,255,110,123, 99,213, 53,200,227,187,227,124,254, 23,
-136, 21, 51,120,252,229, 37,126, 79, 40, 10,133, 66,187,100,201, 18, 85,115,150, 1, 38, 39, 39,231,171,213,106, 60,245,212, 83,
-174, 99,156,165,175,215,235, 97, 52, 26, 49,119,238, 92, 0,192,135, 31,126,136,140,140, 12,205,173,120,182,115,230,204,209,178,
- 44,171,226, 44,255,129, 3, 7, 54, 43,129, 43,190,227,189, 56,116,112, 59, 90,181, 12, 65, 72,136,179,219, 91, 44, 14,232,107,
-173,168,210,153,208,190,115, 79, 12, 27, 50,210,231, 51, 25, 63,126, 10,217,177,237, 19,122,176,224, 56,134, 15,237,139,142, 29,
- 59,194,102, 53,163, 95, 98, 31,132, 70, 70,226, 98,209, 37, 20,151, 84,227,135, 31, 79, 66, 87, 27,137, 71, 31, 24,121,199,250,
- 76,231,207, 83, 3,128, 6, 32,152,175, 86,187, 8,156,245, 32,125,134, 33, 78,109,161,158,151, 9,128,190, 94,226,141,243,212,
-106, 10, 10,183, 76, 21,130,244,244,244, 6, 94,128,103,159,125, 22,132, 16,204,155,167,214,112,236, 15, 2,244,237,155,232,141,
-188, 92,238,120, 95, 36,199,151,252, 61,145,154,154,138,209,163, 71,171,154,211,143, 81, 31,171, 31, 52,104,144,106,246,236,217,
-218,198,206,187,197,246, 27, 5,151, 59,192, 41, 95,206, 48, 2,209,122, 42, 21,124,127,159,167,188,141, 11,194,156,141, 46,143,
-115, 93,179,113,193, 37,151, 66,176,253, 72,211,115,159,183, 58, 0, 66, 14,192, 29,170, 0, 12, 25, 58,240,134,196,124,130,101,
-249,187,119,164, 64, 80,165, 35,104, 19,199,184, 74,254,238,216,229,140,239,203,100,114,200,164, 50, 60,252, 16,129, 92, 38,133,
- 66, 78, 80, 85, 41, 66, 65, 97, 56, 28,172, 3,237,227,253,139,235,230,231,231,211,106,163, 9,186, 67,121,232,214, 94,130,223,
-138, 3,143, 11, 51, 12,163, 29, 56,112, 32, 25, 56,112, 96,192, 50,210,210,210, 84,171, 86,173,210,112,110,254,202,202,202,199,
- 6, 13, 26,100,216,185,115,231,119,143, 60,242,200,216,202,202, 74,242,248,227,143,111, 79, 75, 75, 83,221,202,206, 89,239,234,
- 87,185,189, 15,188,207, 57,201,157,158, 62,117, 2, 37, 69, 23,193, 48, 4, 14, 7,133, 92, 17,141,132, 30,189,240,232,164, 52,
-222, 29,189,164,156, 85, 85, 85,150,104,204,102, 59,122,247,234,130,118,109, 91,226,210,229, 82,232,142,157,195,239,167, 47, 97,
-215,238,163,184, 88, 76,241,231,191, 60, 29,208,224,185, 93,138,255,176, 95, 69, 5,124, 93,191,165, 60,229,157,251, 4, 43, 87,
-174,116, 41, 0, 43, 87,174, 4,138,214, 93,119,173, 55,121,141,120, 5,174,155,179,154, 91,172,135, 16,210,172,190,199,145,124,
- 99,228,238,235,188, 55,175,130,199,119,189,201,227,255,156, 47,126,141,156,149,179,157,115,195,168, 14, 13,200, 31, 0,210,198,
-223,239,124,163,251,213,167, 2, 32,212, 1,184,125,144,185,236,197,235,194, 0,126, 41, 0,183,115,194, 71,160,197,127,220,113,
-232, 23, 25,228, 82, 41, 30, 30, 79,192, 16,130,129, 73,118, 28,251, 77, 1,134, 56, 99,254,213,213, 12,218,182, 22,129, 33, 82,
- 28, 57, 38,133, 92, 6, 88,109, 86, 92,188,164,240,139,252,207,157, 62,140, 65,163, 39, 66,220,114, 16,206,157, 46,128,248, 90,
- 14, 94,120,254, 37,250,246, 59,111,222,146, 6,174,175, 87,175, 74, 74, 74,210, 44, 94,188, 24,189,122,245, 42,211,233,116, 72,
- 74, 74, 82,233,116, 58, 60,243,204, 51,154,180,180,180,219,162,174,125,115,137,223, 83, 9, 24, 54,100, 36,214,125,254,145,178,
- 77,235, 54,154,208,208, 80, 94, 86,255,117, 19,236,236, 63,105, 1,144,245, 95,100,208, 19,191,255,132, 54,113, 97,144,203, 37,
- 48, 24,172, 40,190,170, 7, 17,183,199,159,255, 50, 91,200,150,226,131, 95, 22, 1, 93,159, 64,131,229,133,133, 11,155, 67,214,
-205,254, 73,243,230, 69,187, 41, 18,193, 33, 52, 95,164,236, 15,105, 55,183,158,129,183, 54, 75,123, 64,230,188, 87,211, 85,231,
- 75,192, 29,139,196,196, 68, 87,194, 95,230,178, 23,175, 59,231, 83, 1, 8,118, 61,254,155, 93,223,223,175,206, 15, 2,157,142,
- 32,164, 53, 65, 76, 52, 65, 82,127, 27,228, 82, 17,100, 82, 27, 98,162,229,245,147, 0,193,224, 36, 7, 10,126,145, 56,189, 5,
- 60, 39,153,252,252,124,218,243,222, 8, 44,122,246, 95, 48, 73,227,241, 77,126, 49,186, 38, 56, 45,247,176,159,183, 98,209,223,
- 94,162,239,189,123,235,148,128,228,228,100,146,159,159,175, 92,182,108,153,198,221, 59, 16, 12,229,234,118, 70,125,177,159,102,
-223,227,204, 89,106,178,255,192, 30, 90, 94, 89, 14,211, 53, 35,228,242, 24,196,119,238, 19,144, 82,113,167,193, 89, 14, 59, 72,
-183, 89,180, 14,174, 21, 1, 69,159,222,242,123,243,149,220,119,183, 97,236,196,199,252,178,220,125,249, 30,133, 28,128,219, 75,
- 9,104,140,252,125,122, 0,254, 23, 64,225,204,234, 39, 12, 5, 5, 69,116, 11,138, 61,251,197,144, 75, 37,144, 73,197, 72, 25,
- 79, 65, 41,139,168, 24, 59,236, 14, 2,150,117,212, 79,126,190,209,167,147, 1, 19,166,164,193, 32,238,134, 86, 97,161,152,241,
-104, 52,178, 54, 29,115, 41, 1, 54,199, 55,183,252,254, 57, 69, 64, 24, 50,129,123, 21,238,214,123,203,212,189, 69,210,163, 94,
-188,158, 25,178,163, 3,149,135,244,168, 23,175, 63, 81,184,176, 89, 86,191,128,230, 33,245,201, 85, 65,235,195,119,187,241,112,
-167, 41, 1, 62, 13,224,196,196, 68, 33,104, 35, 64,128, 0, 1, 2, 4,252,143, 65, 40,244, 44, 64,128, 0, 1, 2, 4, 8, 10,
-128, 0, 1, 2, 4, 8, 16, 32, 64, 80, 0, 4, 8, 16, 32, 64,128, 0, 1,130, 2, 32, 64,128, 0, 1, 2, 4, 8,184, 59,208,
- 96, 21,192,252,249,243, 3,206,224,244, 86, 91, 59,216,242,102,206,157,231,243,123,117, 85,215, 92,239, 67,163, 91,187,222,175,
-255,120,205,117,215,198,170,254,236, 83,222,206, 21,127, 84,204, 27,179, 96,149,235,125,185,230,191, 8,228,247, 53,134, 64,127,
- 95, 99,240,246,251, 38, 61,174,246,249,189, 67,154,239,208,169, 83, 39, 92,184,112, 1, 73,170, 9,174,227,155, 63,207,184,225,
-237,247,231,171, 87,155,236, 47, 22,177, 88,185,168,184,216,181,100,113, 85, 92,156,235,250,255,182,105,115,195,251,159,167,188,
-220,220, 92,101, 94, 94, 94,131, 74,137,227,199,143, 87,165,164,164,104,111,197,248, 56,124,248,112,192,242,250,245,235,119,163,
-127, 31,153, 63,127, 62,110,231,249,229, 86,200,203,202,202,154,222,187,119,239,172, 99,199,142, 77,153, 49, 99,198, 55,205,149,
-231,190,209,145,123, 70,254,221,218,126,130,188,198,229,249,173, 0,120,194,110,183, 43,205,102, 51,136, 72, 2, 66, 8, 28,118,
- 27,164, 18, 49,100, 50,153,182,185,154,135,221,110, 87, 2,128, 88, 44,110,150,172,186,170,107, 8,141,110,237, 34,254,214,237,
- 59, 1, 0,174, 93,190, 16,144,188,157, 43,158,194,152, 5,171, 92,196,245,159,220, 2, 0,192,147, 41, 3,113, 55,226,144,230,
- 59, 36,169, 38,224,144,230, 59, 0,192,132,212,153, 0,128, 11, 23,110,125,251,253,187,180, 84,121, 26,208, 36, 0,170,211,128,
-115, 15,245,197, 47, 0, 0, 6, 46,123,251,150,182,155, 86,171,165,121,121,121, 48,155,205, 13,142,203,229,114, 77, 68, 68, 4,
-148, 74,229,109,185, 28,138, 16, 50,236,222,206,237, 62,165, 14,135,241,244,165,107, 47, 81, 74,183, 10,118, 80, 19, 74,167,197,
- 50,234,240,225,195, 17, 37, 37, 37,173,163,163,163, 91, 12, 24, 48,160, 56, 60, 60,252,243, 64,229,101,101,101,141,158, 49, 99,
-198,158,172,172,172, 63, 3,136,156,246,196,188,185, 0,216, 99,199,142,205, 6,176, 25, 0,235,143, 60,110,207, 19,142,248,155,
- 51,222, 60,119, 73, 12,214,146,190,198,148, 18, 1,183,153, 7,192, 29,250, 90,131,178, 77,194,253,154,145,189,187, 35, 68, 38,
- 1,165, 20, 14, 7,197,111,103, 46,226,252,209,125, 42,133, 76, 2,145, 72, 20, 16,121,135,201, 47, 40,123,118, 43,210,252,118,
-186,139,170,206,210, 41, 96,226, 7, 0, 69,100, 12,234,170,174,185,136,191, 41,143, 0, 31, 75,117,224,204, 23,177,115,197, 83,
-174,129,212,216,117, 77,173,177,244,252,159, 82,169, 20,128,179, 76, 38,203, 58,199,183,195,225,112,253,126, 70, 36,225,109, 69,
- 3, 64,155, 86,206, 82,157, 86,125, 53, 44,118, 59, 0,192, 96,119,202,235, 60,246, 79,184,167,103, 63, 94,196, 15, 0,125,135,
-140,198, 33,205,119, 46,226,111,236,186,155,217,126, 0,240, 84,105, 41, 5,128,113,161,161,216, 94, 87,167,225,136, 31, 0,126,
-223,177,243,186,235, 18,219,180,225,245, 59,107, 66, 43,148,133, 21, 63,163,248,210, 17,116,235, 56, 24,131,229, 74,191,251,112,
-110,110,238, 35,219,182,109,227,200,223, 14,192, 12, 32, 4, 0,107, 54,155,197, 10,133, 2,122,189, 94,233,205, 19,112,139,201,
- 63,238,254,196,222,219,182,127,185, 38,172,174,248, 36,134,165,205,207, 34,132,204,166,148,110,190,221, 38,166,252,252,124,218,
-156,250, 20,124, 54, 3,107, 10, 54,155, 77, 89, 80, 80,160, 57,126,252,184,235, 88, 69, 69, 5, 78,159, 62,141, 54,109,218,124,
-166, 84, 42, 85,225,225,225,124,159, 47,147,149,149,245, 79, 0, 15, 12, 27, 55, 73,145,149,149, 21, 55,237,137,121,225, 0, 28,
- 0,184,142,123,111,253,117, 35,248,222, 31, 55,222,212,106, 53,109,108,188,113,215,249, 26,111,106,181,154,238,253,177, 0, 34,
-145, 24, 14,135, 29, 53,181, 6,204,152,242, 8,125,247,221,119,155, 69,216,158, 74, 69,115,159,139, 0,223,240,182,237, 47, 7,
- 94,149, 0,235, 76, 86,229,232,148, 25,154,246,173, 34, 17, 34, 23,131,101, 89, 56, 88, 64, 44, 34,136,142,236,142,158,221, 58,
-104,242,183,127,167,114,216,234,148,254, 42, 1, 86,171, 85,217,163,231,121, 77,223,238,231, 33, 98, 28, 26,237,161,118, 42,169,
- 68,226,151,140,186,170,107, 80, 68,198, 32, 50, 34, 28, 0, 92,127,189, 93,215,186,125, 39,159,222,128,157, 43,158,194,192,153,
- 47,226,255, 30,155, 12, 0,174,191,222,174,251, 79,110,129, 95,218,181, 72, 36, 66,124,124, 60, 68, 34, 17,172, 86, 43,234,234,
-234,224,112, 56,160,211,233, 2,122,184, 97, 98, 17, 62, 94,185, 9,178, 72,160,244, 2,240,179,161, 24,229,215,206,226,243, 21,
- 47,249,101,245,247, 29, 50, 26,241,109,157, 33,146,120, 47,228,223,169, 83, 39, 87, 56, 0, 0,174, 92,185, 18,148,246,227, 83,
- 92,245,169,210, 82, 58, 46, 52, 20,175, 61,245, 36, 0,224, 53, 55,226,255,226,244,233,134,228,239, 71,181,214, 61, 23,190, 80,
-118,124, 66,172,121,177,195, 44, 88,216,100,200, 88,138,147, 21,187,240,201, 59, 27, 85,169,125, 50,248,246, 65,113, 94, 94,222,
-102,147,201,132,117,235,214,153,231,204,153, 35, 7, 16, 6,128, 93,183,110,157,117,206,156, 57, 98,147,201, 4,185, 92,174, 73,
- 73, 73,105,214, 68,247,205, 55,223, 40,119,236,216,161,105,110, 45,123, 87,223,145, 50,255,239,131,215, 94, 80,180, 56,241, 37,
- 20,191,239,198, 63, 70, 69,133, 63,179,165,252, 95,245,150,231,109, 69,254, 27, 55,110,132, 78, 55,134,102,103,167,249,125,239,
- 31,127,252,177,178, 57,100, 83, 87, 87,167,204,205,205,213,212,214,214,122, 61,127,245,234, 85,228,228,228,104,122,244,232,161,
- 26, 60,120,176,175,126, 67,178,178,178, 62, 31, 54,110,210,212,211,135, 15,136,227,219,182,182, 79,123, 98, 94,131,121,119,247,
-119,223,160,119,239,222,221,179,178,178, 30,234,221,187,119, 46, 0,236,223,191,191, 73, 82,229, 51,222,212,106, 53, 5, 33,128,
-143, 42,127,107,214,172,161,215,202, 42,112,248,183, 19,174, 99,102,179, 5,111,127,144,105, 80,207,153, 46, 16,246, 93,140,235,
-146, 0,107,107,107,149,195,198, 62,170,233,222, 33, 6, 50, 9, 3,150,101,113,237,218, 53, 28, 59,114, 24, 86, 59, 11,150,165,
-136,137, 12,193,216,135, 38,106, 76, 22,187,223,255, 80, 38, 41, 67,215, 14,215, 0, 17,193,125,221, 46, 67, 38, 46,245,219,242,
-119, 39,255,235, 44, 60,125, 45,174, 93,190, 0, 69,100, 76,163, 94,129,166,200,203, 19,159,126,245, 13,158, 76, 25,136,129, 51,
- 95,108,212,170,245, 6,169, 84, 10,145, 72,132,136,136, 8, 20, 21, 21, 65,167,211, 57, 21,169, 0,201,191, 77,171, 56,132,137,
- 69,120,244,233,215,241,208,140, 33,216,250, 91, 49,174,153,208,108,242,247,196,149,146,107, 56,126,232, 7,196, 70, 69, 56,201,
- 95, 44, 10, 74,251, 61, 56,229,255, 0, 0, 81, 98,137, 95,228, 15, 0,127, 95,245, 31,252,125,213,127, 92,228,191,189,174, 14,
-207,143,157,232, 60, 25, 43,229,117,223,159, 94,124, 75,249,151, 69, 15,104,158,232,248, 87, 72,152, 48,132, 34, 4, 12, 68,104,
- 23, 55, 20, 79,189,182, 80, 83,212,118, 5, 47, 53, 66,171,213,218, 0,224,211, 79, 63, 53, 2,144,115,219, 40,175, 91,183,142,
- 5, 16,226,190,173,178, 86,171, 13, 40, 46,103, 52, 26,149,254, 28,231, 97,249, 15,187,191,127,162, 49,251,155, 77,234,126,189,
- 18, 68,117, 39,118,225, 66, 89, 45,174, 86, 27,193, 82, 26, 80, 34,112,122,122, 58, 77, 75,203,166,235,215,175, 15,106, 33, 49,
- 55,242, 71,116,116,126, 64, 50, 10, 10, 10, 52, 25, 25, 25,132, 16,226, 82, 6,252,252, 13,215,145,255,161, 67,135, 48, 99,198,
- 12,119, 15, 1, 78,157, 58,165, 49, 26,141, 77,110,152,149,149,149,245,212,176,113,147, 38,190,177,100,129, 56, 59, 59, 27,255,
-253,224, 93,113,189,199,200, 69,254,217,217,217, 88,181,106, 21,122,247,238,157,235,107,188,121,146,127, 99,227,237,161,161,245,
- 94,192,240, 80,159,242,222,251, 96,181,139,252,203, 42, 42, 81, 86, 81,137,154, 90, 3, 36, 18,113,216,234,117, 95,154, 61,173,
-120, 1,119, 6, 18, 19, 19,175,123, 53,169, 0, 56, 28, 14, 26,211,169, 15, 58,181,110, 1,179,205, 1, 66,128,237,219,191,199,
-103,159,174,195,209, 35, 71,240,252,194,231, 32, 18, 49, 96, 29, 44, 34, 66,100,232,212,103,152,198,100, 50,241, 30, 96, 54,155,
- 77,217,179,219, 69, 77, 68,152, 17, 31,127, 90, 6,134, 80, 12,236,253,187,198,102,179,249, 53, 72,189,145, 63, 71,252,166,154,
-202, 6, 10, 66,141,190,214,167, 60,111,131,137, 27, 72, 5,235,223,106, 64,112,159,126,197,175,124,111,215,174, 93, 17, 19, 19,
- 3,189, 94, 15,169, 84, 10,134, 97, 96, 50,153,160,211,233, 32, 18,137,184,137,153,247, 61,127,189,121, 19,158, 91,185, 3,155,
- 62,120, 5,109, 90,197, 33, 36, 52, 26,151, 29,197,248,124,197, 75, 8,171,159, 52, 68, 60,229,121, 35,127,142,248,107, 74,206,
-161,123,124, 43,212, 26,205,144,133,200, 0,135,195,103, 62,128,175,246,123,105,237, 86, 28,255,229, 71,244,234,114, 31,106, 28,
-190,149, 70,142,252,127,223,177, 19,127, 95,245, 31,215,241,237,117,117,216, 94, 87,135, 34,245, 63,177,227,196, 81,244, 28,216,
- 5,168,244,189, 53,115,214,153,101,202,249,207,140,214,196,134,246,128,137,214, 2,150, 50, 72, 45, 85,176, 56,106, 97,102, 77,
- 96,165, 97,104, 55, 60, 9, 57,191, 46,245, 53,209,145, 13, 27, 54,192,108, 54, 67,173, 86,135,168,213,106,192, 25, 2,128, 90,
-173, 70,253,231,122, 11,202,140, 13, 27, 54,248, 61,104, 79,157, 58,165, 92,184,112,161,230,253,247,223,167,132, 16, 13, 0,236,
-219,183,143, 46, 93,186,148,190,242,202, 43, 1,109,205, 28, 46, 99,214,253,231,197, 39, 20,227,218, 89, 68, 7, 78, 93,195,214,
- 11, 12, 94,220, 86,106,249,167,214, 80, 83,103,195,255, 5, 34, 83,167, 27,115, 35, 45,127, 68, 71,231, 99,230,204,153,126,239,
- 70,233, 78,248,107,214,172, 33,220,118,210,124,113,224,192, 1,101,105, 41, 63,163,196,106,181,226,216,177, 99,187,155,234, 47,
- 0,148,241,109, 91, 75,211,210,210, 0, 0,133,133,133,216,253,221, 55,242, 43, 37,215, 88,142,252, 1, 32, 45, 45,205, 53,222,
-142, 29, 59,182,162, 57,227,237,237, 57, 19,241,219,185,203,104,221,165, 13, 80,103,228,125,239,101, 21,149,176,217,236,245,115,
-181, 29, 54,155, 29,151, 47, 94,144, 55,231,153,122,122, 15, 4,111,194,237,133, 6,174, 40,139,197,130,126,221,187,107, 66, 20,
- 18,176, 44,133,131, 5,126,216,183, 31,255,124,237,117,176, 20, 56,115,246, 44,142, 30,249, 21,189,122,245,133, 72, 68,112,111,
-151,120, 20,253, 98,135,130,231,230,120, 82,113, 25, 18, 58,149, 0, 98,130,203, 87,109,128,152,160, 79,247,139, 40, 56, 86, 6,
-138,118, 1,221,128,187,123,223,155,103,192, 84, 83,217, 96, 53,128, 47,184,187,247,189,105,218, 5,235,223,194,152, 5,171,188,
-102,177,187,195,110,183, 35, 36, 36, 4, 12,195, 32, 42, 42, 10, 70,163, 17,117,117,206,109,128, 99, 99, 99, 81, 89, 89,233,215,
- 6, 28,102, 29, 48, 80,161,192,243, 31,236,195,152,190,192,197,195,192,207,245,231,158,255, 96, 31,254,189, 64, 5, 7,235,240,
-187,253,142, 31,250,193,245,126,244,128,238, 16,135, 51,216,174, 61,129,126,221,219, 35, 34, 76,134, 79,115,242,145,164,154,128,
- 43, 94, 86, 1,248,106,191,220, 19, 20,184, 10,164,140, 38, 88,187,181, 8, 49, 81,157, 49,121, 40,225,213,126,156,187,127,123,
-221, 31, 91, 39,211,127,172, 0,218,213,128,252,229, 85,208,127,190, 6, 48, 38,144,130,165, 88, 21, 23, 71,254,219, 68, 32,160,
-235,148, 48, 77,199, 22, 3,160,119, 24, 96,209,157,197,231,151,178,176, 63, 69,135,251,254,172,194,216,167,195,160,136,186, 23,
-114,113, 20,196, 41, 53,248,249,155,159,233,253, 73,247, 55, 54, 73,185,254, 7,195, 48,160,148, 90,235,149,104, 51,195, 48, 70,
- 74,105, 52,156, 73, 92, 1, 47,175,237,222,189,187,118,236,216,177,170,202,202, 74,205,246,237,219,157,138,207,246,237,232,209,
-163, 7,186,119,239, 30,208,246,204,181, 22,246,153,185,127,255,247,150,119, 38,180,102,168,185, 6,127, 89,127,218,102,183,217,
- 86, 89, 28, 88, 74, 41,173, 10, 68,230,164, 73,214, 27, 78,254, 35, 70,140,208,250, 43,167,160,160,160, 65,200,132,243, 2,240,
-221, 85,210,225,112,248,165, 48,156, 63,127, 30,131, 6, 13,106,172,191,200, 1,220, 7, 64, 60,106,194,228,234,162,162,162, 22,
-133,102, 28,210,109, 0, 0, 32, 0, 73, 68, 65, 84,133,133,200,206,206,198,128,162, 34,166,176,176, 16, 0, 48, 96,192, 0, 60,
- 56, 50, 9, 17, 97, 50,172,250,100, 83,217,140, 25, 51,150,172, 94,189,122,129,191,227,237,234,230,183, 16,222, 83,142,176,110,
-207, 97,227, 91,127, 70,223, 94,173,113,239,196,215,145,145,145, 65,154,202, 18,175,209,215, 66, 46,151, 1, 0, 36, 18, 49,140,
- 70,115, 80,159,173, 64,250,183, 6,126,111, 6,196,178, 44, 66,100, 82, 88,237, 20, 12, 1, 24, 2,188,250,175,215,225, 96,129,
-186, 58, 3,174, 93,187,138,184,184,214,160,148,133,221, 14,200, 37, 98,136, 36,252, 92,176,118,187, 93,121, 95,215, 43,154,150,
- 81,122,128, 16,167,110, 76, 0, 66, 40,250,247, 60,163,249,233,104,156,202,223, 21, 1,156,117,223, 88, 72,128,143,245,239,169,
- 69, 55, 70,252,254, 88,255,128, 51, 97,168, 85,171, 86,144,201,100, 46,151, 33,151,248, 23, 25, 25, 9,137, 68,130,203,151, 47,
- 67,194, 83,222, 39,249,123,240,231,137, 35,193,153, 55,167,237, 78,247, 63, 0, 40, 19,128,136,215, 53, 88,240,183, 33,136,242,
-227,126,175,148, 56,147, 21, 59,180,138,134,206, 98,129, 56, 66, 4,115,185, 17, 96, 24,180,233, 24,143, 29,187,127, 14,168,253,
-254,111,209, 27, 56,255,195, 46,136,175, 1,213,113, 64, 8,195, 96,112,167,206, 24, 53, 50,142,151, 28,207, 88,255, 23,143,253,
- 25, 95, 91,126, 7,238, 49, 3, 63,137,129, 48, 49,240,240, 0,196, 63,204,207,120,237,218, 46, 26, 86,107, 21, 36,118, 27, 62,
-191,148,133, 31,231, 68, 98,196,163,143,160,123,171, 30,170,223,118,104, 53,253,210,234, 32,177,214,193,222,157, 69,121, 41,191,
-164,209,122,229,205, 60,103,206,156, 48, 0, 58, 74,169, 4, 0,230,204,153,211,236,218, 26,147, 39, 79,214,238,223,191, 95,117,
-242,228, 73, 77, 72, 72, 8, 66, 66, 66, 48,115,230,204,128, 38, 81, 66, 72,235,137, 19, 39,174,253,219,223,254,198, 60,191,224,
- 25,182, 23,123,150,177, 88,109,117, 86, 7,253,155, 63,114,210,211,211,169, 78, 55, 6,147, 38, 89, 49,115,230, 76, 18,232,239,
-185,145,228,239,205,221,191,102,205, 26,162, 86,171,233,220,185,115,121,253, 94,131,193,208,192,237,239,142,133, 11, 23, 98,225,
- 66,231,166, 69, 73, 73, 73,238,215,203, 26, 17,215, 22, 64,167,122,165, 48,228,193, 41,179,204, 93,186,116,145,103,103,103,131,
- 35,255,180,180, 52,196,181,105,227, 62,222,182,194, 45, 68,192,103,188,165, 63, 60, 2, 7, 75,202, 16,222, 55, 28,197,219,207,
- 1,114, 25,166, 60, 61, 27,209,241, 19,121,206,205, 14, 20, 95, 45,181, 75, 36, 98, 49,231, 1, 0,128,203, 23, 47, 52,235,185,
- 54, 22, 58, 16, 20,130, 91,167, 16,120, 42, 1,140, 55, 19,135, 82, 10,150, 2, 14,214,169, 4, 16, 2,124,243,117, 14, 30,157,
-156,138,150,177,173, 92, 19, 32,245, 99,175,108, 17, 83,134,158,247, 92,118,125,238,211, 43,196,229, 36,235,127, 95, 17, 68, 76,
-153,223, 55,228,233,238,247,118,222, 31,235,223,211,221,239,237,188,251, 90,246,166,160,215,235, 81, 91, 91, 11,139,197, 2,150,
-101, 81, 94, 94,238,114,255, 27,141, 70, 24, 12, 6,191, 66, 0,155, 62,120, 5,218,223,128,154, 11,128,205, 4,252,123,177,202,
-229,254,255,229, 48,240,235,213, 31, 32,242,179,253,106, 74,206, 33, 58, 50, 20, 49,209,161,184, 55,161, 7,138,206,151,227,116,
-113, 37, 58,196, 68,194, 82, 90,134,179,103,206, 54,168, 5,192,167,253,134, 40, 31,193, 48,213,116,108,218,178, 17,154,189, 27,
-145,181,124, 17,166, 44, 90,138,163, 54,160,188,178,140, 87,251,185,199,250,159, 24, 50, 8, 51,239,235,136,141,155,118,227,232,
-209, 11, 88,126,172, 16, 27,198,204, 6, 62, 58,128,226,226,242, 6,181, 0, 26, 67,188, 89, 6,135,181, 2, 86,107, 13, 0, 32,
-174, 93,123,116,239,209, 67,165, 87, 56,115, 49, 76,172, 17,140,165, 14,138, 58, 17, 74,175, 94,243, 69,168, 78,143,140,217, 12,
-179,217, 44, 7, 96, 5, 16,110, 54,155, 35, 60,151, 4, 6, 10,163,209,168,220,187,119,175,166, 71,143, 30,152, 53,107,150,170,
-162,162, 2,219,183,111,231, 61,216, 8, 33,195,100, 50,153, 33, 60, 60,220, 62,102,204,152,171,139, 23, 47,110,187,100,201,146,
-162,159, 15, 31, 29,191,225,184,229,148,141,133,223,251,177,222, 8,151,127, 48,201,223,211,250,231,114, 20,220,189, 0,124,100,
- 72, 36,127,168,228,203,151, 47,119,189,188,125, 6, 92, 43,124, 26,123, 54,210,250, 23, 3, 64, 92, 83,114,206,171, 59,157, 27,
-111,135,127, 57,124,126,198,140, 25,233,254,140,183,225,247,223,139,228,161, 9,120,227, 95,239,226,189,149,121,248,127, 95,236,
-198,188, 81, 73,184,246,109, 30,106,116,122,159,100,155,145,145, 65,210, 82, 30,132,205,102, 63,108,179,217,237,238, 10, 0, 0,
- 44,125,245,165,128, 9, 91, 32,250, 91, 11,111,177,127, 79,175, 64, 3, 5,128, 97, 24,212, 24,140, 16, 49, 4,118,187, 3, 44,
-165,176,179,206, 36,210, 35,191, 30,198,168,209,227,156,110, 50, 74, 33, 98, 68,168, 53, 90, 97,183, 90,124,107,152, 14,135,178,
-115,187,171,154,216,232, 26,151,150, 49,100, 96,152,115,216, 16, 2, 66, 40,250,245, 56,171,177, 59, 28, 74,190, 55,199, 89,247,
- 77, 37, 3, 6,100,189, 54,145, 92,227, 15,162,162,162, 80, 94, 94, 14,153, 76,134,218,218, 90,196,198,198,186,146, 2,205,102,
- 51,170,171,171,253, 82, 0,210,223,216,128,127, 47, 86, 33,178, 19,160,253, 13,120,102,153, 6, 97, 98, 17, 38, 63,251, 38,174,
-176,215,176,126,249, 11, 16, 49,252,229,113,214,255,128, 1, 9,136,237,210, 9,173, 98, 91, 66,202, 16,216, 9, 69,121,157, 9,
-186, 90,115, 64,237,247,222, 91,155, 49,169, 71,103, 68, 68,196, 32, 36,182, 45,108, 85, 58, 28,222,250, 37,170,171, 46, 5,212,
-137, 63,126,235, 41, 96, 65, 50,196,118, 43, 58,213, 1,101, 34, 61,254,125,245,103, 64, 26,193, 91,198, 47, 91, 14,170, 42, 24,
- 19, 46, 73,141, 72,186, 71,133,251,102,135,161, 40, 74,171,137,141, 61,172,105, 63,184, 8, 53, 76, 45, 44,212, 4,227, 23, 44,
-228, 97,225,124, 44,127,247, 9,158, 91, 5, 32, 13,214,192,253,254,251,239, 1, 0, 51,103,206, 84,117,239,222, 93,251,232,163,
-143,186, 44, 70, 62,228, 31, 27, 27,187,109,237,218,181,161, 25, 25, 25,162, 5, 11, 22,224,185,231,158,163, 7, 14, 28, 24, 76,
- 41,221,110,180,209, 30,148,210,159,252,183,230,162, 26,117,251, 7,154, 16, 24, 76,242,247, 36,120,119,133,101,205,154, 53,164,
-160,160,128,151,107,255,202,149, 43, 7,184,247, 89, 89, 89,174,151,231, 49, 14,209,209,209, 0,208,216, 36,120, 5, 64, 53, 0,
-230, 74,201, 53,252,248,227,143,174,152,255,128, 1, 3, 0, 0,217,217,217,248, 42, 55, 15,186, 90,179, 17,192, 82, 56,151, 6,
-242, 30,111,223,110,250, 7,198, 45,126, 26,227,199,143, 70, 75,153, 8,181,132, 98,251,233,203,248,241,183, 98,191,136,122,254,
-156,233,247, 23,157, 61, 43,190,124,241, 2,184,215,210, 87, 95,106,210,146, 23,112,123, 19,191,231, 49,111,104, 16, 2,144,201,
-100, 56,115,226,168,170, 83,219,104,141, 66, 34,134,195,193,130, 16, 2, 66,128,116,245,147,160,148,133,163,190, 30,128,209,108,
-198,201,211, 69,144, 74,125, 59,177,237,182, 42,244,187,239,188,251, 44,138,191, 46, 56,143,175,191,232,230,210,157,147,122,157,
-195,193, 35, 61, 32, 22,197,250,101,253,123, 35,126, 83, 77, 37, 0, 4,100,253,123, 27,104, 5,235,223, 2, 0,222,214, 63,224,
- 92,231,223,186,117,107, 88, 44, 22,148,150,150,194,225,112,160,101,203,150,168,172,172, 68,203,150, 45,235,219,149, 63, 97,151,
- 95, 59,139, 87, 94,215,160,230, 2,240,206,162,225, 48,216, 29, 88,184, 44, 27,239, 47, 78,195,162,229, 91, 33, 38, 4,126,240,
- 63,106, 74,206,161, 77,203, 22,144, 64, 2, 7, 8,174,158, 63,142,139,101, 53,232, 26, 27,141,111,127, 57,128,147, 39,224,183,
-245, 63,101,238, 66, 72,162, 1, 70, 4,172,203, 59,143,175, 63,124, 30,115,223,202,192,194,135,251,226,201,209, 29,253,106,191,
-237,117,117,120, 47,101, 42, 80, 45, 7,136, 4,120,239, 93,164,254,188, 15, 59, 70,207, 7,121,243,105,144,131, 47,240,178,254,
- 1,224,215,171, 49, 24,100,170,129, 65, 33,130, 81, 46, 71,215, 41, 18, 88,168, 9, 53,140, 4,118, 36,128, 58,140,176, 85, 92,
-197, 15, 31,212, 96,230,140,174,183,100,208, 22, 22, 22,210,122, 98, 32,147, 39, 79,214, 58,125, 99, 78, 12, 31, 62,156, 12, 31,
- 62,156, 15,249, 15,109,219,182,237,247,111,190,249,102,232,153, 51,103, 32,145, 72, 16, 17, 17,129,163, 71,143,218, 40,165,229,
-205,249,125, 77,173,201, 15,196, 59, 16, 76,242,247,180,254,157,196,122,253,242, 65, 62,185, 0,105,105,105,103,190,250,234,171,
- 33,118, 59,191, 21, 78,114,185,124,110, 19,167,107, 1,156, 7, 48,224,244,225, 3,112,143,249,255,117,238, 84,124,223,165, 11,
-184,112,192,182, 46, 93, 66,102,204,152,241,137, 63,227,237,177,228, 65,136,100,163, 96,132, 4, 95,175,120, 26, 31,110,253, 21,
-207, 63, 56, 12,115,150,103, 33,117,233,231,126, 89,224,238,197,132,188, 29, 19,214,239,223,157,104,224, 1, 16,137, 68,164,250,
-234, 89,156,187, 92, 9,177, 68, 4,187,131,133,205,238,192, 47,191, 20,226,179,207, 62,129,213, 65, 97,115,176,144,138, 25,148,
-233, 12, 40, 62,249,163, 74,161, 80,104,125, 16,161,178, 71,215,139,127, 88,255,206,169, 10, 95,127,145,224,156,227, 24, 10, 48,
- 20, 12,195, 98,112,223,147, 26, 7, 15, 47,128, 55,235,223,125, 21, 64,104,116,107,191,200,223,155,245,239,158, 85, 59,102,193,
- 42,191,200,203, 57, 41,234, 96, 48, 24, 32,145, 72, 92,214, 63,203,178,174,191,254, 42, 0,159,175,120, 9,191, 20,239, 65, 88,
-107,103,210, 95,184, 88,132,242,107,103, 17, 33,147,160,186,234, 10, 68, 12,129,152,225, 23,126,230,172,255,246,209,225, 56, 81,
-116, 30,118,171, 21, 50,177, 20, 6,131, 25,223,106, 14, 32, 73, 53,193, 47,242,231,218,239,145,167, 94,195,250,127,191, 15, 35,
- 11,180,239, 26,143,223,142, 31,196,194,135,251, 6,212,126, 0,176,176,107, 18,182,156,217, 13,212,216, 1,121, 75,236, 44, 56,
- 1,242,230,211, 88, 21, 23, 71,248,146, 63, 0,204,232,182, 88,251,195,206, 2,192, 90, 11, 3,169,133,142, 49,160, 70,108,131,
-205,161,135,204,108,132,188,228, 60, 54, 44, 57,131, 78,137, 9,104, 34, 1,176, 1, 20,110,153,175,114,185, 28,114,185,220,235,
- 57,190, 88,187,118, 45,214,174, 93,219,172,193, 28, 30, 30,254,204,217,179,103, 67, 35, 34, 34,160, 80, 40, 16, 29, 29,141,242,
-242,114, 16, 66,140,193,156, 52, 56,139, 63, 63, 63,159, 2,206,132, 64,127,146, 2,131, 77,254, 31,127,252,177,146,250, 94,235,
-206,107, 69, 64,104,104,104,186, 88, 44, 62,231,121,124,249,242,229, 13, 44,127, 0,232,216,177, 35,146,147,147,215,249,178,127,
-174,148, 92,107,144,237,255,202,223, 23, 64, 38,150, 34, 46, 46, 14,220,234,128,250,243,161,254,140,183, 63, 43,251,224,185,119,
-223, 71,109,105, 25, 98, 35, 90,225,248,137, 75,152,179, 60, 11, 25, 25, 25, 36, 16,178,230,190,231,254,125,119, 57,130, 39,224,
-206,192,175,191,254,218,100, 49,160, 70, 61, 0,245,147,136,182, 80,187, 89, 69,105,138,166, 83,219, 24,132,135,200,112, 95,175,
- 68,220,215,179, 47,196, 12, 96, 48, 57,112,233,106, 21, 10,180,223,169,194, 66, 67,124,254,131, 58,163, 17, 9, 29,175,194,108,
-145,131,114, 70, 13, 5, 20,114, 51, 40, 5,170,170,101, 0, 1,194, 67,237,232,157,112, 1,251, 14,245, 67,120,120, 56,111,235,
-223,221,226, 87, 68,198, 64, 66,109,128,253,143,249,206, 33,246,253, 27,221,173,127,119,139,159, 59,118,246,248, 97,215,181,124,
-170,236,185, 43, 1, 0,208,186,181, 83, 25,169,170,170, 66, 68, 68,132,203,253,239,143, 2,192, 41, 1,192,155,152,159, 54, 18,
-248,247, 62,124,248,242, 4,164, 46,122, 31, 89,111, 61, 9, 49, 33,144,202,248,173,216,225,172,255, 19,151,202,112, 79,251,150,
-248,232,191, 27,208,169, 83, 39, 68,182,237,138,190,109,187,194,102,249,195,253, 47,225, 33,147,179,254, 95,159, 59, 26,207,188,
-186, 14,237,187,144,102,181, 31,103,253,143,221,244, 49,118,204,156, 14, 18, 63, 24,128,179, 42, 32,224, 44, 17,204, 93,251, 76,
- 92, 28, 47,226,232, 99,121,129,100,189,187, 76,217,117,114,173,166, 83,183, 94,208, 43,128,243,184,136,218, 11,229, 40, 95,234,
-128, 65, 23,143, 5,179, 23,241,126, 32,171, 87,175, 38, 10,133,130,154, 76, 38,184, 89,158, 84,161, 80, 96,245,234,213,126,148,
- 39, 10, 30,106,107,107,223,121,242,201, 39, 83,214,174, 93, 43,143,140,140,132, 70,163,193,202,149, 43,245, 86,171,245,193, 96,
-254, 31,206,226,231,150,203,249,155, 16,152,156,156, 76,116,186, 49, 52, 24,228, 15, 0, 28,177,243, 33, 40, 30, 21, 6,173,179,
-103,207, 30,188,113,227,198,163,117,117,117,109,108, 54,231, 50, 83, 79,242,191,239,190,251, 48,120,240,224,137, 60,158,179,184,
-166,228, 28,222,248,199, 43,248,102,203, 54,140, 27,214, 31,187,242, 15, 58, 13,152,182, 93, 17,217,182, 43, 6, 20, 21,225,193,
- 41,179, 42, 46, 85, 26,199,118,136, 9,201,225,107,253, 63,151,185, 5, 75,254, 52, 22,109, 91, 43, 93,202, 5,119,143,124, 60,
- 55,129,120, 7, 4, 79,192,157,171, 20,240, 82, 0, 0, 32, 34, 60, 76,251,139,118,179,234,124,252,189,232,210,173,135, 38, 34,
- 84, 1,150, 2, 38,139, 21, 69, 69, 69, 40, 47,250, 85, 21, 30, 22, 10,134, 97,124, 14, 92,133, 92,142,141,223,143, 84,113, 25,
-240, 77,186, 35, 24, 6,161,161,252,173, 39,110, 9, 96,104,116,107,176, 14,155,147,252,235, 97, 35, 18,159, 37,118, 61,193, 45,
-169, 25,179, 96, 85, 3,210, 10,132,252,221,149, 0,247,194, 63, 85, 85, 85,190, 31,128, 15, 37,224,115,183, 85,194,107,151,254,
-245,143, 15, 54, 3,194,120,202,105, 31, 29,142,141,135,126,197,111,167,126, 71,146,106, 66, 3,210,247,135,252, 57, 60,242,212,
-107,248,186,127, 40,158,122,180,123, 80,218,111, 97,215, 36, 44,202,221, 8,242,198,171,216, 22, 55, 8, 43, 13,191, 53, 56, 63,
- 57,178, 5,226,229,254,237, 73, 49,163,219, 98,237,182,220, 28, 92,209,157, 67,121,229, 85,148,158, 14,131,200, 17,129,161,125,
-134, 67, 53, 91,117, 75, 39,181, 96, 84,251,163,148, 30, 34,132,140, 33,132,236,124,255,253,247,229,147, 38, 77,210, 27,141,198,
-177,129,196,252,155, 66, 48,150, 0,170,213, 81, 65, 33,127, 79, 43, 53, 72,168,152, 58,117,106,215,218,218,218, 55, 10, 11, 11,
- 23, 20, 23, 23,163,174,174, 14, 82,169, 20,109,218,180, 65,108,108,236,164,254,253,251,127,203, 83,214, 73, 0, 3,218, 71,135,
-227,129, 7, 30,192,175,103,138,209,178,115,207, 6,227,237,193, 41,179,140, 0, 62,224, 67,254, 28,254,172,236,131, 49,249, 63,
- 97,230,171,159, 97,196,136, 17,136,139,139,243,170,104, 5,171, 65, 56, 37,192,159,182,110, 76, 33, 19,148,136, 91, 71,250,188,
- 74, 1, 3, 64, 68, 68,132,214, 82,117, 89,249,139,246,180, 10,112,102,210, 82, 74, 33,147,201, 16, 25,193,187, 6, 54, 36, 18,
-137, 54, 82, 34, 9,250,205,113,174,126,145,221, 8,216,141,174, 12,120,142,248,253, 93,139,197,185,250,207, 30, 63,140,179,199,
- 15, 35, 54, 54, 22,229,229,229, 1, 17,127,100,108, 91, 88,121, 36, 71,242,197,204,215, 62,199,129,125,218,160,201,187,112,225,
-130,107,183, 63,155,197,124, 29,249,251, 67,252, 28,102,247, 15, 13, 90,251, 1, 0, 89,241,130,139,248, 57,242, 63, 95, 87,167,
-154, 28,217, 2, 15,243,180,250,189,225,161,206,169, 4,157,235, 63, 4,144,216,190,102,205, 26,194, 85,251, 91,189,122, 53,113,
-175,252,183,110,221, 58,178,122,245,106,215,251, 53,107,214,220,244, 65, 79, 41,221, 79, 8, 25,145,147,147,179, 80,175,215,175,
-160,148, 22, 4,251,127, 4, 99, 9, 96, 48,201,233, 6,193, 20, 30, 30,190, 80,169, 84, 46,108,166,156,253,199,142, 29, 27, 10,
-160,115,203,206, 61,141, 54,139, 57,164,126,188,233, 1,212, 0, 56,217, 33, 38,228, 49, 56,147, 5,121, 99,204, 43,107,111, 10,
-241, 55, 71,209, 18, 72,254,214, 32, 49, 49,145, 23,249,251, 52, 64,197, 98,177,214,151, 59,254,102,131,139,237,115,196,143,102,
- 18, 63, 23,155,174, 41,187,130,154,178, 43,136,141,141,109,150,197, 15, 0,118, 7,235,183,247,161, 41,148, 85,213, 4,252, 91,
- 60,193,197,246,131, 69,252,193,110, 63, 46,182,191,197, 96,160,238, 86,127, 63,177,164, 89,196,255,191, 4, 74,233,207, 0,166,
- 11, 45,113,235, 49, 99,198,140, 12, 0,159, 93,170, 52, 26,109, 22,179,123, 60, 50,162, 67, 76, 72, 20,252,220,253,143, 35, 85,
-119, 55,255, 29,164, 84, 9,184,137, 74, 0, 47, 67, 43, 49, 49, 81, 72,236, 16, 32, 64,128, 0, 1, 2,254,199,192, 8, 77, 32,
- 64,128, 0, 1, 2, 4, 8, 10,128, 0, 1, 2, 4, 8, 16, 32, 64, 80, 0, 4, 8, 16, 32, 64,128, 0, 1,130, 2, 32, 64,128,
- 0, 1, 2, 4, 8,184, 43,208, 96, 21,192,252,249,243, 3,206, 34,245,182,221,228,237, 46,239,240,225,195, 1,203,235,215,175,
-223, 13,151, 23,236,251,109,217, 50, 49, 96,121, 21, 21,191,222,234,231, 75,234, 21, 86, 22, 94,138,175,220,137,253,239,102,201,
-171, 47, 76,196,212,183, 33, 5, 64,231,207,159,207, 10,237, 39,200,187,147,228,101,102,102,138,211,211,211,237, 0,240,209, 71,
- 31,209,110,221,186, 97,196,136, 17, 68,104, 63,239,242,252, 86, 0,238, 6, 52,183,200,196,212,169, 83,149, 0,220, 75,134,170,
- 54,110,220,168, 21,116,197, 91,131,154,154,154,199,143, 29, 59,214, 87, 36, 18, 45,146,201,100, 48, 26,141, 47, 12, 27, 54,236,
- 93, 4,161,210, 30,165,212,239,106,140,119, 34,230,207,159, 79,193,115,147, 25, 1,183, 14,185,185,185,202,148,148, 20,109,128,
-223, 85,229,229,229,237, 14, 70, 65,169,122,121,143,229,229,229,109, 88,179,102, 77, 52,156,123, 26, 56,112, 11,170, 91,186,131,
- 35,255,189,123,247,210,159,126,250, 9, 73, 73, 73, 24, 49, 98,132,208,113,130,229, 1,184,211,145,159,159,175,108,206,247,167,
- 78,157,170,220,184,113,163,102,234,212,169,238,135, 53, 83,167, 78, 13, 88, 9,224, 20,138,236,236,108,174, 84,167, 95,178,210,
-211,211,169,159,255,175,201,245,192, 59,119,126,226,175, 60,149, 78, 23,122, 43, 20, 32,242,219,111,191,189,163,215,235,255,212,
-177, 99,199, 22, 21, 21, 21,168,223,110,247,237,175,191,254,250,237,208,208,208, 81, 15, 62,248,160,166, 89,255, 32, 0,242, 87,
-171,231,251, 61, 9,102,100,172, 38, 55, 79, 94,211,229,112, 27,219,244,133,239,248,218,184,113,163, 6,175, 18,144,127,121, 87,
-168,240, 42,193,212,147,105,126,183,235,184,113,227, 40, 0,108,223,190, 61, 40, 4,198,109, 5,172, 86, 71, 5,125,125,124,110,
-110,174, 50, 47, 47, 79,227, 15,217,254,229, 47,233,148, 82,231,214,234,222,240,240,195, 19, 85,121,121,121,154,148,148, 20, 18,
- 64, 63, 30,181,109,219,182, 93, 35, 71,142,196,188,121,243,104, 86, 86,214, 24,189, 94,159,239,207,111,243,162, 52, 98,218, 16,
- 41,212,243,212, 85, 47,124,177,248,219,183,166,191,245, 8,119,110,237,218,204, 38,127,227,172, 89,179, 40, 0,132,134, 54,190,
-181, 65, 93, 93, 29, 0, 96,206,156, 57, 1, 61,159, 83,135, 84,200,207, 60,130,228,244, 76,154,158,158, 46,212, 63,224, 1,174,
- 56,144,123,141, 0,177,143, 1,239,181,110, 54,143,122,218,183, 10,205, 34, 4,119,242,223,184,113, 35,153, 58,117, 42,117,147,
-235,247,253,114, 10, 5, 71, 52,245, 27,126,248,175, 80,100, 71,251,241, 95,147,125, 94, 81,247,240, 95,249,139,243,115, 95,155,
-198, 8,200, 79,175, 12,169,169,169,249,170, 87,175, 94, 83, 0, 48,148, 82, 40, 20, 10,148,149,149,161,186,186, 26,145,145,145,
- 40, 43, 43,219,253,253,247,223,171, 30,124,240, 65,191,148,147,252,252,124,202,109,204, 66, 8,193,148, 41, 83,144,156,156,172,
- 34,132,240,150,147,155,187,217,245, 62, 37,101,146,207,207,190, 96, 58,240,212, 31,205, 61,100, 85,131,207,158,199, 20, 67,124,
-111,170,196,109, 39,236,142,189,123,247, 98,233,210,165,215, 61,139, 47,190,248,130,242,108, 55,101,118,118,182, 6,175,146,122,
-130, 77,187,126,226,126,149, 52,219, 66,188,141,231,150, 6,150,118, 70, 70,134,138, 82,138,245,235,215,211,253,251,247,163, 79,
-159, 62, 62,191,123,160,145,154,140,155,178, 23, 33, 47, 47, 79,195,178, 44, 50, 51, 51,225,107, 91,101, 66,136,146, 82,234,234,
-175,223,126,251,109, 8, 33, 4,211,167, 79, 47, 5, 16, 55, 99,198,140,157,107,214,172, 97,252,177,216,223,221,249,174,235,253,
-181,237, 87, 65, 8, 65,214,179, 33, 0, 8,222,153,245,246, 35, 45, 91,182, 4, 0,124,249,105, 22,230,141,156,199, 75,230,128,
- 1, 3,208,165, 75,151,160,180,123,102,102, 38,147,158,158,206,126,244,209, 71,244,167,159,126, 66,233,233, 78, 64, 69,148,192,
-234,126,146,191, 39,152,166, 38,242,236,236,108,100,102,102, 82,111, 19,104, 32, 59, 67, 53,215, 66,247, 37,207,205,202, 14,216,
- 40,220,184,113, 35,217,184,113, 35,225,148, 0, 0,170,230, 40, 20,132, 16,164,165,165,129, 82, 74,220,126,155,223,138, 10,153,
-170,115,189,248, 28,247,133,176,173,171, 93, 47, 62,199,253, 33,127, 74, 41,184,221,217,124,237,210,230,173, 79,234,116,186,207,
- 34, 35, 35,167, 0, 96,230,206,157,139,153, 51,103, 66, 42,149, 66,161, 80, 64, 46,151,131, 16, 2,145, 72,132,154,154, 26,222,
-237,152,147,147,163, 84,171,213, 52, 39, 39, 7,110,207, 4, 95,127,253, 53,230,205,155,167,201,201,201, 81,222,142, 3,215,155,
- 66,112, 43, 60,107,217,217,217,154,140,140, 12,242,216,169,169, 94, 45,124,181, 90, 77,167,158, 76, 83,121,243, 12,248,194,188,
-121,243,232,243,207, 63,143,206,157, 59, 7,229,247,206,155, 55,143,170,213, 81,136,137,217, 21,212,118,216,188,121,243,232,252,
-252,252,221,125,251,246, 37, 31,126,248,161,150, 35,255,230, 96, 83,246, 34,172, 88,177, 2, 44,203, 98,209,162, 69,224, 35,211,
-157,252, 1, 96,219,182,109, 91,234, 93,225, 81,211,167, 79,183,143, 28, 57, 18,106,181,154,229,107,180,120,142,209,149, 43, 87,
-226,177, 7,156,182, 97,214,179, 10, 76, 27, 34,197, 11,227,158,231,125, 79,161,161,161, 24, 49, 98, 4,210,211,211, 73,114,114,
-178,215, 23,119, 13, 95,101, 47, 61, 61,157, 5,156,219,172, 3, 64, 68, 72,133,192,234,205, 36,255, 38, 21, 0,142,172, 10, 11,
- 11, 93,101, 39,221,173, 39,127,137,214,101, 65, 4,121, 82,242,162, 12,168,130,217,120, 27, 55,110,212, 4, 65,134, 75,161, 72,
- 75, 75, 83,113,109,120, 55,193,157,252, 1,160,184,184,216,117,238,202,149, 43,188, 21,198,154,154,154, 55,141, 70,227, 44,134,
- 97,152, 25, 51,102,160,166,166, 6, 37, 37, 37,144, 72, 36, 16,139,197, 16,139,197,144, 72, 36, 80, 40, 20, 48,153, 76, 94, 75,
-162,122,153,224,148, 59,119,238,212, 16, 66,144,154,154,138, 53,107,214,144,228,228,100,146,145,145, 65, 82, 83, 83,185,254,163,
- 17,166,138,166,201,191,190, 45, 85,220, 36,238,254,236,211,210,210, 84,201,201,201, 90, 32,176,146,180,201,201,201,100,205,154,
- 53, 36, 59, 59, 27,148,210,160, 40, 99, 47,189,244, 18,178,179,179,121,245, 17, 95,248,230,155,111,198, 28, 58,116, 40,191, 83,
-167, 78, 48, 24, 12, 52, 52, 52,148,238,219,183, 15,128, 43,201, 50, 32,242, 95,190,124, 57, 8, 33, 96, 24, 6,135, 14, 29, 2,
- 39,211, 15,143,196, 35,132, 16, 76,155, 54,205, 94,127,200, 58,125,250,116,189, 82,169,196,188,121,243,216,111,191,253,214,231,
-189,187,135,194,174,109,191, 10, 16, 96,253, 51,127, 84, 45,206,122, 54, 4,211,135,202,176,248,193, 23,120,255, 46, 62,150, 63,
-159,107,246,238,221, 75, 51, 51, 51, 93,175, 67,135, 14,193,112,105, 0, 96, 53,129,132,217,145,255,250, 73,184,159,231, 94,194,
-200,109, 72,254,233,139,223,242,122, 94,220,212,128, 44, 42, 42,162,133,133,133,200,206,206, 6,247,158,115,237,248, 51,200,111,
- 52,249,187, 91,213,220, 36,116,187,194, 61, 36,112,183,129, 82,138,226,226, 98, 92,187,118,205,117,204,243,179, 15,136,126,252,
-241,199,241, 9, 9, 9, 16,137, 68, 56,123,246, 44, 40,165,248,253,247,223, 97,181, 90, 65, 8,129, 88, 44, 6, 33, 4, 14,135,
- 3, 70,163, 17,155, 54,109, 66,114,114,211, 97,143, 93,187,118,105, 0, 32, 53, 53,245,186,126, 91,255,153,114, 68,193,167, 95,
-123,186,245,125,125,230, 99,229,115,104, 44, 28,192,199,245,239,101,242,108,118,146,148, 43,230,239,166,192,113, 10, 44, 23,243,
-207,119, 35,255, 64,172,117, 78, 9,227,200,104,215,174, 93,154, 64,195, 0,156,188,110,221,186, 93, 71,110,129, 96,245,234,213,
- 56,121,242, 36,141,141,141, 69,187,118,237, 92,219, 62, 95,184,112, 1, 34,145, 8,255,249,207,127, 2,250, 7, 35,135, 58,183,
- 47, 99, 89, 22,127,251,219,223,176,114,229, 74,236,219,183, 15,132, 16, 60,156,242, 23, 92,188,192,111, 3,199,109,219,182,109,
-174,127,198,102, 56, 87,200,176, 0, 48,125,250,244,106, 0, 45,242,242,242, 64, 8,225,173, 80, 57,173,255,235,247, 49,113,134,
- 3,128, 47,179, 14, 35,183, 38,247,166,121,203, 78,157, 58,133, 67,135, 14, 53, 56,230,168, 62, 15,187,141, 5, 72, 45, 90, 60,
-104,195, 33,143,205,174,147,146,146, 4,230,231, 65,254, 77, 42, 0,245,110, 23,194, 89,253, 28,249,123,141,253,249, 65,214, 77,
- 89,130,124,226,196,190,228,121,158,191, 85, 59, 82, 77,157, 58,213, 61,214, 76,189,157,231, 60, 3,205, 34,221,141,193,141,131,
- 25, 38,206, 15,200,242,111,108,178,141,143,143,191,238,218, 38,158, 73,139,232,232,232, 94, 22,139, 5, 85, 85, 85, 56,112,224,
- 0, 68, 34, 17,172, 86, 43, 76, 38, 19, 88,150,117,237, 74,105,179,217, 96,177, 88,120,133, 24,184,231,208, 88,191, 77, 78, 78,
- 38, 57, 57, 57, 52, 59, 59,219,167, 50,225,180,186,110, 76, 14,128, 98,200,170,235,136,158,251, 28,136, 34, 48, 98,196,136,230,
- 43, 1, 30, 49,255,252,252,124,165,139,236,255,136,249, 7,148, 35,227,161,132, 1,112,238,182,168, 86,171, 41,159,231,192,215,
- 11, 80,159,251,224,119,110, 1,183,179, 99,187,118,237, 16, 17, 17, 65, 60,149,221, 94,189,122, 5,108,249, 83, 74, 97,183,219,
- 93,199,134, 13, 27,134,125,251,246, 97,207, 15, 14,188,187,140, 95,140, 61, 55, 55,119, 92,125,236,255, 4,128,150, 0,220, 55,
- 27, 42, 1,208, 2, 0,242,242,242, 52,125,251,246,245, 41,175, 97,236,223,139,167,160,254, 47, 95,121,193, 64,122,122, 58, 73,
- 74, 74,162,154,207, 98, 97,175,254, 21,132,173, 6, 28,206,157, 86, 25,145, 29,250,125, 12, 36, 82, 49, 44,142, 22, 56,120,161,
- 47, 94, 89,174,195,161, 67,135,136,183,101,213, 2,252, 84, 0, 60, 61, 1,254, 90,254, 69, 69, 69, 52,152,238,110, 95,242,234,
-195, 18, 65,243, 52,100,102,102,146,244,244,244,128,190,235,249, 59, 51, 50, 50, 12,106,181, 58,172,177,243,129,194, 61,246, 31,
- 12,101,192, 61,246,207, 87, 25,152, 57,115, 38, 66, 67, 67, 17, 22, 22,134,240,240,112, 68, 70, 70,178, 81, 81, 81, 76, 94, 94,
- 30, 30,127,252,113,215,117,114,185, 28, 99,199,142,133, 90,173,166,141,236, 86, 21, 99,181, 90, 81, 85, 85, 5,179,217,140,200,
-200, 72,200,100, 50,216,237,118, 80, 74,225,112, 56, 96,181, 90, 97,179,217,224,112, 56,252,202, 47,240, 21,178, 74, 77, 77,197,
-237, 16,154,241,149, 16,232, 47, 56, 37, 32,224,254,245,175,198,219,110,234,201,180,250,188,155,192,100,123, 90,255,238,138,100,
- 32,201,128,158,214,127, 83,138, 41, 95,242, 23,137, 68, 52, 34, 34, 2,112, 38,212, 17, 0,212,102,179,161,166,166, 6,173, 90,
-181, 10,232,190, 57, 99, 74, 44, 22, 99,193,130, 5, 56,116,232, 16,254,136,251,243,239,211,223,127,255,253,247,195,135, 15, 7,
-128,112, 56,195,185, 70, 0,216,176, 97, 67,171, 61,123,246, 68, 80, 74, 93,202, 54,159,117,226, 43,223, 95,137,105,131,175,183,
-254,103,254,219,136, 13, 7,108,160,148,162,223,140,126,152, 55,114, 30, 9,116,221,121,160, 74,128,106,118, 38,253,126,101, 71,
-136, 13,122,192,238,252,215, 44, 0,169, 24, 40,190,214, 2,187, 47, 13,112,100,126, 89, 46, 58,116,232, 16, 73, 74, 74,146,227,
-127, 28,124,172,127,128, 71, 37,192,252,252,124,151,235,223, 61, 31,128, 15,186,116,233, 66,210,210,210,130, 22,147,231, 33, 47,
-224,248,250,212,169, 83,169,231, 43, 63, 63,159,229, 86, 5,184,173, 8, 8,180, 19,135,221,205, 29, 46, 51, 51, 19,203,151, 47,
-111,208,175, 56,242, 79, 73, 73, 65, 74, 74, 10, 0, 96,207,158, 61, 77,137,137, 46, 42, 42, 50, 59, 28, 14,232,116, 58, 84, 84,
- 84, 64,167,211,193,104, 52,194,104, 52,194, 96, 48, 64,175,215,163,166,166, 6, 38,147, 9, 22,139,197,149, 20,212, 36,137, 17,
-130,156,156, 28,191, 20,182, 59, 25,123,247,238,109,240,114,199,169, 83,167,148,238,159,249,196,156, 61, 99,254,158,150,123,115,
-178,246,189,125,119,205,154, 53, 36, 39, 39, 39,168,185, 0, 57, 57, 57,188,231, 46,142,252, 25,134,161,245,253,203,229,250,103,
- 89, 22,165,165,165,232,214,173, 27,153, 63,127,190,223,191,229,229,197, 35,177,103,207, 30,176, 95,181, 0,165, 20, 43, 86,172,
-112, 61,163,189, 7,120,231,237, 33, 55, 55,119, 18, 0, 76,159, 62,189,184, 94, 1,176,124,249,229,250, 86,243,231,207,111,181,
-103,207, 30, 60,244,208, 67, 99,252, 89,166,120,109,251, 85, 16, 16,172,119,179,254,103,188,111,132,104, 90, 13,190, 60, 96,197,
-115,207, 61,135,101,223,191,125, 43,230, 21, 17,167, 4, 60,248,156, 29,212, 20, 9,232, 1,232, 1, 81, 45,160, 47, 5,182, 29,
-110,131,204, 47,203, 69,245,222, 2,113,122,122,186, 89, 32,127,223,228,239,211, 3,144,153,153,217, 32,238,239,158, 15,192,119,
-237,101,189,187, 80,197,185,229,155,235,146,247, 38,143,115,251, 39, 39, 39,107,131,181,132, 40, 57, 57,249,183,252,252,252, 94,
-183,227, 3,230,172,254, 96,185,255, 57,171,223, 95,247, 63,135,245,235,215,187,222,255,243,159,255,196, 39,159,124, 2, 0, 86,
- 0, 82,142,248, 1, 96,236,216,177,190, 20, 0, 83, 66, 66, 2,140, 70, 35,172, 86, 43,202,203,203, 33,147,201, 32, 22,139, 93,
- 30,128,186,186, 58, 24,141, 70, 88, 44, 22,212,212,212, 96,202,148, 41, 62, 21, 76,206,186,111,106, 89, 43,119, 29, 31,220,200,
- 28,128, 64,206,123,130, 91,238,231, 13, 43, 86,172,208, 44, 88,176, 64,213,189,123,119,237,173,236,195,141, 89,255,238,240, 39,
- 23,160, 49,235, 63, 80,203,159, 97, 24,202,178, 44, 1,240, 15,174,107, 59, 28,142, 87, 67, 67, 67, 17, 31, 31, 31,208, 28,243,
-202,139, 35,161,213,106, 65,114, 98, 0, 0, 59, 94, 9,199,216,215,107, 49, 98,196, 8,188,177,108,143, 95,133,169,182,109,219,
-182,105,228,200,145, 0, 80,190, 97, 67, 86,187, 61,123,246,181,160,132, 98,252, 67,227, 83, 82, 82, 82,182,248, 51,157, 0,206,
-216,255,180, 33,146,134, 22, 63, 40, 22, 60,183, 0,113, 99, 91,223,178,130, 89,233,233,233, 13, 52,124, 90, 11,200,172, 0, 75,
- 9,236, 14, 10, 25, 5,226, 20,140,251,245,118, 8,112,242,247,178, 23, 27, 85, 16, 56, 15,172,152,143,229, 63, 96,192,128,235,
-242, 1,252,113,209,121,146,118, 16,200,217, 83,158,230, 6,116,188, 94,249,249,249, 65,147,119,183, 38,254,113,133,101, 56, 55,
-113,118,118, 54,158,120,226, 9, 0,144,114,215,184,159,171,159,180, 26,195,241,193,131, 7, 63,174,213,106,179, 29, 14, 7,244,
-122, 61,108, 54,155, 43,238,111, 54,155, 93, 75, 12,185,196,192,177, 99,199,106,121,244, 23,146,157,157, 77,235,189, 0, 13,250,
-109,126,126, 62,119, 28,201,201,201,188,188, 85, 55, 59, 7,192, 51, 44,224,235,121, 52,117, 94,173, 86,211, 21, 43, 86,104, 30,
-123,236, 49,124,245,213, 87, 1, 61,115,207,229,183,220,231,141, 27, 55,106,210,139,213,152,234,195,210, 30, 55,110, 28, 61,127,
-254, 60,190,255,254,251, 70,219,251,252,249,243, 0,128,237,219,183,251,252, 61,105,105,217, 52, 45,109, 52,198,140, 41, 66, 81,
- 81,145,215,236,242,202,202,209, 0,116, 80,171, 27,159,183, 56,242,183, 90,173, 84, 42,149,114,215,252,163, 94, 33,120,245,226,
-197,139,232,216,177, 99, 64,150, 63,195, 16,167,194,206,145,255, 81, 59, 62,209, 88, 1, 0,111, 44,219,227,247, 28,193,141,137,
-249,243,231, 39, 82, 74, 49, 97,226,132, 41, 15, 79,124,248,155, 64,166,166, 73,143, 62,114,130, 16,114, 31,165,128,104, 90, 13,
- 40,165, 88,176,112, 1, 90,143,109,243, 71,224, 35,112,112,236, 76,209,140, 74,130,153,153,153,116,227,139,109, 17, 86,121, 30,
-231,244,241,232, 44, 43, 7, 66,227, 32,174, 43, 69, 68, 93, 37,128, 86, 46,143,129,167,210, 32, 32, 0, 15,128,251,114, 63, 15,
- 87, 31,205,206,206, 6,223,132, 41, 79,210, 14,214, 15,119,151, 23,132,245,255, 2,154, 9,119, 23,186, 59, 9,113,245, 36, 60,
-207, 53, 18, 67,180, 3,248,122,228,200,145, 79,231,229,229,125, 96,183,219, 81, 93, 93,237,202, 1, 0,128,242,242,114, 84, 87,
- 87,131, 82, 10,127,194, 75, 99,198,140, 81,237,220,185, 83,147,157,157,141,156,156, 28,234, 25,243, 31, 51,102,140, 95,197,128,
-110, 4, 76, 7,158,242,155,240,189, 17,124, 83, 74, 64, 70, 70, 6,153, 55,111, 30, 13,132,252, 27, 36, 0,186, 61,119,183,164,
- 64,127,189, 0,141, 42,238, 23, 46, 92,112, 41,104,124, 13, 13,247, 80,229,245,247,205,111,174,170,169,169,161,145,145,145,238,
-228,255,170,197, 98, 65, 73, 73, 9, 58,119,238, 28, 16,249,171,213,106,202,126, 21,133, 29, 71,157,198,233, 58,141, 21, 27, 14,
- 88, 65, 41,197,190, 31, 3,143, 44,238,221,187, 23, 15, 61,244,144, 42,208,242,193, 28, 65,179, 44, 43, 1,128,175,126,180,225,
-185,231,158, 67,235,113,109, 60,252, 3,254,129,171,242, 55, 98,196, 8, 10,120, 95,238,231, 86, 9,144,247,243,237,200,212, 1,
-177,137,120,124,109, 13,128, 56,103, 27, 60,217, 18, 29,196,151,241,122,114, 25, 62,213,104,132,170,128,104, 88,233,207,211,242,
-247, 60, 47,110,106,162,200,204,204,164,222,150, 77,249, 19, 2,240, 66,218, 65,131,135,188,160,174,255,247, 40, 7,236, 55,210,
-210,210,192, 35, 97,145, 55, 26,115,247, 7, 26, 6,104,204,221, 31, 72, 24,192,189,188,172, 39,249, 52,117,174,177, 91, 37,132,
-172,154, 48, 97,194,154,245,235,215,219,164, 82, 41, 44, 22, 11,236,118, 59, 88,150, 69,139, 22, 45,160,211,233,144,230,231,210,
-179,212,212, 84,109,106,106, 42,217,185,115, 39,205,201,201, 65,118,118, 54,184,186, 0,183,115,229,185, 96, 99,247,238,221,116,
-194,132, 9,216,186,117,107,179,201,223,147,228,242,157, 10,153, 79,111,220,243,207, 63,127,157,113,225,137, 23, 94,120,129,242,
- 77,242, 84,171,163,124,202, 83,171,249,197,255, 21, 10, 87,233, 75, 74, 41,133,209,104, 68, 73, 73, 73,192, 49,255, 6,158,143,
-215,107, 27,124,110, 14,249,127,248,225,135,193,234,179,108,238,183, 91,186,185, 87, 2, 12, 22,154, 82,200,214,173, 91,231,151,
-245,175, 78,237, 90,242,241,105,180,205,200, 57, 7,119,238, 25,241,159, 76,186,123,222,189, 56, 83,170,192,153, 51,103,160, 82,
-169, 32, 32, 8, 30, 0, 0,104,140,228,111, 71, 45,235,118, 91,255, 31,140, 37,126,127, 40, 34,201, 65,251, 93, 83,167, 78, 85,
-249, 91,222,215, 7, 49, 80,119,133,198, 91,162,149,231, 57,158,132,107,159, 57,115, 38,217,177, 99,135,242,210,165, 75, 26,147,
-201, 4,135,195,129,251,238,187, 79,149,148,148, 20,240,243, 30, 51,102, 12, 25, 51,102, 12, 55,195, 7, 20,154,185,209, 57, 0,
-190, 62,243,177, 56,235,179,195, 27, 18,142,159, 69,102,184, 54,194,171,132,230, 35,237, 58,123, 48, 61, 61,157,166, 23,171, 65,
- 26, 22, 2, 34, 0,112,230,204, 25,218,196, 88,245,217,232,163, 71,143, 38,126,140,125, 18,140,107, 0,160,170,170, 10, 10,133,
-130, 18, 66,208,177, 99, 71, 16, 66, 72,183,110,221,208, 92,242,103, 30,211,129, 16,130,148, 71,156,171,138, 8, 33,174,229,126,
-156, 59,255, 22,129, 29, 48,171,127, 80, 5,206,153, 51,135, 83,254,195,234,189,122,118, 56,221,255,172,219, 53,126,221,112, 70,
-206,185,182,238,220,195,185,250,211,211,211,137,122,195, 61,135,103, 0, 0, 32, 0, 73, 68, 65, 84,151,134,158, 57,115, 70, 96,
-243, 96, 43, 0,119, 10,130,177,214, 63, 88,132,125, 3, 20,155,160,254,174, 96,111,236,115,163,173,231,250, 24,191,215,255, 97,
-181, 90, 33, 18,137, 32, 18,137,110, 98, 95, 91, 77,110,111,121,141,143,133, 89,179,102,249, 47,240,213, 63,246,177,200,206,206,
-110, 48,105,167, 23,171,221, 45,111,237,221, 48,151,180,110,221,154,252, 49, 86,156,201,182,205, 37,127,231, 51,105,106, 43,160,
-235,177,122,245, 79, 55, 77, 35,152, 55,114, 30,185,217,115,130,159,243, 70, 40,156, 57, 69, 54, 55,229,211, 21,231, 87,169, 84,
- 68,176,252,125,195, 91,104,128, 36, 38, 38, 10, 5, 19, 4, 8, 16, 32, 64,128,128,255, 49, 48, 66, 19, 8, 16, 32, 64,128, 0,
- 1,130, 2, 32, 64,128, 0, 1, 2, 4, 8, 16, 20, 0, 1, 2, 4, 8, 16, 32, 64,128,160, 0, 8, 16, 32, 64,128, 0, 1, 2,
-238, 10, 52, 88, 5, 48,127,254,252,128,179, 65,189, 21,118, 17,228, 9,242, 4,121, 55, 79,222,146, 37, 75, 26,106,247, 12,227,
- 90,230,232,190,212,140,171,166,232,190,244,204, 91,249,224,176,176, 48,200,229,114,215,247, 25,134,113,173,184,112,151,199,109,
-204,196,178,206, 85, 94,220,102, 57,194,243,245, 71, 30, 81,138,196, 50, 80,214, 14,150,181,107, 3,145, 71, 41, 85, 29, 57,114,
- 68,156,152,152,152, 15,143,170,123, 1,202, 83, 30, 57,114, 4,137,137,137, 90, 97,188,221,121,242,252, 86, 0,254, 23,241,242,
-203, 5, 13, 26,238,141, 55, 6,146,219, 74, 94,193,203, 20, 0,222, 24,248, 6,113,127, 31,168, 60,174, 82,156, 90,173, 70, 70,
- 70, 70, 83,215, 53,121,222, 93, 30,220,150,233,113,223,113,255,190, 90,173,118,157,227, 43,247,127, 17,140,181, 78, 89,254,219,
- 1,140,136, 42,215,180,179, 95,198,105,218, 25,135,234,162, 85, 17, 9,131, 32, 13, 13,215,250,250,254,254,253,251, 49,108,216,
- 48, 23,241,115,132, 77, 8,185,142,176, 89,150,117,189, 46, 94,188,232, 85,222, 47,191,252,130, 1, 3, 6, 64,161, 80, 64, 44,
- 22, 67, 36, 18, 53,144,201,145,190,195,225,112,189, 44, 22, 11, 10, 11, 11,113,207, 61,247,220,141,143,136, 56,121,145, 42,127,
-255,253,119,156, 57,115, 70,211,162, 69, 11, 12, 31, 62,188, 89, 99,156, 16, 70, 41,147, 71,163, 69,212,189,154, 58, 67,177,202,
- 80,123, 89,233,175, 12,150,101,149, 57, 57, 57,187, 79,159, 62,141,173, 91,183, 66,161, 80, 96,209,162, 69, 34,184,173,189, 15,
- 64,158,166,232,220, 89,236,220,177, 29, 82,153, 12,207, 61,183, 96, 20,165, 84, 35,140,212,187,212, 3,112, 39, 33, 39, 39,199,
-167,198,147,154,154,234,115, 96,114, 4,237, 73,220,129, 34,216,242,130, 13,183,202,124,188, 38, 45, 62,165,101,249,202,171, 87,
- 4,154, 85, 93,156,171, 42,232,254,255,239,248, 81, 72,169,242,196,254, 29,136, 56,255,163,198,104,180,192, 54,136,129, 34,158,
-160,219,165,163,184, 63,156,106,116,229, 63,227,215,144,217,170, 10,210,174, 73, 37,224,196,137, 19, 16,137, 68, 24, 62,124, 56,
-196, 98,177,235,197, 41, 4,156,213,111,183,219,225,112, 56, 96,179,217,112,241,226, 69,236,222,189,219,171, 60,163,209,136,195,
-135, 15, 99,240,224,193,144, 74,165,144, 72, 36, 13,100,178, 44, 11,187,221, 14,187,221, 14,155,205, 6,147,201,132,195,135, 15,
-195, 96, 48,220, 22,250, 84,125, 63, 99,240, 71, 33,154,128, 57,122,201,146, 37,172,199,220,130,218,218, 90,196,196,196, 4,180,
- 0,125,201,146, 37, 13,126,207,231, 89,133, 80, 40, 90, 65, 36,146,106, 12,181,151,253,150, 89, 80, 80, 0,131,193,128,193,131,
- 7, 95, 76, 78, 78,110, 83, 89, 89,137, 29, 59,118, 56,162,163,163,145,148,148,212,228, 24,153, 51,110,244,117,109,115,236,212,
- 41,104,195, 67,176,112,197,191, 46,247,235,223,171,253,213, 43,101,216,145,167,221,221,169, 87,191,100,189,190,102,151, 64,157,
-183, 63,184,210,191,238,240,172, 5, 32,110,106,146,229, 38, 87, 95,159,111, 5,249,255,245,175,127,109,242, 26,157, 78,135, 47,
-191,252,146,242, 81, 2, 56,178,110,174,181,126, 35,228,185, 91,254,205,181,254,221, 72,152, 0,160,106,181,218,231,198, 49, 60,
-201,154,112,196,206, 89,251,238,150,191, 59,213,241,237, 51,110,158, 10,234, 94, 78, 24, 0,170,170,156,149, 17,163,163,243,239,
-138,129,122,225,167,124,220,115, 89,163,185,108,100, 49,249, 30, 17,238,141,181,131,141,166,144, 68,139, 80, 91, 41,133,162,214,
-132, 30, 71, 86,105, 10, 19,230,169,140, 33, 29,181,141, 91,146, 4, 39, 79,158,132, 84, 42,197,168, 81,163, 92,164, 45,145, 72,
-192, 48, 12, 40,165,176,217,108,176,219,237,176, 88, 44,184,124,249, 50, 52, 26, 77,163, 91, 42, 51, 12, 3,155,205,134, 35, 71,
-142, 96,248,240,225, 80, 40, 20,144,201,100, 46,121,156, 2, 96,177, 88, 96, 48, 24,112,236,216, 49,152,205,102,191, 10, 51,105,
-181, 90,165, 72, 36,210,212,214,214, 66, 42,149,162,172,172,236,169,201,147, 39,215,202,229,242,207, 3, 33,109,173, 86, 59, 85,
- 36, 18,125,229, 38,239,244,228,201,147,127,151,203,229,169,112,238, 80,233,183, 37,252,202, 43,175,104,150, 46, 93, 90,134,250,
- 29,103,150, 44, 89,130, 19, 39, 78,160, 85,171, 86,141,214, 93,247, 69,254, 31,207,157,139,241,253,250, 1, 0, 90, 63,253, 52,
- 20, 33,113, 48,232, 47, 65, 95,115, 78, 69,169, 67,235,175,204, 62,125,250,160,172,172, 12,251,247,239,239,200, 48, 12,142, 29,
- 59,134,232,232,104,236,221,187, 23, 86,171,213,103, 59, 86,190,185,176,193,231, 48,171, 13,109,237,102, 60,247,252,171,237, 87,
-188,251, 79,188,243,238,135,104,199, 56,240,225,187,203,243, 71, 77,155, 33,176,235, 29, 72,254,220,113, 94,123, 1, 0,215,215,
-255,246,245,249,102, 34,152, 59,245,221, 9,112, 87, 2,154,233, 1,224, 8,150, 0,160,159, 60,250,153, 87, 66,126, 98,211,108,
-222,100, 93,239,218, 39, 94, 38,108,247,239,187, 20, 4, 62, 33, 0,238,127,123,254,245,244, 0,220,233, 48, 87, 87, 40, 71, 88,
- 14,107,202, 68, 14,220, 19, 9,116,236, 64, 33,234, 35,133,184, 75, 23, 72, 45,102, 88,126,184, 12, 75,141, 24, 34, 86, 2,115,
-254,231, 26,102,252,179, 42, 86,236, 61, 28,192,185,231,207,158, 61,139,168,168, 40,168, 84, 42,200,229,114, 72,165, 82,136,197,
- 98,151,213,111, 54,155, 81, 82, 82,130, 61,123,246,128, 97, 24, 48, 12,131,166,228, 57, 28, 14, 28, 63,126, 28,195,134, 13, 67,
- 68, 68, 4,228,114, 57, 68, 34, 17,236,118, 59,172, 86, 43,244,122, 61,126,254,249,103, 88, 44, 22,136,197, 98, 87, 46,128, 47,
-124,241,197, 23, 74,131,193,160, 57,127,254, 60,244,122, 61,164, 82, 41, 90,183,110,189,106,223,190,125, 24, 50,100,136, 56, 52,
- 52,244, 19,127,148,128, 47,190,248,226, 81,131,193,240,149,135,188,132,125,251,246, 37, 12, 25, 50,228,203,208,208,208, 84,190,
-242, 88,150, 85, 90,173, 86, 84, 85, 85,105,220, 60, 10, 0,128,165, 75,151, 22, 47, 89,178,164, 93,106,106,234, 40,185, 92,238,
-215,252,199,136,164, 74,207, 99,215, 62,248, 0,173, 39,197,227,157,119,222, 87,217,108,117, 1,205,167,251,247,239,215,252,244,
-211, 79,120,241,197, 23,245, 34,145, 40, 66, 46,151, 99,200,144, 33,208,104, 52,200,203,203, 67,187,118,237,252,240,119, 16,124,
-113,246, 42,190, 62, 83,140,220,111, 63,133, 72, 68,176,240,233,199,217,190,173, 91, 50,153,207,189,138,181,254,202, 19,112, 75,
-200,223, 83, 57,245,166, 20, 4,188, 10,224, 86,111,111,219,165, 75, 23,149,175,215,205,182,214,111,132,188, 96, 88,253,141,225,
-147, 71, 63, 35, 79,108,154, 77,189,145, 63,248,135, 8, 26, 88,250, 85, 85,201, 46, 11, 29,127,108, 1,234,183,219,191, 41,162,
-143,142,206, 15,200,250,183,219,237,202,159,127,254,153, 54,118,204,243, 92, 99,112,191,222,110,183, 43, 61,207,121, 30,107, 10,
- 85,199,127,209,148, 20,235,209, 42, 92,140, 46,225, 20,226,150, 44,196, 15, 60,136,208,190,159, 67,209,255, 61,200, 34, 21,144,
- 26, 76, 48, 26, 29,232, 32, 50, 98,239,250,198,149, 39,134, 97, 32, 22,139, 33,145, 72,112,230,204, 25, 28, 59,118, 12, 17, 17,
- 17,136,137,137, 65, 76, 76, 12, 90,182,108,137, 22, 45, 90,160,166,166, 6,123,247,238,133, 72, 36,114,197,246,189,129, 59, 47,
-149, 74,225,112, 56,112,250,244,105,132,132,132,160,101,203,150,104,213,170, 21, 98, 99, 99, 17, 22, 22,134,211,167, 79,195,102,
-179,185, 66, 4,141, 41, 20,158,150,127,105,105,169,230,220,185,115,232,220,185, 51,198,141, 27,135,129, 3, 7,194,104, 52, 98,
-247,238,221, 56,114,228,200, 71,102,179,153,119,237, 98,173, 86,171, 42, 45, 43,255,166,232,106, 13,194,239, 25,140,132,113,127,
- 66,187,129, 41,208, 89, 24,236,204,223,133, 35, 71,142, 76, 54,155,205,127,225, 75,254,122,189, 30, 71,143, 30,213,236,223,191,
- 31,125,250,244,193,146, 37, 75, 90,162, 62,158,190,100,201,146,118, 0,224, 15,249, 51, 34,169, 50, 52,172,173, 50, 58,166,151,
-102,253,134,163,152,251,241,199,200, 59,124, 24,121,135, 15,163,245,211, 79, 3, 0,108,182,186, 61,129,140,227,188,188, 60,154,
-155,155,139, 41, 83,166, 92, 12, 15, 15,103, 66, 66, 66, 10, 11, 10, 10,176,127,255,126, 84, 84, 84, 32, 33, 33,193, 47,121,239,
- 31, 62,131,119, 15,254,134,181,239,190,116, 84, 44, 50,129,113,212,226,237,149, 31, 51, 95,237, 45, 68, 9, 35,198,189,247,222,
- 43,176,236, 93, 2, 38, 80,130,191,133,155, 87,220, 24, 11,251,229, 2, 26,204,184,125,176,229,221, 72, 69,224,137, 77,179,169,
-251,171, 49,175,128, 47,175,194,117,228,214, 80, 25,240,215, 83, 65, 26, 59,238,233, 21,224,131,218,218, 90,229,174, 93,187, 52,
- 5, 5, 5,141, 30,115, 63,215, 20,220,175,223,181,107,151,166,182,182, 86,233,126,206,243, 88, 83,136, 48, 87, 34,239,146, 25,
-219,206,179,184,172, 35, 40, 45, 7, 24,113, 36, 24, 18, 3, 98,150,161,174,148,224,232, 37, 22,199, 46,153, 81, 89,107, 67,239,
-104,153,134,143, 2, 32,147,201,112,238,220, 57,156, 58,117, 10,209,209,209,136,138,138, 66, 84, 84, 20,140, 70, 35,246,239,223,
- 15,137, 68, 2,169, 84,218,228, 94, 10,156,119,128, 83, 2, 40,165, 40, 42, 42, 66,116,116, 52,226,227,227, 17, 27, 27,139,162,
-162, 34, 56, 28, 14,200,100, 50, 72,165,210, 6, 43, 15,188, 77, 43,220,155,242,242,114,205,149, 43, 87,208,179,103, 79, 60,248,
-224,131,152, 56,113,162,106,226,196,137,170,225,195,135,195,225,112,224,199, 31,127, 68, 81, 81,209, 96, 0,188,226, 9,229,229,
-229,187, 75,171,106, 16,221,181, 47, 18,146,231,160,231,132,249,232, 49, 97, 30, 58, 62,240, 40,172, 84,196,201,227,245,124,235,
-115, 31, 52,103,206,156,225,238, 85, 85, 79,252,204,146, 37, 75,176,116,233, 82, 44, 93,186,244,148,103, 94, 64, 99, 16,137,229,
-202,168,232, 30,154,214,237,134,105,162, 98,122,128, 48, 98,124,244,137, 6,115, 63,254, 24,115, 63,254, 24, 75,151, 46, 69,121,
-121, 57,248,202,243,176,252,233,150, 45, 91, 48,100,200, 16,244,239,223,191, 35, 0,249,174, 93,187, 6, 92,184,112, 1,199,143,
- 31,135,201,100,194,132, 9, 19, 70,241,149,151,245,251,101,188,247,243, 41,172,121,227,249,170,248,123, 59,246, 49, 26,116,200,
-250,102, 23,142, 30,251, 29,123,191,219,137,154,107,165,152, 48, 97,124, 50, 4,220,182, 72, 76, 76,108,212,250,231,149, 3,144,
-145,145, 65,242,243,243,149,124, 63,223,201, 8,166,165,126, 35,228, 1,193,115,255, 55,106,133,186,197,212,253, 37,127,206, 11,
-224,110,157, 7, 3,190,146, 15,253,129, 86,171, 85,150,148,148,104,184,205, 93, 26, 59, 22, 8,206,158, 61,139,202,202, 74, 77,
-219,182,109, 85, 74,165, 82,219,216,177, 70,137,171,226, 50, 14, 92, 53, 97, 66, 72, 8,246, 93,102,209,182,191, 12,157, 45,133,
-208,157,248, 43, 54,189,125, 20,236,133, 26, 24,172, 20,197,181, 14, 40,196, 12,236, 53,215, 16,217,132,210,238,174, 4,200,229,
-114, 92,188,120, 17,167, 78,157, 66,207,158, 61,161,211,233,112,240,224, 65, 87, 44,223, 87,188,158, 16,226,242, 2,112,242, 40,
-165,184,124,249, 50,122,247,238,141,252,252,124,176, 44, 11,185, 92, 14,137, 68,226, 90, 37,192,199, 3,112,233,210, 37,152,205,
-102, 12, 24, 48, 0,241,241,241, 42,145, 72,132,136,136, 8, 12, 26, 52, 72,117,240,224, 65,205,165, 75,151,160,215,235,143,129,
-167,203,254,210,165, 75, 96, 25, 41,218, 37, 38,163, 69,124, 2, 24,145, 4,138,136, 88,116, 24, 52, 1, 23, 15,230,162, 94,222,
- 5, 95,114, 40,165,202,234,234,106, 77,113,113, 49, 58,116,232,128,161, 67,135,170, 68, 34,145,118,216,176, 97,100,201,146, 37,
-116,240,224,193,246,250,121, 51, 33, 50, 50, 18,245, 10,138,163, 41,153,114,121, 12, 98, 98,251,194,106,169, 65, 69,229, 97, 88,
- 44,186,209, 54,155, 97, 32,128, 55, 7, 15, 30, 12, 0, 40,189,118, 13,245,242, 36,112,219,244,166, 41,252,242,203, 47,169,235,
-215,175,199,204,153, 51, 49,108,216, 48, 0, 96,119,236,216, 33,206,203,203,195,220,185,115,199,246,233,211,103,167, 63,125,249,
-180,222,136,197,123,126,197, 91,127, 83, 99,248,196,228,232, 58, 67, 5, 54,126,179, 7, 25, 31,125,141,109, 11,231,160, 75,217,
- 21, 44,211, 95, 67,116,116,140,144, 4,120,135,192,221,237,239, 45, 95,165,209, 28, 0,207,216,190,175,207,119, 35,130,189, 4,
- 47, 80,188,126,255,235, 42, 66,200,109,217,222, 30, 75,253, 26,228, 1,120, 42, 3,193, 92,254,199, 87, 57,200,205,205, 85,150,
-150,150,106,172, 86,107,147,199,154, 3,157, 78,135,186,186, 58,141, 94,175, 87,121, 59,150,146,146,210,232,179, 59, 82,101, 66,
-141,149,197,145,114, 59, 74,170,237,136, 59, 40, 70,159,141,103,113,241,194,113,252,254,147, 21,118,177, 8, 86, 22, 48, 91, 41,
-116,148, 69,108, 20,109,146,176,221,151,255,113, 25,251,165,165,165,232,216,177, 35, 46, 92,184,224,114,249,139,197, 98,215,245,
-254,134,243,220,107, 8,112,127,111, 80, 72,176, 26,205,203,222,191,206, 24,247,117, 1,203,178,168,171,171,115, 78,142, 98,177,
- 74, 36, 18,105, 61, 60, 73,226,220,220, 92,164,164,164, 48,139, 23, 47, 46, 93,182,108,153,125,241,226,197, 77,222, 60, 33, 78,
-133,200,100, 44,133,161,246,178,202,225, 48,107, 1,236, 5,240,102,109,109, 45,114,115,115, 93,202,228, 61,247,220, 99,245, 37,
-175,190,127,165,228,228,228,100, 79,152, 48,193, 69,254, 63,252,240, 3,179,121,243,102, 40,149,202,137,254,146,255, 85,163, 5,
-143,231, 29,196,115, 83, 39, 32,245,241, 41, 48,154,245,216,148,171,197,202, 15,179,240,217,216,251,209,165,236,138,192,166,119,
-129, 50,224,169, 4,220,148, 74,128,106,181,154,186,199,116,125,125, 22,112,221,196,126, 67,201, 63,208,152, 58, 71,252,158,217,
-254, 30,174,127, 82,255,242,122,109, 99,253,197, 87,191,224,219, 95, 82, 82, 82,180,221,186,117, 83, 69, 69, 69, 53,121,172, 57,
-136,138,138, 66,183,110,221, 26, 16,189,183, 99,222, 96,114, 68,192, 70,128, 67, 21, 22,148, 57, 28,216, 85,100,198,198,108, 51,
-118, 95,137,197, 89,105, 36,174,212,216,112,185,150, 69,157, 29, 48,218, 41,100, 49,173,125, 18, 51,183,190,223,225,112,192,110,
-183, 35, 38, 38, 6, 97, 97, 97,232,216,177, 35,108, 54,155,235,184,183,130, 64,158,242,184,245,253,118,187, 29, 38,147, 9,148,
- 82,180,111,223, 30,197,197,197,104,211,166, 13,196, 98, 49, 44, 22, 11,172, 86,171,235,255,242, 9, 15,118,232,208, 1,114,185,
- 28,133,133,133,184,114,229,138,198,225,112, 64,175,215,147,159,126,250, 73, 99, 48, 24,208,161, 67, 7, 68, 68, 68, 60,200,119,
-142,234,208,161, 3, 24,214,138,226,195,249,168,190,114, 26,172,195, 6,147,190, 28,151,126,250, 14,214, 58, 29, 39,175, 19, 31,
-229,134, 67, 76, 76,140,134,101, 89,151,167,115,233,210,165,228,248,241,227,168, 39,109, 22, 64,156,183,130, 71,158,176,219, 77,
-176,219, 12, 80,132,182,134, 92, 17, 13,128, 40, 1,216,151, 46, 93, 26,227, 38, 15,107,215,174,229, 10, 40,121,189,231,202,202,
- 74,250,217,103,159,209,140,140, 12,250,175,127,253,235,219,148,148, 20, 76,156, 56,145,243, 6,232,183,108,217,130,212,212,212,
-148,169, 83,167,126,199,167,205, 42, 43, 43,233,231,159,127, 78,167,253,245, 41,140,202,217,131,191,205,158,140,103, 94,152, 15,
-179,213,128,243,231, 46, 35, 35, 99, 35, 54, 63, 60, 4,202,246,173, 2, 30, 27,155, 55,111, 22,230,245, 91, 8,207,112,128,103,
- 34,224, 77, 45, 5,236, 25, 54,240,245,249,166, 89,250,141,196,234, 61,173,125,190,214,127, 99,242, 10, 94,126,153, 22,188,252,
-135, 59,223,243,179, 47, 79, 68,176,228,185,131,115,249,127,242,232,103, 36, 16,247,127, 70, 70,134,203,178,111, 44,222,207, 29,
-119,191,214, 23,124,229, 15,248, 19, 30, 80, 42,149,218,135, 31,126, 88,229, 94,156,198,219,177, 64,112,207, 61,247,224,225,135,
- 31,110,224,234,247,118,172,209,239,119,187, 7,221, 66, 69, 8, 39,128,141, 82,156,212, 89,177,254,172, 5, 95, 30, 40,193,207,
-231,170, 80, 98, 2, 42,205, 14,156, 51, 80, 92,181, 80, 24,172, 54, 85, 83,228,197, 45,205,179, 90,173, 48,153, 76,104,211,166,
- 13,122,245,234, 85,175,232, 69, 99,224,192,129, 46,194,230, 72,187, 49,194,230, 8,221,102,179,193,106,181,130, 16,130,174, 93,
-187,162,186,186, 26,151, 47, 95, 70, 85, 85, 21, 58,117,234, 4,134, 97, 96,181, 90, 97,177, 88, 92,223,241,133,216,216, 88, 85,
-124,124, 60,142, 31, 63,142,239,191,255, 30, 91,183,110,213,108,221,186,117,247,190,125,251, 32, 18,137,240,192, 3, 15,160, 75,
-151, 46, 38,240, 44,100, 19, 27, 27,155, 18, 23, 29,137,202,162, 95,241,251,206, 79,112,252,187,213, 56,249, 93, 6, 46,254,184,
- 25, 50,134,229,228, 21,251,146, 35, 22,139,181,113,113,113,170,136,136, 8, 28, 57,114, 4, 87,174, 92,209, 24,141, 70,165,187,
- 34, 80,239, 9, 96,214,175, 95,143,158, 61,123,250,252,109, 86, 75, 13,106,170,207, 66, 34, 9, 69,139,232,238,154,208,176,118,
-144, 72, 66,149,132, 48,131,185,107,194,171,243,161,249,236, 25,140,233,110,224,148,230,235,240,221,119,223, 65,161, 80,160,103,
-207,158,232,212,169, 19,234,195, 7,118,157, 78,103,200,201,201,105,145,152,152,152, 50,106,212,168, 45,124,251,110, 94,222,119,
-136,136, 8,195,136,145,131,140,137,253,251,224,209,191,206,133,145,216, 81, 94, 86,133,121, 79,191,134,101, 73,247,160,127,171,
-192,149,228,205,155, 55,211,183,223,126, 91, 80, 2,110, 19, 69,192, 27,110,155,189, 0,110,245,170,130, 64, 8,216, 95, 12,124,
-195,169, 64,184, 19, 53,119,236,102,201,115,183,194,159,216, 52, 27, 79,108,154,221,224,189,251, 49,190, 22,187,187, 39,193,155,
- 71,161,185,121, 1,238,158, 0,207,191,124, 17, 30, 30,174, 29, 61,122,180,106,224,192,129,141, 30,115, 63,215,100,187,187, 93,
- 63,122,244,104, 85,120,248, 31,203,242,188, 29,107,210, 58,148,133,170,122,183,105,137,161, 49, 50,220, 31, 37, 69, 91, 57, 3,
- 25,165,144, 91,236,232, 16, 38,134,142, 82,252,102,176,227,116,157, 29,237, 90,197,160,211,253, 35, 27,149,197, 89,253,220, 82,
-191, 14, 29, 58,160,111,223,190,208,233,116,168,174,174, 70,117,117, 53,194,195,195, 49,120,240, 96, 88,173, 86, 87, 77,128,198,
- 8,155, 83, 38,108, 54, 27, 8, 33, 72, 72, 72,128,201,100, 66,121,121, 57,202,202,202, 80, 94, 94,142,186,186, 58, 36, 36, 36,
- 64, 44, 22,187,228, 53, 86, 87,192, 83, 41,139,139,139, 83,117,237,218, 21,231,207,159,199,246,237,219, 81, 80, 80,128,144,144,
- 16,140, 26, 53, 10,125,251,246,253, 78, 46,151, 47, 4,207, 16,128, 82,169,220, 18,215, 42,118, 86,215, 54, 45, 96, 56,247, 19,
- 78,111,255, 8,197, 5,223, 34, 74,230, 64,242,232, 81,232,219,183,239, 28,185, 92,158,203, 71, 86, 68, 68, 4,250,247,239, 15,
- 74, 41, 14, 28, 56,128,194,194, 66, 77,113,113,177,166,170,170, 74,185,100,201, 18, 21, 87, 57, 49, 41, 41, 9,123,247,238,245,
- 41,143,101,109,218, 26,221, 89, 85, 85,249, 49,200,228,209,104,221,246, 1, 77,108,235,129,154,240,136, 78,223,189,243,238,191,
- 31,230,228,125,249,108, 8, 54,252, 96, 65, 99, 74,207,233,211,167,209,178,101, 75, 12, 27, 54,140,189,255,254,251, 97, 52, 26,
- 81, 87, 87,135, 85,171, 86,133,117,239,222,125,210,180,105,211,182,248, 51, 38,126,255,253, 52, 58,118,136,199,180,105, 41, 33,
-175,188,252, 28, 42,107,107, 80, 81, 89,129,244,103, 94,195,107,143,142,198,232, 14,113,205, 34,255,149, 43, 87,162, 87,175, 94,
-248,224,131, 15, 4, 37,224, 38,226,215, 95,127,109,180, 14,192,117, 10,239,237, 66,240,254,172, 42, 72, 77, 77, 37,193,170, 4,
-232, 11,158,133,120,130,161, 4, 4,131,252, 3,149,215, 88,169, 94, 79,203,220,159,146,189, 30, 74,130,171, 40, 80,115,238,203,
- 93,105,112,183,246, 3, 89, 1,224,110,221,221,127,255,253,164,177, 99,158,231, 26, 67, 83,215,243,149,193,225, 1,229, 40,109,
-145,152,194, 94,144,135, 11, 53, 64, 24,145,160, 99, 24,131, 98, 7,129, 72, 38,198,222, 50, 7,204, 44, 16, 43, 19,161,107,210,
- 8,200,187, 37,105,155, 82, 0,108, 54, 27, 68, 34, 17, 58,119,238,140,254,253,251, 67,175,215,195,108, 54,187,214,231, 91,173,
- 86, 68, 71, 71, 99,216,176, 97,216,178,101,139, 43, 36,224, 13, 14,135,195,149,213,223,163, 71, 15,212,187,233, 97, 54,155, 93,
-227,153,243, 36,244,232,209, 3, 85, 85, 85, 48, 24, 12, 77,141,229, 6, 39,102,205,154,165,213,106,181,163,122,246,236,185,219,
-173,112, 79,245,240,225,195,119,203,229,242,153, 0,204,254,180,229,172, 89,179,214,107,181, 90,125,207,158, 61,115,221,228, 85,
- 12, 31, 62,124,149, 92, 46,255,148,175, 28,134, 97,180,109,219,182, 85,141, 27, 55, 14,231,207,159,215,156, 58,117, 10,151, 46,
- 93, 66,120,120,184,166, 69,139, 22, 24, 51,102, 12,254,251,223,255, 34, 41, 41,137,247,111,179,219,141,218,106,221,239, 42,179,
-185, 10, 45,162, 18, 52, 97,225,237, 17, 30,209, 1,117,181,197, 91,222, 90,246, 17,166, 79, 75,198,151,207,134,120,109, 39, 14,
-227,199,143, 71, 94, 94, 30,174, 92,185,194, 84, 85, 85,193,108, 54, 99,239,222,189,226,122,165, 83,239,239,120,152, 48, 97, 60,
- 54,109,218, 2,125,117, 37,174,148, 92,197,179, 79,206,182, 62,255,226, 82,233,163,163,134, 96,152, 69, 15, 72, 2,163,135,205,
-155, 55,211,127,252,227, 31,174,114,208, 93,187,118,197,219,111,191,141, 23, 94,120,129, 78,154, 52,233,206,175,220,121,135, 42,
- 5,183, 76, 1,184, 17,171, 10,130, 65,238, 28, 42, 42, 62,194,203, 5,223, 54, 89,109,207,159,228,191,138,138,143, 80,240,242,
- 31,242,220,137,217,211,101,207,135,180, 43, 62,170, 64,193,183, 47, 7, 77, 94, 48,193,199, 67,192,237, 1,224, 79,127,249, 95,
- 26,156,157,134,168, 84, 71, 45,118, 77,249,238, 93,144,216, 77, 56, 90, 75,145, 95,107,135,148, 16,196, 80, 10, 85,155, 22,136,
-106, 29,171,138, 31,164,244, 97,105, 58, 61, 0,157, 58,117,194,192,129, 3, 97, 50,153, 96,179,217, 32,149, 74, 93,132,205, 89,
-233,177,177,177, 24, 58,116, 40,182,111,223,222,164, 7, 64, 44, 22,163,111,223,190, 32,132,192,104, 52,186,188, 11,156,210,206,
- 85, 23,100, 89, 22,189,123,247,198,193,131, 7,225, 79,114,165, 82,169,212,224,143, 60,145, 48, 56,171,237, 93, 2,207, 76,120,
-111,158, 0, 55, 89,209, 0,170, 0,248, 93,155,152, 97, 24,109,139, 22, 45,208,187,119,111,149, 68, 34,225,150, 63,106, 0,160,
-184,184, 24, 15, 61,244, 16,150, 47, 95,238,151, 76,135,195,162,173, 51, 20, 43,173,214, 26,149, 66,127, 65, 19,209,162, 43, 66,
-194,218, 34, 36,172, 45,118,236, 42, 5, 25,221,180,197, 61,100,200, 16, 34,149, 74,105, 85, 85, 21,198,143, 31,111,141,137,137,
-145,178, 44,139, 75,151, 46, 1, 1, 36, 75, 62,240,192, 16, 34,147,201,104,196,137, 66, 60,249,228,159, 16,159,208, 77,250,246,
-115,127, 98,215,125,248, 41,179, 74,100, 14,168, 47,111,222,188,153, 46, 94,188, 24, 45, 90,180, 64, 73, 73, 9, 20, 10, 5, 88,
-150, 69,104,104, 40,222,120,227, 13,188,252,242,203,130, 18,112,131,145,152,152,216,168, 23,128,215, 50,192, 27,129,219,121, 85,
- 65, 83,132, 19,136,245,223,152, 60, 79, 75,157,115,221,251, 34,237, 96,203,115,247, 4, 4,122,190, 41,175,130,231,230, 63,254,
-202,251, 95, 3,195, 48,218,196,209,227, 72, 85,157, 73, 25,105,183,104, 68, 23,139,112,143,237, 42,194, 99,226, 48,164,119,119,
-196,180,107,169,138, 76, 28,233,115,124, 80, 74,209,185,115,103, 12, 27, 54,204, 21,143, 23,137, 68,176, 88, 44,174,210,189,238,
- 97,130,246,237,219, 99,232,208,161,208,106,189,139, 86, 40, 20, 72, 76, 76,132, 88, 44,134,213,106,117,125,207,125,233,160,251,
- 70, 64, 12,195,160, 95,191,126, 40, 44, 44, 12,164, 25, 40,128,218,250, 87, 48, 96, 8,132,248,189,121,141,122,245,234,197,229,
- 81, 16,150,101,149, 70,163, 17, 22,139, 5,221,187,119,199,138, 21, 43,252,220, 28,135,106,109,214, 90,216,172, 6,149,201, 84,
- 14,153, 44, 10, 18,105,184,134, 97,196,248, 98,253,119,170, 89, 51, 39, 52, 41,175,190,174, 63,121,239,189,247, 88,147,201, 4,
- 0, 72, 72, 72,240,171,252,178, 59,250,247, 31, 64, 68,247,223,255,208,220,127,188,151,231,148, 71,153,132,132,123,145, 48,105,
-210, 44,177, 88,188, 62, 16,153,203,150, 45, 19, 6,245,109,162, 4, 52, 69,254, 55, 85, 1,184, 83, 17,204,101,127,158,196,220,
- 92,107, 61, 88,242,154, 99,113,187, 19, 59,247,222,195,101, 47,116, 34,158, 24,149, 50, 73, 91,111,189, 98, 68, 0,223, 79, 75,
- 75, 67, 84, 84,148, 43,195,159,101, 89,151, 11,159,243, 0,112, 73,127,220,142,128, 93,187,118, 5, 33, 4, 27, 54,108,184, 78,
-222,202,149, 43,145,157,157,237,186,214,225,112,248,220, 14, 88, 42,149, 34, 41, 41, 9,124,178,227,239, 84,101, 45, 44, 44, 12,
- 97, 97, 97,136,137,137,105,198,216,225, 20,129, 90, 48,140, 24,206,116, 44, 86,195, 83, 30, 93,180,104, 17,169,127,158,148, 97,
-152,102,205, 35, 14, 7,187,109,193,130, 5, 4, 0,195,178,172,131, 97, 24, 5,252, 12,191,112, 16,172,251,219, 75, 9,240, 5,
-146,152,152, 40, 36,103, 8, 16, 32, 64,128, 0, 1,255, 99, 96,132, 38, 16, 32, 64,128, 0, 1, 2, 4, 5, 64,128, 0, 1, 2,
- 4, 8, 16, 32, 40, 0, 2, 4, 8, 16, 32, 64,128, 0, 65, 1, 16, 32, 64,128, 0, 1, 2, 4,220, 21,104,176, 10, 96,254,252,
-249, 1,103,112,174, 94,189,250,186,100, 66, 65,158, 32, 79,144,119,247,201, 83,171,213,244,145, 73,106,124,187, 57, 3, 25, 25,
- 25, 12,188,172, 65, 23,218, 79,144,247,198, 27,111,184,174,121,249,229,151,137,208,126, 55, 87,158,223, 10, 0, 55,184, 27,187,
- 56,144, 37, 47,119,178,188, 64,100,222,238,247,235, 5, 82, 0, 17, 0, 66,234,251, 3, 11,160, 2, 65, 88, 67, 29, 76,112,237,
- 16,140,123,246,214,166,183,170,248, 80,109,237,255,111,239,202,195,154,184,214,247, 59, 73, 8, 1, 65, 22, 17, 17,149, 42, 32,
-138,184, 32,238, 90,149, 88,144,130,128, 91,209,254,106,123,107, 55,162,183,215,122, 91, 84,172,116,177, 11,173,120,181,155,183,
-173,161,183, 85,219,122,111, 43,181,130, 59,149, 26, 92,170, 86,197, 21,180, 42,224, 86, 65,169,202, 78, 66,150, 57,191, 63,194,
- 96, 8, 89,102,146, 32,216,206,251, 60, 60, 9, 39,147, 47, 51,231,204,156,247,253,190,115,206,119,106, 35, 15, 29, 58,164,216,
-183,111, 31, 0, 96,226,196,137, 24, 59,118, 44,235, 84,194,237,209, 14, 83,167,201, 16, 23, 27,161, 5,100, 34,153, 76, 70,255,
-213, 18, 55,241,176,142,244,244,116,146,144, 16,212,226,127,107, 34,128, 71, 59, 71, 0, 24,144, 77,173, 55,128,160,102,217,190,
-111,186,169, 14,194,158,221,255, 28,109,207,212,245,218,115,205, 29,253,122, 25,226, 47, 58,115, 96, 93, 81,209,233, 71,252,122,
- 4,117,171,174,214,192,195,195, 9, 55,111,148,208, 97, 97, 67,238,134, 13, 30, 63, 18,192,101, 46, 6, 79, 28,254,140,148,150,
- 92, 68,201, 21, 21,174,151, 19,244,234, 78, 33,168,183, 4,129, 65, 33,136, 24,243,247, 14,241,240,155, 18, 18,204, 94, 3,237,
- 65,100,103,207,158, 85,132,135,239,198,218,181, 13,200,207, 7,222,124,243, 39, 92,191,126, 93,225,231,231, 7,137, 68,130,178,
-178, 50,233,244,233,211,225, 8, 65,112,224,192, 1, 82, 93, 93, 45,141,142,142,134,179,179,179, 45,246, 4, 0, 16, 23, 27, 65,
- 39, 39, 39,139,128, 76,228,100,235, 31, 21, 56,118,219, 94, 30,127, 2,168,213,169,200,205, 77, 70, 76, 76, 38, 18, 18, 50,154,
- 35, 2,188, 16,184, 63,224, 19, 1,113,128, 33,217, 83, 20, 64,127,239,245,167,189, 86,141,186,254,169,220,221,223, 47, 11, 14,
-238,219,127,198,180,137,232,213,163, 51, 60, 61,156, 81, 89,165,194,141,242, 94,130, 75,165,149, 62,219,183,126,165,136,121,116,
-246,106, 39,113,167, 53,214,236,157, 59,187, 47,242,242,197,237, 10, 33,106, 48,123, 10, 48,110, 24, 16,244, 16, 80,124,133,224,
-224,113, 37,118, 42, 78, 99,199,230,197,164, 79, 72,188,116,192, 32,235, 25,237,218, 42,218, 97, 46,138, 32,151,203,169,246, 18,
- 1,119,239,222,197, 75, 47, 53,160,107, 87, 32, 41, 9, 88,177,162, 14, 39, 79,158,132, 86,171,133, 68, 34,129,175,175,175, 98,
-251,246,237,232,219,183,175,116,248,240,225,249, 28, 59,128,200,194,194, 66,116,235,214, 77, 17, 29, 29, 77,125,251,237,183, 0,
-160,200,203,203,195, 19, 79, 60,129,145, 35, 71,114,189, 86, 49, 0,236,220,117, 66, 0,100,210,250, 87,189,134,230,123, 16, 30,
-134,222, 62, 0,204,156,185, 25,185,185,250,215,228,228, 18, 48, 17, 1, 62, 26,112,127,137,223,176,188,221, 82, 1,119,116,144,
- 77, 94,205, 34,224,207, 76,254, 0, 68,123,114, 55,189, 38,157, 16, 17, 50, 98,104,119, 80,148, 62,171, 27, 77, 19,116,118,115,
- 70,167, 32, 49,122,247,242, 64, 15, 63,183,135,246,228,110,122, 45, 46,225,153, 44, 0, 55, 45, 25,188,124,113,187, 98,252,176,
- 26,252,243, 25, 64, 40,212, 11, 40,141, 22,232,228, 10,132, 6, 3,163,195,129,237,138, 26, 28, 57,189, 93, 49, 96,208, 68,155,
- 30,124, 71, 13, 1,152,251, 62, 35, 2,238,119, 99,120,123,123, 99,251,118, 23,244,234,165, 68,126, 62, 80, 89, 41, 66,112,112,
- 48,130,131,131, 81, 87, 87,135,210,210, 82,228,231,231,163,166,166, 70,209,175, 95, 63,214, 67, 3, 63,254,248, 99,164, 82,169,
- 84,136,197, 98, 84, 86,182,140,100, 41,149, 74,124,249,229,151, 40, 45, 45, 37,143, 63,254, 56,151,250,164, 1, 32, 39, 91, 14,
- 64, 38,208,191,218,142, 99,199,142, 53,215, 55,179,137,146,169, 50, 54,247,133, 97,219,178, 45,179,234, 20, 16, 18,137, 11, 23,
- 48,178,174, 78,209,229,198, 13,252,238,235,139, 19,157, 59, 75,157, 6, 12, 0,161,168,124, 91,175,153,235,134, 81,108,108,176,
- 45,107,107,123,134,161,255,228,228, 92, 36, 36, 4, 53,191, 50, 72, 72, 8,226, 69,192,125,128, 49,217, 51,251, 3, 24,150,243,
-171, 0,140, 31,250, 63,249,245, 21,157, 57,176, 34, 56, 56, 56,100,100, 68,247, 22,229, 2, 1, 5,177, 88, 8, 23,137, 8, 78,
- 78, 2, 4,245,241, 66, 80, 80,176,111,209,153, 3,219, 45, 9,197, 19,135, 63, 35, 66,212,224,229,103, 1, 85, 35,112,249, 58,
- 80, 89, 13, 84,213, 0,255,221, 10, 44, 88, 14, 44, 91, 5,140,141, 0, 4,164, 6, 39, 14,127,198,123,139, 6, 24, 52,104,144,
- 52, 39, 39, 20,190,190,192, 19, 79,136,224,231, 55, 2, 19, 39, 78,148, 38, 36, 36, 80,241,241,241,210,152,152, 24,116,235,214,
- 13, 39, 78,156,192,247,223,127,175,248,233,167,159, 34, 27, 27, 27, 35, 45,217,252,246,219,111, 35, 27, 27, 27, 21, 78, 78, 78,
- 22,127, 91,161, 80, 96,211,166, 77,145,108, 72,118,255,254,253, 4,128, 90, 46,151,139,239,137,128,123,100,186,127,255,126,194,
- 85, 64, 29, 61,122,180,249,207, 82,153, 45,162,142,109,153, 37,242, 15,252,237, 55,197,244, 83,167, 20,189, 46, 22, 67, 92, 83,
-131,238, 23,127, 67,228,145,195,138,174,167, 79, 43, 64, 72,164, 45,237,125,244,232, 81, 28, 59,118,140, 20, 22, 22, 70,218,122,
-207, 48, 54,216,148,177,181,103, 76,244,108,202,172,129, 33,125,230, 85,157, 16,204, 63,240,247,137,248,217,164, 1,126, 96, 35,
- 0,109,233,169,145, 54, 60, 63, 71,133,152, 25,251,230,126,199,210,111, 20,157, 59, 29, 59,107,134,180,153,244, 77, 65,226, 44,
- 66, 85,117, 35, 66,130,188,145,181, 69, 17, 20, 54,120,188,135, 57,123,165, 37, 23, 49,123,138,254,253,238,253,192,167,223, 0,
-147,199, 3,113,145,192,111,197,192,201, 34, 2, 23, 9,133,161, 97, 64,204, 68,224,199,220,139,136, 24,227, 56,207,221,150,186,
-107,163, 57, 21, 54,193,221,221, 61,191,174, 78, 63,223,242,137, 39,158,192,184,113,227, 40,195,207,238,222,189, 43, 13, 13, 21,
- 41, 18, 19, 1,138, 58,142,138,138, 6,197,239,191, 7, 89, 10,255, 69, 82, 20,165, 96,187, 57, 76, 69, 69,133,194,154,238,157,
- 51,103, 14, 54,110,220,136,141, 27, 55,146, 57,115,230,180,104,139,253,251,247,147,141, 27, 55, 54, 31,215, 81,250, 3,182,101,
-230,208, 88, 88,136, 62, 5, 5, 80, 11, 4,112,162, 0, 45, 77, 64,107,116,160,181, 90,116, 61,176, 31,197,132,160,243,208,161,
- 54, 19,184,171,171,171,226,248,241,227,210,185,115,231,230,219,106, 3, 64, 11,143,220, 84,153, 45,209, 5,123,201,223, 28,209,
-231, 26, 69, 2,120,180, 63, 76, 10, 0,115,147,223,108, 33, 28,107,132,200,213,222,253, 30,163,181,101,198,184,165, 73,133,182,
-216, 51,245, 29, 27, 39, 46,138,252,252,131, 6,248,251,185,129, 16,224,192,225,235,104, 80,234,119, 93,141, 24,226,135,174, 93,
- 92,112,253, 70, 45, 93,124,185, 82, 32, 18, 9,208, 55,208, 11,254,254,193,158,208,111,209,106, 18, 37, 87, 84, 24, 55, 12,104,
-212, 0,187,246, 1,138,195, 4,254,221, 40, 4, 6, 0,143, 60, 12,244, 15,162, 32, 18,234,183, 22, 31, 29, 14,252, 75,174, 98,
- 85,223,134, 33,121, 54,239,217, 40, 94,195,177,126,195,122,119,228, 10, 3, 91,208,180,157, 43, 6, 15, 30, 44, 53,254, 76, 40,
- 20, 42, 6, 12,168,192,178,101,122,121,250,222,123, 23,113,229, 74,152, 89, 91, 42,149,202,170,231,111,136, 43, 87,174, 88, 61,
-102,194,132, 9,212,132, 9, 19,154,201,126,227,198,141,196, 88, 32, 76,152, 48,161, 93,234,174, 45,188,127, 0,232,123,251,142,
- 66,173,209, 64, 32, 16,128, 8,133,160,105, 26, 26,154, 6,173,211, 65,167,163,209,179,188, 92, 81, 51,116,168,205,215,220,208,
-208, 0, 0,138, 99,199,142,129,162, 40,206,243, 59,218, 66, 4, 56,202,243,207, 77,206, 69, 76,102, 12,102,110, 6,146,115,245,
-239,115,147,115,155,197,129,120, 91, 49,207,188,247, 17,134,115, 2, 88,205, 1, 48,183, 10,192,214,213, 1,230, 60, 46, 91, 60,
- 49, 75,162,193, 86,129, 98,233,186,141,191,203,214,139, 48, 55,169,208, 22,123,150,190,195,252, 14, 5,128,222,100,117,238, 2,
-173,159,237,239, 12, 0,184, 94, 86, 3,165, 82, 11, 0, 8, 14,244, 66,215, 46, 46, 56, 93, 84, 33,184,112,233, 46, 36, 18, 33,
-130,250,120,162,178, 90, 13, 0,102, 13, 95, 47, 39, 8,122, 72,255,251,143, 78, 0,194, 7, 80,112, 22, 3, 90,173, 62, 18,224,
-233, 14,148, 94, 3, 98, 38, 0, 15,245,212, 31,223,158, 48, 36,125, 91,198,133, 59, 58, 42, 42, 42,218, 44,138,210, 68,242,205,
- 30,127,123,147,191, 33, 50, 50, 50, 72,106,106, 42,101,235,231,198,112, 42, 41, 70,163, 70, 13, 74, 40,130,142, 16, 80, 0,180,
- 58, 26, 26, 45, 13,162,211,129,186,116, 1, 64,156,221,231, 93, 88, 88, 8, 31, 31, 31, 69,117,117,181,212,195,195,195,102, 17,
- 96,173,236,126,145,127, 90, 90, 26,149,158,158, 78,102,110,110, 41, 8, 0, 32, 38, 51, 6,226,109,197,216,182,173,164,121, 37,
- 0, 51, 97,208,219,219,155,103,234,251, 76,254,102, 5, 64, 71,135, 37, 66,180,133, 96,237, 89,226,104,209,110, 27,175, 38,160,
-102, 85,114,253, 13,202,195,195, 9,149, 85, 42,248,120,187, 34, 41,177, 63,180, 58, 26,206,206, 66, 8, 5, 2, 16, 66, 16, 63,
- 57, 8, 83,162,131, 64, 81,192,157, 74, 37, 60, 60,156, 0,224,174, 57,131,189,186, 83, 40,185, 74,189,136,105, 47, 0, 0, 32,
- 0, 73, 68, 65, 84,208, 63, 8,152, 52, 70,223,235,252, 86, 12, 12,238, 15,120,117, 6, 98, 35, 1,154, 6, 68, 66,224,226,101,
-253,241,108,219,150,203,123, 91, 19, 97, 88, 19,164,109, 13,154,166, 35,123,244,232,129,146,146, 18,236,223,191, 95, 49,126,252,
-120,169,155,155, 27, 4, 2, 65, 62, 0,232,116, 58,233,185,115,190,138,183,222,186, 1,138,162, 80, 81, 17,130,144,144,222,184,
-120,241,162, 57,123, 38,203, 55,109,218,212, 58,138, 68, 8,102,207,158,205,233,154, 13, 69, 64, 71, 34,127, 71,136, 4, 67,220,
-237,217, 3,226,223, 46,128, 56, 1, 98,154,232, 39,182,234,180, 80, 19, 29, 26,180, 90, 40,131,251, 59,228,220, 7, 14, 28, 8,
-138,162,108, 34,127, 0, 24, 57,114, 36, 70,140, 24, 65, 29, 61,122,148, 88, 42,179,134,166,136, 65, 11,194, 55, 85,198, 5,201,
-185,247,136, 31, 64, 43,207,159,153, 48,184,109, 91, 9,207,212,237, 64,254, 15,172, 0,104,107, 65,225, 40, 66, 32, 4, 16,204,
-174,108, 51, 17,192,172, 92, 16,204,170,100,227,253, 3,128,232,230,141,146,219,215,111,244,244,241,241,118,197, 7,159, 31,195,
-132,177,189, 16, 49,184, 27, 40, 39,170,121, 69, 64,211,214,241,184,126,163, 22, 55,111,148, 92, 6, 96,214,173, 12,234, 45,193,
- 47, 5, 74,244, 15, 2,124,134, 1, 75,231, 3, 11,231, 2, 30,238,250,176,255, 91,159, 0,203, 23,234,143,253,165, 64,127,188,
-173, 4,237, 40, 79,189, 35,229, 2, 56,119,238, 28, 36, 18,125,157,236,216,177, 3,215,174, 93, 83,244,235,215, 79, 58,105,210,
- 36,212,214,214, 70,122,123,123, 43, 14, 30,212, 34, 63, 31, 24, 49, 98, 56, 2, 2, 2,164, 61,123,246, 4, 0,133, 41,123,157,
- 58,117,130, 90,173,102,245,219, 90,173,246,129,127,118, 13,201,159,141, 16, 96, 43, 2, 74,186,250, 74,157,207,156, 81,208,132,
-160,147, 64, 4,161,144,130,150,232,208,160,209,160, 86,173, 70,153,191,191,212,199,142,243,118,117,117, 5, 69, 81,210, 17, 35,
- 70,228,219,106,131, 33,122,107,101,247, 91, 4,164,165,165, 81,201, 77,158,189, 49,249, 27,122,255, 60,218,151,252,121, 1,112,
- 63, 60,188, 54, 94, 82,216, 44, 2,216, 9, 13,109, 88,216,144,178,226,203,149, 62, 67,194,124,177,116,225,104,172,255,223, 89,
-184, 72, 68, 8, 31,232, 11,138,162, 12, 60, 73,130,226,203,149, 8, 11, 27, 82, 8,160,214,156,193,192,160, 16,236,216,123, 26,
-115,103, 2,164, 20, 24, 61, 3, 8,236, 5,108,204, 49, 56,104, 33,160,211, 1, 59,246,234,143,111, 47, 88,138, 20,181,215, 50,
-192,187,119,239, 42, 66, 67, 47, 99,221, 58, 0,208,225,237,183,207,224,228,201, 6, 69, 67, 67, 3,106,107,107, 81, 90, 90,138,
- 91,183,110, 33, 34, 34, 2,179,103,207,182,186, 12,144, 16, 34,165,105, 90, 33, 16, 88, 95,224,195, 8, 15,174, 96,134, 0, 54,
-110,220,136, 9, 19, 38,180,235,243,149,154,154, 74, 49,196,111,109, 8,192,218, 49,134,240, 26, 58, 20,119,212,106,232, 20,249,
- 80,139,157,224, 70, 68, 80,209, 52,170,213,106,212, 78,122, 4, 62,195,134,217, 24, 21,164, 48, 98,196, 8,155,199,253, 13,109,
- 24, 18,189,169, 50,123, 68,192,177, 99,199, 44,150,177,129, 41,242,103, 60,127, 0,252,132,192,118, 38,127, 94, 0, 60,224,104,
- 30,255,103, 63, 12,160, 11, 27, 60,126,210,246,173, 95, 29,252,181,192,189,255,168, 97,254,136,141, 10,196,238,159, 75,177,227,
- 39,253,195,249, 90,202, 88,208, 52,193,175, 5,101, 40, 41, 41,190, 26,159,248,236, 63, 0,104,204, 25,140, 24,243,119,106,199,
-230,197,228,195,175,244, 75, 1,215,190,171, 95,250, 23, 53, 78,191, 20,240,195,215,245,228,255,225, 87,128, 14,157,109,206, 8,
-104,175,103,110, 45,130,208, 94,171, 0,234,235,235, 49,116,168, 10, 35, 70,232,255, 31, 62,156, 96,247,238, 82, 92,188,120,145,
- 73, 4,132,200,200, 72,244,237,219,151, 85, 14,128,201,147, 39,231,103,103,103, 91,141, 2,104,181, 90,120,122,122, 74,185,158,
-111,211,114,192,230,149, 1,251,247,239, 39,182, 14, 3,140, 28, 57,146, 85, 25, 23, 17, 96,237, 56,214, 70, 5,130,124,245,168,
- 81,210,243, 78, 78,232, 85, 94,174,112,187,118, 13,170, 62,125,112,197,215, 87,234, 29, 17, 1, 52, 13,209,216, 64,176,142, 32,
-233, 86, 54, 76,149,177,173, 75,227,227, 24,194,183, 86,102, 11,140, 73,159,137, 8,216, 59,132,199,163, 53,216, 76,140,230, 5,
- 64, 27,122,230, 29,244, 55,238,196, 60, 58,251,163,220,221,223, 47,254,189,188, 54, 40,184,143, 23,166, 76, 14,130,151,167, 4,
-149, 85, 42,156, 60,123, 11,197,151, 43, 81, 82, 82,124, 40,230,209,217, 63, 2,184,110,205, 96,159,144,120,233,129,130,237,138,
- 67, 5, 53,152, 50, 9,248,226,125,125, 38,192,146,171,192,151,155,244,158,191, 14,157,209, 39, 36, 94,106,235,181,218, 51, 4,
-192,150,252,219, 99, 14, 64,121,121,185,212,203,203, 71,113,252,248, 31, 0,128,139, 23, 59, 99,196,136, 1,232,210,165, 11, 36,
- 18, 9,202,203,203,165,241,241,241,156, 82, 1,247,238,221, 91,122,225,194, 5,133, 97, 68,199,152,252,131,131,131, 49,114,228,
- 72, 78, 36,198,172, 2, 48, 24,251,103, 38, 4,218, 36, 2, 76, 17,161,173,228,104,141,220, 57,145,191,129, 8,232, 50,124, 56,
- 26, 0,170,161,169,200,222,169,106,246,146, 63,151,122, 99,251, 91,142,182,199,150,252,213, 9,193, 0, 63,254,127, 95, 34, 1,
-230,132, 1,167,101,128,182, 78,150,227,186, 12,208, 86,123,182,218,116,244,249, 89,170, 39, 71,157,159, 61, 19, 23,157,196,157,
-228,241,137,207,126, 87,116,230,192,103, 91,114,246, 5,250,245, 8, 26,109,176, 23,192,145,176,176, 33, 71,227, 19,159, 93, 6,
-160,158,141,189, 1,131, 38,230, 15, 24, 52,145, 58,113,248, 51,242,253,142,139,120,239,211,142,183, 23, 64, 71, 36,127, 0,120,
-252,241,199,113,250,244,105, 60,243,204,241,166, 8,192,112,204,154, 53, 68,234,234,234,154,111,171,205,240,240,240,252,240,240,
-112,106,235,214,173,145,181,181,181, 10,161, 80, 8,129, 64, 0,173, 86, 11,177, 88, 12, 55, 55, 55,169, 3,200,223, 33, 34,128,
-199,159, 19,105,105,105, 84,122,114, 58,241, 95,224, 47, 69,111,211,199,148, 37,231, 42,248,249, 0,237, 11, 17,219,142,210,209,
- 29,111, 91,216,179,229,183, 30,228,235,181, 19,213, 97,131,199, 63, 25, 54,120, 60,147, 49,198, 13,128, 15,128,114, 0, 74, 52,
-165,125,229,130,136, 49,127,167,108, 73,242,211,214,245,208,145,242, 74, 24,195,213,213, 53,127,204,152, 49,212,152, 49,142,175,
-184,196,196,196,124, 56, 40,185, 37, 51,238,111, 76,242, 19, 38, 76,160, 54,110,220, 72, 58,194,124, 0, 30, 29, 79, 4, 88, 62,
- 0, 60,249,183, 1,216,102, 1, 4, 0, 42, 60, 60,156, 31,123,225,193,131, 7, 15, 30, 60,254, 98,224,247, 2,224,193,131, 7,
- 15, 30, 60,120, 1,192,131, 7, 15, 30, 60,120,240,224, 5, 0, 15, 30, 60,120,240,224,193,131, 23, 0, 60,120,240,224,193,131,
- 7,143, 63, 7, 90,172, 2,152, 63,127,190,205,179, 50, 77, 37,114,224,237,181,141, 61, 54,155,216,180,167,189,188,188,188, 72,
- 0,138,172,172, 44,135,216,219,187,119,111, 36, 77,211, 14,179,199,223,127,237,102,111, 54,128, 77,109,124,126, 78, 0, 36,208,
- 39,173, 81, 65,191,154,133,192, 40,137, 13,223, 30,188,189, 63,187, 61,206, 2,192, 26, 57,152, 3,151,165, 84,142,182,119, 63,
-145,156, 84, 77, 32, 22, 35,115,163, 11,171,243,203,203,203,139,204,202,202, 82, 56,234,122, 13,237,173, 94,189, 90,154,146,146,
-162,176,101,123, 97, 83,246, 10, 63,237,140,129, 47,214,192, 30,123, 12,166,141,216,169, 56,125, 65, 7, 0,200,204,204, 36,201,
-201,201,118,181,103, 72,183,239,161,212,122,195,197,197, 5, 89, 89, 89, 36, 41, 41,169,163,220, 31, 93,231,189,146,242,205,218,
- 15, 86, 63, 5,224, 15, 7,216, 11,152,255,210,203, 95,124,254,201,135, 79,154,177,231, 4, 64, 11,203, 25,217,156,160,207,220,
-216,117,225,194,151,191,249,248,227, 15,159,130,126, 51, 39, 26, 14,200,228,102,252, 28,115,188, 55, 14,183, 85, 67, 80, 20, 21,
- 39, 16, 8, 6, 8, 4,130, 72,138,162, 66, 0,184,170,213,234, 92,161, 80,232, 73,211,116, 5, 33,228,117, 0,119, 28, 89, 7,
- 60,120,152,194, 83, 37, 37,228,155,160, 32,135,245, 81,201, 50, 25,201,108, 35, 78, 20, 89,123,200, 9, 33,150, 30, 58,206, 29,
-134,163,236,113,245, 96, 29,137, 61,123,246, 88,237, 68, 24,114, 77, 77, 77,133,175,175,175,201, 12,120, 41, 41, 41, 10,182,191,
-201,216, 99,136,255,200,145, 35,205, 66,192, 30,123,244,185, 55, 32, 24,240, 54,190,222,171, 79, 29, 75,159,123,163,249, 24,193,
-128,183, 57,213, 75,231,154, 87, 8, 77,128,239,118,235,109,197, 78,116, 66, 88,112, 17, 50, 51, 51, 9, 0,112, 21, 2,213,218,
-239, 34,171,174,220,129,146,154,168,168,111,236,132,216,152, 42,244,240,163,112,252,248, 33, 82, 83,163,194,164, 73,147,218, 85,
- 8,204, 95,184,240, 37,208,244,228,249, 11, 23,190,244,249,199, 31,191,110,183,189, 5, 11, 95, 32, 52, 29, 61,127,193,194,151,
- 62, 95, 99,210,158,134,133, 25, 13, 0,106,193,130,133, 47,209,180,110,242,130, 5, 11, 95, 90, 99,218,150, 0, 54,228,122,176,
- 19,106,195,251,239,135, 31,126, 80,204,152, 49, 67, 58,121,242,228,124,123,140, 10,133,194, 88,145, 72, 52, 65, 36, 18, 61, 46,
- 20, 10,189, 4, 2,129, 91, 70, 70,134, 96,241,226,197,207,234,116, 58,104,245,120, 92,167,211, 37, 0,248,165, 73, 4,168,155,
-250,191, 54, 31, 6,221,177, 99, 7, 97,219,223,197,197,197,113,186,167,119,238,220, 73,236,249, 62, 15,199,195,101,229, 74, 64,
- 46,119,152, 61,229,146, 37,118,125,159,201, 8,200,105, 59, 96, 54,228, 63,108,216, 48, 20, 20, 20,112,242,248, 45,145, 60, 27,
-123,166,236,167,166,166,162,180,180, 20, 89, 89, 89, 14,221,214, 53, 57, 33,147,192, 37, 4,153,155, 34, 41, 0,200,204,242,160,
-184,144,255,234,213,171,165, 21, 21, 21, 10,115,228,159,154,154,138,140,140, 12, 78,228, 15, 0, 73, 73, 73, 24, 61,122,180,116,
-244,232,209,118,217, 99,200,158,121, 93,241, 14, 90,144,255,146,153, 18,172,220,172, 98, 85, 87, 30,202, 20, 50, 48, 68,136,122,
- 37,193, 43, 79, 73,112,164, 72, 11,101, 61, 65,131, 26,144,134, 23,161,232,162,142, 83, 52,160,244,250,135,164,234,102, 39,184,
-119, 22,195,175,187, 27,186,118, 11,198,213, 18, 53,122, 15,208,192, 73, 82,129,188, 45,183,177,101,203, 22, 50,125,250,244,118,
-233,240,100, 50,153,179, 79,143, 30, 11,191, 61,114,148,138,237,215,247, 37,153, 76,246,174, 92, 46,111,180,199, 94, 87,191, 30,
- 11,191,219,123,132,138, 14,239,103,151, 61,153, 76, 38,246,243,235,190,240, 39,197, 1,106,248,144, 48,115,182,232,118,168,182,
-230,237, 7,179,178,178, 20, 9, 9, 9,216,188,121,179, 98,242,228,201,173,218, 48, 34, 34,130,188,245,214, 91, 72, 72, 72,176,
-216,190, 34,145,104,146, 88, 44, 30, 40, 22,139, 23,136,197, 98,215,235,215,175,163,111,223,190, 16, 10,133,112,119,119, 71,113,
-113, 49,220,220,220, 68,199,142, 29,243, 60,124,248,240,129, 23, 95,124,177, 55,128,171, 0,196,230,234, 32, 57, 57,185,149,179,
- 98,216,111, 49,229, 20, 69, 33, 51, 51,211,234,253,183,117,235, 86,179, 54, 12,203, 9, 33,136,139,139,227, 84,161, 57, 57, 57,
-118,125,191, 45,113,234,212,169,200,240,240,240,124, 71,216,186,117,235, 22,161,105, 26, 16, 84, 65,221,168,130,216, 89, 2,208,
-158, 16, 8, 4,232,214,173, 27, 53,216, 56,114,105, 33, 25,206,195, 15, 63, 76, 54,111,222, 12,115,246,102,206,156,137,131, 7,
- 15, 82,182,158, 31, 0,148,223, 58, 79, 12,207,207,158,107,183, 37,154, 96, 46, 13, 48, 43, 1,192,150,252,217, 34, 53, 53,213,
-234, 49,108,136,203, 28,249,175, 88,177, 2, 75,151, 46,109, 81,110,171, 8, 72, 30,150, 73,208, 37, 4,153, 63, 69, 82,134, 30,
-127,116,116, 52, 5, 0,204,107,113,113, 49, 97, 67,214,150,200,191, 41, 50, 96,213,107,103,194,244,134, 30,190,241,208,130, 45,
-246, 44,121,248, 75,102,178,223, 41,206, 71,249, 10,233,251,144, 16, 46,206, 20, 30,242, 23,226,118, 37, 13,141, 86,136, 59, 85,
- 4,213,117, 4,197,191,211,128, 0,240,113, 61,131,188,188,188,200,168,168, 40,139,157,194,213,107, 31, 68,134, 6, 7,225,240,
-205, 91,232, 19,208, 21, 3, 7, 7, 66,232,236,141,135,250, 84,162, 82,169, 66,197, 77, 29,126,191,165,130,171,168, 20,121,121,
-238, 86,237,181, 17,230, 60,181,120,177,184,180,187, 63,156,135, 13, 23,168, 14,236,159, 3,224, 43, 27,236, 48,158,248,156,167,
- 95, 90, 36,254, 93,236, 7,183,144, 8, 65, 77,225, 65, 91,237, 1,192,156, 23, 23,190, 44,134,179, 59,250,244, 11, 19, 92, 56,
-123,194, 30, 91,142, 4,205, 60, 35, 20, 69, 65, 34,145, 72, 1, 40,140,239,137, 97,195,134,177, 34,127, 0,112,114,114,242,148,
- 72, 36,115,111,223,190,237, 26, 18, 18,130,161, 67,135, 66, 36, 18,225,147, 79, 62,129, 78,167,195,160, 65,131,240,227,143, 63,
-226,216,177, 99, 56,115,230, 12,132, 66,225,103, 58,157,110,170, 37,155, 83,167, 78,109,238,231,172,245,131,108, 8, 87, 46,151,
- 75,253,252,252, 20,132, 16,139, 14,208,205,155, 55, 57,239,149,193,216,182,245,251, 12, 81,159, 63,127,222, 98,191, 17, 26, 26,
- 42,229, 74,230,231,207,159, 87, 84, 87, 87,195,195,195, 67,106,143, 16, 56,113,242, 16,121,235,157,249,232,212,201,165,213,103,
-245,245, 74,228,252,120, 26,103,228,114,106, 74,247,238,228,122, 98,162,249,190,253,192,106,125, 99, 30, 88,141,238,147,226, 33,
-137, 24, 14, 93, 72, 88,203,240,217,119, 27,224,245,254,116, 12, 48, 24, 42, 82, 62,250, 60, 62,183,114,126,203,210,230,193,187,
-139,171,190,224,141,143,144,178,232, 25, 0,192,221, 59, 13,120, 47,125, 45,137, 24, 58,214,102, 17,224,232, 33, 5,139, 2,128,
-241,216,173,121,234, 29, 5,165,165,165, 88,186,116,169, 77, 2,194, 18,244,158,126, 50,181,103,207, 30,146,149, 57, 18, 16, 43,
- 9,155,177,127, 83,100,109, 76,202,150,134, 5,204,193, 80, 80, 28, 57,114, 68, 49,122,244,232, 22,161,127,174,246,254,187,216,
-205,108,231, 54,103, 85, 61,107, 59, 52, 77, 71, 58,187, 82, 16, 8, 0, 87, 23,160,170,134, 70, 35, 33,232,228, 66, 65, 69, 3,
-202, 70,130,158, 93, 5,160,181,192,165,235, 58,148,150,150, 42, 96, 33, 61,237,185,162, 31, 34, 7, 14,236,175, 16,139, 9, 94,
-152, 59, 10, 58, 29,193,205, 10, 53,174,221,168, 2,156,174,195,197,171, 17,229, 21, 87, 32, 16, 87,227,220,185, 42,120,120, 89,
-182,215, 86,112,246,246,126,227,241,191,253,205,249, 53, 26,240, 90,154,230,118,235,244,169,215,109, 36, 89, 2, 0, 18, 15,239,
- 55,254,239,201,191, 57,175,186,172, 67,207,217,169,110, 23, 74,207,152,178,103,117, 71, 54,153, 76,134,206, 30,158,111,204,121,
-242, 41,231, 51,215, 42,145,248, 68,178,219,191,223, 73,177,245,220,204, 70,242,204,149, 91, 17,222, 58,230, 25,137,143,143, 71,
- 84, 84, 84,126, 86, 86, 22,148, 74,101,115, 27, 50,158,127,124,124, 60,171, 54,117,118,118, 30, 91, 95, 95,223, 63, 52, 52, 20,
- 82,169, 20, 41, 41, 41,120,238,185,231,244,157,185, 70,131,245,235,215,163,160,160, 0, 39, 78,156,192,247,223,127, 15,165, 82,
- 25, 76,211,116,172, 37,155, 83,166, 76,113,232,253,180, 99,199, 14, 86, 67,115, 20, 69, 41,184,134,240, 13,109,219,242,253,166,
-208,112,126,117,117, 53,202,202,202, 76,126,238,239,239, 15, 91, 9,188,172,172, 12,101,101,101,118, 9,129, 51,167, 47,226,155,
- 13,219, 49,126,252, 88,132, 13,234,209, 92, 94,116,246, 6, 14, 28, 56,132, 31, 55,255, 76,178, 94,125, 21,215, 19, 19,225, 50,
-110, 28,148,191,252, 98,210, 78,230,248, 20, 10, 0, 46,109, 88, 67, 6, 87,236,198, 83,123,183, 67, 23, 18, 6,229,162,229, 0,
- 0,151, 85,203,225,118,177, 8,139, 75,197,232,251,244,130,123,245, 88,127,239, 57,181,116,126, 81,209,227, 90,157, 95,222,158,
- 95,112,230,244, 69, 68, 12, 29,107,243,253, 99,203,144,130, 97,184,223, 82, 52, 64,196,213, 99,119, 52,209,218,139,172,172, 44,
-187,190,159,156, 41, 35,232, 14,100, 38,232, 59,174,204,130,228, 22, 97,126,189,199, 95, 77,140, 35, 1,108,201,186,162,162,162,
- 5, 57,219, 66,214,108,193,136, 14,153, 76, 70,172,229,131,182,228,217, 48, 96,194,255,230,236, 17, 66,200,237,115,175,160,123,
- 83,232,191, 89, 49,235, 8, 84,106, 64,211, 84,166,209, 18, 16,129,254,253,217, 51, 5,204, 42, 1,147,112,119,175, 86,212, 43,
- 5,240,241,246, 68,213,221, 6, 84, 85, 87,225,200,241,155,184,113,139, 64,220,169, 1, 61,130,235,160,108,184,141,190,131, 53,
-232, 29,218,136,239,191, 40,192,238,221,187, 35,239,227, 45, 39,144,201,100, 81, 51, 95, 72,238, 86,230,225,133, 18, 45,224, 18,
- 53, 25, 2,175, 46, 62, 50,153,108,178, 92, 46,255,201,128,172,157, 96, 48,238,109,174,223,151,201,100,209, 73,115, 95,232,246,
-135,192, 3, 87,235, 52,240,140,136,130,200,221,203,216, 30,192,110, 2, 91,204,180,233, 51,186, 17,161, 51,170,235, 27, 49,112,
-216, 24,184,117,246, 48,101,171, 93,192,120,255, 20, 69, 97,219,182,109, 36, 62, 62, 30,219,183,111,135,139,139, 75,100,106,106,
-170,130, 11,249, 3,112,174,170,170,122, 90,163,209, 8, 92, 93, 93, 49, 97,194, 4,172, 90,181, 10, 78, 78, 78,144,201,100,216,
-176, 97, 3, 10, 10, 10,112,228,200, 17,252,252,243,207, 56,123,246, 44,124,124,124,124,180, 90,237, 67,176, 50, 4,146,156,156,
- 76,172, 13, 1,124,241,197, 23,172,206,179, 45,135, 0,182,110,221,234,144, 33, 0, 15, 15, 15,105, 89, 89,153,194,220,103,246,
-182,187, 45, 66, 64, 90, 82, 66,238,172, 92,137, 15, 0,224,240, 97,220,157, 25,135,213, 67, 66,154, 67,246, 97, 3, 6, 96,214,
-236, 41,232, 93,121, 27,215, 19, 19,209,101,201, 18, 40,130,130,168,193,191,252, 98,241, 57, 17, 75, 31, 70, 72,108, 36, 22, 47,
-121, 23,255, 66, 17, 86,143,158,132,129, 35, 70, 33,248,110, 41,214,123, 14, 69,169,199, 45, 12,146, 72,136, 74,165, 98,213,190,
-210, 73, 67,240,212,211,241, 56,250,235, 89,236,206,253, 9,111, 2, 88,189,106, 29,194, 6, 12,192, 83, 79,199,163, 65,121, 7,
- 18, 14,246,140, 97,239, 28, 0, 78, 17,128, 7, 9,114,185,156,114,196,172,117,134,220,179,150, 94, 6,132, 98, 36, 79,238, 13,
-120,246, 70,102,211,130, 37,182, 99,255,142,134,225,181, 49,147,254, 12, 61,127, 99, 48,115, 3,204, 77, 6,180,101, 39,194,141,
-139, 58,153,141, 8,184,215,164,224,138,154,224,230,109, 26,128, 0,110,174,250, 16,167, 70, 75,160,106, 4, 84,106, 64,213, 8,
-168, 53,128, 74, 9,168, 27,239, 69, 73, 76, 9, 10, 55,237, 43,228,198,181, 0,244,234,227, 6,226, 36,194,109,165, 18,138,125,
-215,113,174,248, 6,238,222,173, 67,216, 48, 29,234, 85, 90,168, 26,117, 80, 54,208,184,121, 13, 80,214, 3, 91,182,108, 81,112,
-217, 0,195,206, 54,161,133,158,158,111, 60,243,234,171,146,239, 13, 40,196,235,213, 52,183,187, 75, 23,189, 14,224, 39, 3,178,
- 86,179, 48, 73, 68,110,158,111, 60,247,242, 82,201,174, 27,186,230,194,158,143, 47,117,187,250,229,171,134,246, 88, 69, 1, 92,
-221,220, 95,127,233,149, 69,146,146,178,123,187, 69, 38, 60,145,236,246, 93,230,106, 83,182, 56, 61,107,166,238, 37,142,207, 26,
- 97,188,127,137, 68, 34,141,138,138,202,103,150,140, 42,149, 74, 69, 65, 65, 1, 21, 31, 31,207,214,150, 22, 64, 48, 0, 58, 60,
- 60,156,150, 72, 36,130, 13, 27, 54,224,217,103,159,197,251,239,191, 15, 66, 8,126,253,245, 87,236,219,183, 15,103,206,156, 65,
-117,117, 53,250,246,237,139,154,154, 26, 87,129, 64,224,107,205,248,180,105,211,204,138,100,102,104, 96,202,148, 41,156,194,244,
- 29,117, 8,192, 82, 20,192, 30,239,223, 94, 33, 80, 89, 85,213,252,222, 55,109, 30, 6,166,205,199,120,163, 99, 46, 63,250, 28,
-122,238, 63,142,146, 69, 47,224, 87,127,127,184, 0, 56, 35,151, 83, 48,177, 44, 78,169, 84,146,158, 61, 59,227,234, 53, 32, 44,
- 34, 20, 88,249, 26, 94,254,114, 11,230, 6,157,198,144,198, 98, 44,190, 37,198, 59, 27,151,225,253,244,207,113,230,236, 65,244,
-234, 25, 70, 92, 92,204, 71,125, 13,237,121,119,113,197,163,113,163,240,104,220, 40,188, 69,127, 4,117,227, 82,156, 60, 9,156,
- 60, 9, 28, 56, 16,143,127,175,185,136,184,184, 88, 18, 16,240, 16,130,130,190,225,196, 79,121, 15,191,134,146,131, 34, 43,125,
-247,231,127, 13, 1, 32,147,201, 72, 82, 82,146,148, 25, 51, 52, 22, 1,134, 29, 18, 51, 30,111,235,124, 0,134,244,163,163,163,
- 41,253, 48,128, 24,153, 27,239,239,245, 50,179,254,163,162,162,168,188,188, 60, 98, 45, 26, 98,109,217,161, 37, 66,231, 58, 28,
-240,244,171,245,240,239, 38,192, 19, 9, 98,168, 26, 1, 15,119, 10, 2,170,201,235, 7,129,170, 1,168, 87, 19,212, 43, 9,234,
- 85, 4, 52, 1, 4, 22,230, 92, 63,189,176, 30,131,134,148,194,175,255, 93,236,217, 85,129,187,119, 85, 8, 31, 83,131,193,222,
-117,128, 83, 35, 84, 13, 52, 42,110, 16,212,215, 83,208,106, 41,120,251, 80, 0,117,223,231,178,133, 13, 29, 50,100,184, 87, 64,
- 0, 14,233, 12,196,203, 19, 79,226,110,106,202, 48,153, 76, 54, 64, 46,151,159,227,112, 63,135,142, 24, 55,113,120, 23,255, 0,
- 28, 63,218, 60, 71, 14, 93,165,255,135,171, 95, 44, 53,101,207,210, 86,216, 3,198,141, 27, 63,220,223,191, 39,206,157,184,220,
- 92, 62,238,145, 41,248,159,124, 21,231,115,107, 3, 52,159, 59,243,252, 50,195, 0, 12,182,111,223,222,106,254,145,137,185, 0,
- 76,163, 7, 3, 56,181,100,201,146,177, 34,145,200,237,235,175,191,198,186,117,235,240,204, 51,207, 96,197,138, 21,160, 40, 10,
- 87,174, 92,129, 82,169, 68,106,106, 42,180, 90, 45,230,205,155, 71, 83, 20,101,245, 1,112,228,108,250,142, 62, 4, 96, 41, 10,
-224, 8,239,223, 86,108,216,176, 1,127, 75,158,133,234,170, 70, 32,125, 45,234, 15, 28, 71,167,241,195,155, 63,175, 72, 95,139,
- 34,103,103, 80,255,120, 30, 3,103, 63,138,195,235,119, 97,240,224, 17,102,237, 93,186, 84,136, 49,227, 98, 81, 88,228,133,181,
-159,101, 97,252,248,177,120,231,211,101,120, 43,106, 14,190, 5,208,255,169,103,177,246,179, 44,136,197, 94,152, 58,109, 56,190,
-230, 96,239,227, 15, 54, 97, 68,252, 32,188, 59,104, 21, 10,167,184,193, 43,225,199, 22,199,250,184, 74,112, 52, 95,129,128,191,
-205,229, 92, 15, 7, 15,138,176,114,165,139, 21, 1,247, 23,138, 0, 24,143, 35,155, 35,248,166,227, 88, 35,179, 64, 63, 67, 93,
- 79,252,151,144,245,201,101,232, 87, 1,180, 20, 5,108,134, 1, 28, 29,214,207,203,203, 35,134,222, 63, 19, 17, 48,252, 63, 41,
- 41, 9, 76,178, 28,115,137, 33,184,144, 63,179, 10,192,156, 61,173, 14,168,111, 32,104, 84,235, 39,251, 53,170, 9, 68,206,247,
- 62, 83, 53, 0, 74, 13,193,157,187, 4,127, 84, 18,156, 56,167, 5, 77, 3, 73, 73, 73,210, 75,151, 46,181,106, 27,173, 22, 40,
-187,174,198,245,146, 74, 28, 60, 92, 9, 66, 40,156,251,141, 70,252, 19, 90,136, 69, 4,127,220, 2, 14,254, 4,212,212, 16, 16,
- 26,120,120, 18, 5,137, 4,136,141,157,138,171, 87,175,178,186,166,236,245, 50, 50,109,174,237,171, 68, 4,110,157, 95,125, 97,
- 69,134, 83, 14, 17,180, 96, 98, 31,103,103, 56,253, 99,161,211,149, 53, 31, 45, 3,240, 36, 91,123, 66, 23,183,101,243, 95, 95,
-225,244, 83, 25,105, 97,175, 75, 39,103, 12,156,253,162,211,185, 77,159, 24,219, 51, 27, 1,144,184,116, 90,182,244,141,229, 78,
-151,111, 86,183, 56,160,179,123, 39, 76,127,226, 25,167,156,255,126,197,233,220,218, 42,106,103,170, 44, 34, 34,130,156, 56,113,
- 2,219,182,109,107,245,157,132,132, 4,147, 77, 1,160, 16,192,169,213,171, 87, 15,241,244,244,116, 99,194,224, 95,125,245, 21,
-158,125,246, 89,172, 91,183,174,217,139, 95,189,122, 53,170,170,170, 80, 83, 83, 83,215,208,208, 80,218, 20, 65, 16, 91, 58,215,
- 23, 94,120,129, 24,135,232, 25,239,159,109,248,255, 65, 25, 2, 48, 21, 5,112,180,247,207,216,100, 59, 4,112,110,204, 24, 80,
- 47,204,134, 39, 0, 50,105, 24, 26, 78, 20,162, 62,125,237,189,122, 75,158,133,190, 79,205,130, 68,162,191,254,162,162, 98,139,
-132, 93, 84, 84, 12, 0,136,141,211,139,136,130,227,103,240,237, 55,223,193,117,212, 72, 52,104,180, 80, 67,141, 9, 19,135,182,
- 56,158,173,189,235, 58, 53,158,232,246, 34,232, 19,141, 72,250,215, 36,136, 31, 59,130, 1, 97, 3, 16, 54, 48,184,249,252, 82,
- 23,175, 65, 80,144,144,245,125,243,200,255, 61, 18,117, 14,231,246,224,127,223, 80,214,166, 0,124,254, 57,218, 38, 17, 80, 71,
- 68, 65, 65,129,213,217,228,121,121,121,145,172,151, 20, 58,119, 66, 86,239,253,128,182,128,160, 79, 39, 36,167,247, 65,102,126,
- 60, 5,100,146,123,130, 32,218,230, 97, 0,227,165,128,230,150, 6,154,235, 44,101, 50, 89, 51,249, 27, 79, 0,100, 66,234, 76,
-153,165, 8,128,161, 61, 71,117,230, 59,119,238,140,188, 81,190, 75, 65,119,165, 33, 16, 1, 78, 2,253,253,173,161, 9,180, 90,
-160,182,150, 64,173, 1,180, 26,189, 40,152, 58, 77, 31,189,185,116,233,146, 89,123,141,183,119, 42,194,194,104, 28,216,167, 3,
- 37, 0,254,184, 73, 65,226, 2,236,219, 13,168,149, 20, 40, 2, 12,142,112, 66,217, 53, 26, 19, 39, 78, 65, 92, 92, 28,197, 38,
- 19, 86,246,122, 25, 89,249, 34,176,228, 83,219, 69, 0,161,117, 49,186, 46, 62,130, 93,244, 61, 22,234, 6,192,143, 2,148,195,
-134,137, 46,107,117, 49,156,236, 17, 58, 6,238,222, 2,197, 77, 93,179,189,174, 18,192, 71, 66,193,117,208, 48, 81,209,119,116,
-140, 57, 47,218,148,173, 78,238,158,130,171,183,170,154,136, 5,112,119,113,134,187,171, 24, 17,225, 67, 69, 91,190, 37, 49,237,
-252,232,154,172,115,102,214,127,124,124,124,243, 61,202, 68,239,102,206,156,105,201, 3,173, 3,112,249,228,201,147,117,227,199,
-143,239, 10,131, 53,253, 95,125,245, 85, 51,201,106, 52, 26,232,116, 58, 92,186,116, 9, 93,187,118,189, 77,211, 52, 43,181, 56,
-109,218, 52,179, 67, 0, 92,136,246, 65, 24, 2, 48, 21, 5,112,164,247,207,133,248, 25,116,247,247,196, 23, 95,236, 69, 98,194,
- 24,116, 27, 22, 6, 12, 11, 3,245,194,236,150,162, 23,192,173,155, 74,108,221,118, 24,221,253, 61,217,219,243,115,193,176,225,
-125, 49,108,120,223, 86,199,113,181, 55, 97, 70, 40,210, 38,126, 2,186, 80, 79,254,207, 45,126,218, 38,123,198,120,213,253,213,
- 61,239,215,190, 31, 93,142,242, 54,123, 32,237, 18, 0, 5, 5, 5,247, 61,107, 31,227,229, 50, 68, 23, 21, 21, 69,153, 32,127,
-194,132, 21,147,146,146,108,250, 29,195, 85, 0, 76, 25, 87,207,223,120, 2, 96, 19,154,203, 82, 82, 82, 20, 73, 73, 73,172, 31,
- 50, 67,242, 55, 53, 39,128,171, 61,107, 88,185, 89, 5,107,246,226,226,226,242,151,165,110,197, 35,163,157, 64, 3,208,168,105,
- 56,139,245,213, 84, 91, 79,208,168, 33,208,234,128,130, 66, 29,116, 52,129,181, 37,123,113,113,113,249,111,188,182, 21, 19, 35,
-133,152, 62, 71,136,186, 90,130,218,106,160,190,150, 66,159,190, 4, 58, 13, 5,145, 64,130,170,187, 52,202,126, 87, 99,209,203,
-236, 38,140,101,175,151,145,143, 22, 2, 33, 1,192,154, 87,128, 5, 31,216, 38, 2, 72, 67,253,140,127, 12, 27,186,211, 47,103,
-167,155,215,184,135,209, 13, 64, 55, 10,208, 29, 58,136,188,167,159,172,211, 52,212, 79,231, 98,143, 86, 53, 76,127, 33,106,248,
-174,208,183,178,221,124, 7,143,133,143, 51,133,174, 18, 10,202,243,191, 96,235,107,115,235, 52,202, 6,214,246, 26, 85,202,233,
-113,143,140,223,149,146,254,153,219,128, 33,195,224,238, 42,134,187,139, 51, 74,206,157,194, 27,169, 47,213, 41, 57,216,178,197,
-147,103,115,185,166,200,127,249,242,229,173,194,252, 63,252,240,131, 34, 33, 33, 1,102,146, 4, 49, 68,175, 6,112,170, 95,191,
-126, 37, 42,149,170,135, 80, 40,148,184,186,234,151, 98,109,222,188, 25, 51,103,206,132, 82,169,132, 74,165, 66, 99, 99, 35,220,
-220,220, 84, 58,157, 46,135, 16,114,147,205,201, 58,106, 53,192,131, 50, 4, 96, 24, 5, 96,222,183, 7,241, 51,232,211,199, 15,
-175,166, 37, 99,247,174, 95,145,189,229, 4,156,197,157,241,123,217,189, 17,172,158,254, 3,208,168,174, 65,196,176,254,248,240,
-163,100,188,159,254, 57, 39,123,190,190, 30, 40, 58, 87,212,252,121,216,128, 48, 84, 84, 84,115,178, 55,101,225,116,204, 20, 60,
-137,198,194, 58,140, 94, 48, 16,244, 96, 9,190,248,226,251,230,243,171,174,174,198,216,135, 67, 89,217, 51, 70, 84,102, 20,245,
- 51,126,110, 83, 62,181, 89, 0,180, 5,249,179,177, 25, 21, 21, 69,101,101,101,145, 38,111, 23, 89, 89, 89,196,112, 89,162,177,
-215,111, 74, 32,180,142,195, 82,128, 88, 0,184, 8, 1, 55, 17,208, 88,139,172,247,157, 0,151,163, 36,249,177, 62,128,139, 55,
- 50,191,225,238,245, 91,154,237,207,144, 53,219, 53,236,198,228,111, 60, 39,128,171, 61,182,228,207,198,222,123, 25,107,169, 87,
- 22,206, 35, 18, 9, 64,211,192,160,126,194,123,237,113, 86, 7,141,142, 64, 71, 11, 49, 99,198, 12, 86,226,228,237,119,215, 82,
-139, 22,205, 35, 90, 45,160,214, 16,232,180,128,128, 2, 34,167, 0,181, 85, 20,126, 59,173,132, 82, 37, 64, 98,194, 12,214, 97,
-255,229,207, 1,193, 61,245,255, 7,245, 0,108,141, 4,200,229,242, 35, 50,153, 44,246,230,212,184, 93, 1, 91,119,186, 5,140,
-123, 24,154, 67, 7,241, 99, 66, 92,157,186,182, 54, 86, 46,151, 31,228,104,239,160, 76, 38,139, 61,255,230,180, 93,254,255,202,
-113,235, 49, 98, 28,234,207, 31,194,198,127, 76,173,107,108,224,102,143,177,181, 58,237,239,187,222,249,248, 75,183,209, 99,198,
-162,184,232, 20, 94, 74,126,178,174,161,174,142,243,185,181, 53,204, 37,251,145,201,100, 36, 62, 62,158,205,106, 0,161,167,167,
-231, 41,165, 82,249,109,105,105,105,239, 33, 67,134, 4,106,181, 90,145,147,147, 19,114,114,114, 16, 29, 29, 13,149, 74,133,134,
-134, 6, 92,186,116,169,198,203,203,107,175, 82,169,252,154,166,233,122,176,204, 0,200, 36, 5, 98, 66,236, 92, 66,255, 15,218,
- 16,128, 97, 20,192, 17,237,107, 75,238, 0, 83,120, 52,118, 20, 30,141, 29,213,244,159,253, 26,182,165,189,105,246,137, 59,207,
- 31,208,120,186, 14, 79,127, 54, 5,239,236, 93,102,247,185, 41,159, 81, 18, 47,173, 23, 84,223,168,238,139, 99,109,147, 0,104,
- 15,207,223,216,251, 48, 12, 99,155, 11,245, 59,242, 28,185,140,253, 59,154,252, 13,196,142, 97, 34, 32, 70, 4, 41,154, 34, 29,
-156,236, 89,155, 11,192,213,222, 7, 31,175,165,100, 50, 25, 17, 8,128,131, 5,250,177,126,102,194,159,126,220,127, 6, 39,123,
-171, 86,173,165,230,205,111,202, 73, 33,208,219, 56,186, 31,168,175,163, 65,104, 32, 49,113, 10, 98, 98, 98,172,182, 71,246,122,
- 25, 73,125, 18,240,116, 3,202,110, 3, 46,206, 0, 77,128, 78, 18, 32, 93, 6,164,201,109, 18, 1, 7,101, 50, 89,108, 65, 98,
-220, 46,143,229,111,187,229, 47,127,163,174,209, 6,242, 55,182,151,191,100,234, 46,151,127,188,233,150,251,239,183, 56,147,191,
-161,173, 23, 95,124, 49,238,141,127,190,176,115, 65, 74,170,219,103, 31,102, 48,228,127,218,196,179,175,229, 98,219,218,208, 17,
-215,231,205, 20,249,207,155, 55,143, 48, 43, 1,182,109,219, 70, 40,138,178, 36, 4,220,212,106,117,157, 64, 32,200,243,247,247,
-239, 89, 91, 91,251,226,241,227,199,187, 15, 29, 58,148,214,106,181, 13,213,213,213,183, 78,159, 62,125,165, 79,159, 62, 37, 93,
-186,116, 41, 85, 42,149,155,181, 90,237, 45, 66, 8,107, 1,192, 36, 5, 50,136, 10,216,210,190,210, 54,236, 11, 29,110,219, 81,
-227,254,246,218, 81, 41,133, 14, 61,222,209,246,170, 42, 5,200,208,202, 16,120,216, 15,179, 63,181, 46, 76,170, 42, 5,120, 40,
-192,242, 49,247,147,252,205, 10, 0,107,107,253,185, 62,232,108,115, 7,112,177, 43,151,203, 41,115,155,237,112, 33,175,204,100,
-185, 62,204,127, 17,192, 69,227, 79,171,155,254, 46,195,134,235, 85, 56,138, 92, 13,235, 69, 38,147, 17, 38,207, 64, 74, 74,138,
- 77, 43, 28,140,237,109, 92,212,169, 89, 20,216, 35,154,140,219,132,153,240,103,107, 84, 98,237,231, 45,237,213,213,232, 59,224,
-196,196, 68,110,247,223,183, 14,125,102, 52,134,164,189,111,249,155, 27, 26,107,107,159,182,215,187,102,236,253,244,217, 91, 27,
- 84, 13,181,115,229,114,249, 33, 91,109,125,250,233,167, 7,100, 50, 89,236,103, 31,173,220, 80, 87, 87,103,238,220,180,184,255,
-104,209,163, 26,147,127, 94, 94, 94, 36, 33, 4,219,183,111, 55, 60,198,146,189,107,106,181,218,153, 16, 82, 75,211,180, 92,173,
- 86,255, 26, 16, 16,224, 83, 85, 85, 69,189,254,250,235, 53,213,213,213,119,122,244,232, 81, 91, 87, 87, 87,175, 86,171,107, 52,
- 26, 77,163, 78,167, 83,114, 57, 97, 7, 13, 3,228,183, 97,157,230,227, 79,138,126,253, 6, 83,111,190,150, 73,102, 61, 30,141,
-176,129,125,204, 30, 87, 84,120, 25,155,190,219,131,126,253, 6, 83,247,211,222,144, 33, 67,168,212, 69,114, 50,235,241,104,203,
- 14,243,241, 82,108,250,110, 15,134, 12, 25, 98,245, 94,186,159,228,111, 82, 0, 56,218,179,111,203, 72, 65, 84, 84, 84, 62,171,
- 16,191, 21, 56,114, 86,255,253,136,140,112,217,244,199, 17,209, 0,174,109, 98,184,172,203,222, 33, 9, 99,123, 92,201,223,158,
- 25,255,108, 72, 27, 64, 80, 71,180,231,232,115,115,208,189, 77, 1, 0, 69, 81, 68, 32, 16,128,249, 99, 66,216, 83,166, 76, 65,
-108,108, 44,104,154, 6, 77,211, 32,132, 88,251, 61, 74,171,213,186, 18, 66,116, 52, 77, 55,106, 52,154,253, 66,161,144, 18, 8,
- 4,206, 0,156,105,154,134, 78,167, 19,106,181, 90,177, 86,171,237,174,211,233,206, 27,124,183,205, 55, 1,226,225, 24, 17,112,
-165, 84, 69,118,239,220,130,107, 21, 53,240,243,106,104,254,236,102,165, 43, 2,124, 59,163,127,255,254, 86,201,186,173,236, 13,
- 25, 50,132,186, 89,214, 72,214,124,180, 3,197,191,223,110,101, 47,184,167, 15, 2, 3, 3, 89,145,127, 91,193, 82,142, 20, 42,
- 60, 60,156,223, 30,147, 7, 15, 30, 15, 42, 26, 12, 8,157, 54,112,108, 68, 6,229,229, 0, 60,160,159, 52,206, 19, 63, 15, 30,
-230, 34, 0, 60,120,240,224,241, 0, 65,210, 36, 2,104, 3,226, 23,224,222, 16,135, 8, 64,247,166,247, 52, 95, 93, 60,120,240,
- 2,128, 7, 15, 30,127, 14, 8, 0,184, 25,252,207, 16,191,216,128,244,233,166,227,120,239,159, 7, 15, 94, 0,240,224,193,227,
- 47,210,167,241,164,207,131,135, 5,245,204,131, 7, 15, 30, 60,120,240,248, 43,171,229,249,243,231, 27,110,164, 67, 12,103,216,
-203,100, 50, 98,180,209,206,181,168,168,168,230, 85,141,166, 82,177, 26,218,227,138, 63,163, 61,227,101,139,134,245,201,215, 31,
-223, 30, 29,221, 94,122,122,122,243, 49,105,105,105,148, 13,246, 0, 51,233,128,249,251,217,186, 77,254,249,229,237,113,177,199,
- 89, 0,112, 68, 87, 54, 7, 49,187,247, 57, 74,177, 24, 39, 35, 49,181, 27,160,169, 99,218, 67, 93, 49, 4,147,148,148, 36,101,
-136,134,201, 0,102, 41, 39,248,253,196,246,237,219, 35,183,109,219,214, 76,130, 83,166, 76,145, 38, 38, 38,230,255, 25,213,174,
-169,246, 56,127, 94,191, 50, 44, 52, 52,180, 93,207, 77, 38,147,145,169,211,100,200,201,150,155,188,103,119,238, 58, 65,114,178,
-229, 22,239,229,157,187, 78, 88,236, 4,226, 98, 35,108,190,233,210,211,211, 73, 66, 66, 80,139,255,173,137, 0,107,168,173,171,
-141,220,250,211, 86, 4,134, 5, 42, 64, 1,231, 79,158,147,142, 9, 31,139,208,126,161,156,238,191, 67,135, 14,181,186,238,177,
- 99,199, 82,224,193,131, 71,155, 9, 0, 49,219, 3, 71,143, 30,205,217,184,169,205, 98, 24,152, 34, 81,227,141, 54,216, 18,173,
- 45, 27,227,176, 17, 20,140,221,212,212, 84,100,100,100, 40,204,237, 45,206, 28,103,105,173,166,241, 57,246,232,211, 11, 0,112,
- 75,165,130, 86,217,168, 47,172,170, 1,160,223,251,128, 75,110, 4, 67,242, 7,244,185,197,185,172,181,151,201,100, 68, 64,233,
-179,235, 49,175,128,136, 87,212,158, 0, 0, 14,255, 73, 68, 65, 84,229,247,159,175,189,255,130,204,184, 61, 24,226,183,181, 61,
- 28, 41, 42, 25,242,143,139,141, 80, 1, 50, 73, 78,182,220,230,223, 96, 4,132,105, 1, 32,183,235, 60,213,234, 84,228,230, 38,
- 35, 38, 38, 19, 9, 9, 25,205, 17, 1, 91,132,192,193,162,131,228,161,161,189,240,161,124, 21,188, 92,189, 64,107,117, 80,145,
- 70,197,238, 95,127,138,217,187,239,103, 50, 54,112,156, 84, 34,145, 88, 21, 2,135, 14, 29, 34, 77,145,133, 86, 30, 17, 47, 2,
-120,252,149,113,234,212,169, 22,255,155,234,211,236, 17, 0,156,230, 15,152,218,197,206, 17, 32, 64,164,221, 54, 8,123, 13,192,
-198,115,151,201,100, 36, 53, 53, 21, 43, 86,172, 0,128,230, 87, 83,199, 89,219, 33,172, 21, 60, 59,227, 76,233,119,112, 65, 79,
-232,240, 11, 42,254,115, 2,167, 75,238, 96,198,138,117,237,118,163,157, 57, 91,136,193,131, 6,130, 38, 64, 97,161,254, 61,112,
-239,189, 97, 57,205,178,170, 13,115,176, 91, 66,102,102, 38,197,182, 61,230,206,157, 11, 0,205,175, 38,201,159,162, 0, 11,247,
-131, 76, 38, 35,143, 60,178, 11, 50, 89,172, 67, 69, 64, 92,108, 68, 67,114,114,178, 43,144,137,156,108,110,196,110,232,225,219,
- 75,242,230,188,127, 0,152, 57,115, 51,114,115,245,175,201,201, 37, 96, 34, 2, 92,162, 1,132,144, 72,197,133,189,138, 23,255,
- 49, 31,195,187, 14,133,139,135, 7,136, 90, 11,154,232, 32, 20,137, 17, 28, 21,156,251,219,176, 11, 88,145,153,161, 24,229, 51,
- 90,234,234,234,106, 85, 4,220,190,125,187,197,255, 83,198,119,194,168,133,191,224,241, 12, 85,139,134,156, 52,105,146,205,237,
-149,157,157, 77,166, 77,155,230,176,246,118,180,189, 54, 38,146, 72,123,211,250,158, 58,117, 42,178,137,132,108,181, 51,248,149,
- 87, 94, 41,175,175,175, 15, 0, 48, 25,250, 77, 56, 67, 1,156,130,126, 83, 40, 0,216, 40,151,203,127,227,169,191, 53,249, 51,
-101,198, 34,160,133, 0, 40, 45, 45, 37,165,165,165, 0,128,192,192, 64, 24,110, 54, 3,160,197,255,166, 62, 55,135,138,138, 10,
- 69, 86, 86, 22,235, 72,128,241, 94,247,150, 72,152,106, 74,133,105, 76,162, 92, 67,236,153,153,153, 86,143,201,203,203, 99, 69,
-254, 73, 73, 73,102, 73,127,233,210,165,200,200,200,128,161, 64, 96,131, 30,125,122,225, 70,101, 53,126,156, 55, 19, 93,168,113,
- 40,249, 98, 17, 2,167, 7, 98, 79, 59,147, 63,128,102,194, 7,128,129, 3, 7,182, 40,103, 34, 3,134,229,142,246,236, 45, 17,
- 49,211, 30,230, 72,127,253,250,245,200,200,200, 64,236,184,161,216,245,203, 73,192,189, 19, 80, 83,119,223,235,112,231,174, 19,
-174, 64, 38,118,238, 58,225, 16,123,211,106,150, 89,124, 54,179, 59,191,199,234, 1, 49, 12,253, 39, 39,231, 34, 33, 33,168,249,
-149, 65, 66, 66, 16,107, 17,240,197,255,190,192,251,159,190,139,241,125, 35,161,107,108,132, 86,167, 5, 37,162, 0, 8, 65, 64,
-227,214, 31,101, 8,237,218, 31,203,230, 45,195,187, 43,223, 85, 60, 50,208,122, 52,203,184,179,155,226,191,222, 36,225,239,221,
-187,151,216, 34, 2,178,179,179,201,206,215,119, 33,238, 29, 56,132,180,179,179,179,201,202,149, 43,177,100,201,146, 14, 45, 2,
- 78,157, 58, 21, 89, 93, 93,173, 40, 43, 43, 67,120,120,184, 93,231, 89, 93, 93,173,184,215,101,219,244,156,151, 2,152, 11,224,
- 36,128,175, 1, 68, 3,120, 20,192,223, 13, 4,192,237, 63, 41,159, 83,176,176, 13,184, 69, 71, 42, 85,207, 49,153, 25, 75, 77,
-126,222, 66, 0, 4, 6, 6, 82,129,129,129,205,100,111, 24, 74,206,202,202,106,241,191,241,231,151, 46, 93, 50,123,130,140,168,
- 72, 73, 73, 81,164,166,166,194,120,163, 28,227,205,115,178,178,178,204,134, 96, 77,117,246,198,101,237,185, 81, 17, 0,108,218,
-180,201, 44,241, 3,104, 65,254, 75,151, 46,101,101,243,247,210,107,168,223,242, 6,220,158,253, 24, 61,250,244, 66,183, 46, 46,
- 40,221, 82,170, 39,127,207,206,250, 33, 0, 39, 33,231,115, 77, 72, 72,144, 26, 14, 3, 36, 36, 36,112,142,210,208, 4, 8,232,
- 4,252,251, 73,224,249,245, 64, 87, 87,224,124,149,233,242,162, 74,142,119,190, 25, 33,199, 37,106,243,246,219,111,155, 37,126,
- 0, 88, 57, 55, 30,107,118, 31,129, 95, 96,119,220,188,122,203,170,247, 15, 0,108,162, 0, 92,194,248,122, 15, 95,102,210,211,
-103,198,246,185,222,215, 43,255,107,190,142, 66,230,193,134,123, 37,168,197,171, 58, 33, 24,226,109,197,172,191,223,160,108,192,
-184,217, 99, 21,163,187,143, 66, 99,125, 61, 68,206,206, 16,137,238,117, 65,165,197,197,216,154,147,115,227,217,103,230,246,232,
-237, 28,128,161, 19,195,163,126,205,253, 53,114,212,240, 81,156,188,198,244,157,115,177,111,223, 62, 60,246, 88,203,242, 73,147,
- 38, 81, 92, 69, 0, 67,254,232,253, 33,118,190,254,178,221, 34, 32, 59, 59,155,124,244,209, 71, 8, 9, 9,193,154, 53,107,176,
- 96,193,130, 14, 39, 2, 12,137,223, 81,246, 24, 91,118, 68, 19,164, 0, 38, 2, 88, 79, 8,169,163, 40,202, 15,192, 5, 0, 87,
-229,114,185, 22,127,110, 16,142,245,221,130,252,153,247,153, 25, 75, 91, 69, 1,238, 75, 30,128,172,172, 44,102,236, 21,165,165,
-165,240,245,245,109, 37, 16,152,178,138,138, 10, 86,121,238,173, 77, 6,228,210, 97,206,154, 53,171,237,164,155, 1,129,153,242,
-250, 51, 50, 50, 32,151,203, 41,107,179, 56,149,184,134,186,233,163, 64,220, 23, 1, 81,175,163, 14,255, 3,254,163,247, 22, 73,
-214, 34, 56,253,109, 13,180, 90,238,137,206,226,227,227,243, 89,108,187,106, 57,194,243, 21,240,214, 90,160, 87, 79,224,214,118,
- 49, 54,124,169,198,220,239,204,151,115,186,243,137, 99, 51, 85, 27, 78,246, 43,207, 94, 1,247, 48, 9,220,250,254, 19,155, 86,
- 60,143, 33, 3,253,208, 47,254, 93, 86,237,193,230,254,100, 59, 84,192,220,187,134,228, 47,151,203, 41,102,226,159, 77, 68,211,
-249, 61,202, 22,146, 55, 5,117, 66,176,201,242, 92,163, 72,128, 53,148, 87,148, 99,114,210,100,184,119,246,130,142,210,226,192,
-190,253,168,173,171, 67, 66, 98, 34,254,168,168,192, 15,155,127,196,115,207,204,237,225, 44,113,134,128, 56, 33, 38, 34, 38,239,
-130, 98,141, 77, 94, 99,101,101,165,221,215,109, 72,254, 0,236, 22, 1,217,217,217,100,249,242,229, 8, 14,214,215,103, 80, 80,
- 16, 58, 82, 36,192,209,196,111,194,251,103,222,219,114,173, 3,154,136,208,137,162, 40, 87, 0, 97, 0,206, 1,232, 33,147,201,
-106, 0, 84,201,229,114, 62,173, 61, 71,220,183, 68, 64,190,190,190,210,164,164,164, 86, 67, 1, 71,142, 28, 81, 52,109,246,194,
-121,142,128,185,201,128,150, 60, 71,115, 2,165, 45,192,120,247,230,194,253,108,189,127, 0,216,253,234,114, 36,188,255, 1,180,
- 81,227, 32, 2,224,118,184, 24,123, 74,238, 0, 0,180, 81, 11,160, 57,235, 3,170,235,223, 57,147, 20,219, 40,139, 37,220,153,
-246, 63, 44,120,230, 58, 46,206, 91,130,250,159,213,240,243,177, 92,238,136, 8,128, 45,226, 96,253,250,245,122, 53,156, 48, 1,
- 71,202, 42,224, 62,196, 29, 55,114, 75, 0,137, 51,102, 46,248, 27,188,123,198,183,219,131,104,110,214,191,163,162, 90,150, 86,
- 8, 88, 91, 29,144,155,156,139,152,204, 24,204,220, 12, 36,231,234,223,231, 38,231,114,142, 2,212,169,106,225,227,210, 5, 90,
- 85, 3,136,128, 96,196,200,145,216,178,101,139,234,163, 15, 62,144,208,132, 96,206,147,115,224,221,197, 27, 13,117,117,208,234,
-180,112,119,234, 12,141, 64, 99,211,245, 86, 85, 85,181, 88, 29,192,117, 66, 96, 43,242,103, 96,163, 8,200,206,206, 38,169,169,
-169, 24, 57,114,100,139,242,129, 3, 7, 34, 61, 61, 29,105,105,105,237, 38, 2,218,138,248,141,189,127, 0, 40, 43, 43,179, 53,
- 10,240, 43,244,227,253, 53,208,135,254, 39, 3,184, 4, 96, 48,128, 28, 0,235,208,180, 83,167,165,238, 4, 54,134,210,255, 18,
- 2,192,152, 16,152, 61,231,217,124,110,105,214, 52, 3,102,120,129,153, 16,200,204, 13, 96,162, 3,129,129,129, 10,102,184,160,
-189, 58, 94, 71,194,218, 88, 63,227,253,179,177, 53, 99,237,102,144,196, 62,184, 53, 38, 2, 93, 48, 14, 46, 51,215, 64, 91,254,
- 7,224,217, 25,162, 59,255,195,246,143, 10, 0,161,144,243,181,219,178, 10,194, 24,167, 95,249, 63, 12, 15, 7, 2, 23, 20, 34,
-204,237, 25, 92,120, 40, 9,248,247, 18,179,229,237, 21, 1,200,200,200,192,248, 17,253, 16, 53, 46, 4, 9,131,150, 96,245, 71,
-159,227, 92,193, 13,204,155, 52, 28, 55,115,118,162,186,178,198, 33,247,131,169,161, 2,107,207,135, 37,111,223, 81,247,168, 57,
-251,150, 38, 14,166,165,165, 81,233,233,233,100,230,230,150,130, 0, 0, 98, 50, 99, 32,222, 86,140,109,219, 74,154, 87, 2, 48,
- 19, 6,189,189,189, 77,246,191, 52, 77, 67, 71, 3,132,214,194,217, 69,130, 39,159,122, 74,242,214,155,111,162, 91,183,110,116,
- 15, 63, 63,129,170,190, 14, 58, 2, 16, 90, 7,154,182, 30,209, 26, 59,118, 44,245,195, 15, 63,144, 59,119,238,160,166,166,166,
-133,112, 52, 92, 29,192,101, 85, 64,118,118, 54, 89,253,124, 17, 32, 9, 6,110,126,218,250, 0, 73, 48, 86, 63, 95,132,148,255,
-176, 19, 1,217,217,217,100,234,212,169,210,129, 3, 7, 42,238,220,185,211,234,243,128,128, 0, 76,157, 58, 85,250, 32, 77, 12,
-180,197,251,183, 39, 10, 32,151,203,243, 13,158,175,238, 0, 78, 3,152, 46,151,203,185,108,101,202,147,191, 37, 1, 96,148,232,
-199, 90, 34,160, 22,159, 91, 10,153, 38, 37, 37,153,140, 2, 48,100,239,235,235, 43, 77, 77, 77, 85, 48, 99,178, 73, 73, 73, 22,
-151, 1, 90,242, 14,185, 78,254,107,171,101,128,140,119,111,105, 50, 32, 23,148,252, 43, 25, 78, 51,215, 64, 89,118, 17,162,195,
-107,160,217,188, 0, 84,220, 42,108,253,251, 99,184,186,245, 50, 18, 86,126, 13,136,218, 39,179,243,146, 44, 32,119,229, 22,132,
- 93,141, 1,110,215, 99,113,244, 18,139,229,142,136, 0,216,234,253,231,108, 89, 14, 97,143, 1,112, 67, 8,174,237,203, 68, 45,
- 69,112,244,226,117, 68, 21,222, 96,217,238,215,154,255,159, 53, 75,222,130,236, 1,224,231,159, 99, 77, 30,103,233,249,176, 22,
-234,119,196,178, 67, 71,172, 16, 72,206,189, 71,252, 0, 90,121,254,204,132,193,109,219, 74, 76,126,223,221,197, 29,101,213,101,
- 24,217,123, 20,148,141, 42, 64,169,130, 86,173,193,178,212, 84, 80, 2, 8, 26,234,235, 64,211, 58,104,117, 4,206, 34, 39,252,
- 81,247, 7,156,116,214, 87, 27, 63,246,216, 99,205,117,115,232,208, 33,194,244, 55,134,171, 3,202,203,203, 89, 95,231,180,105,
-211,168,148,255,128,172,126,190, 8,161,125, 90,255,254,249,203,106,164,252, 39, 12,108,201,122,218,180,105, 84,118,118, 54, 25,
- 57,114, 36, 2, 2, 2, 90,125, 94, 88, 88,136,156,156, 28, 69,123,145,127,147, 55, 78,181,229,216,191, 33,236,136, 2, 48,152,
- 12,253,228,239, 70,158,194, 29, 40, 0,218, 10,140,231, 15, 0,163, 71,143,150,102,101,101, 41,152,208,191, 25,113, 32,189,116,
-233,146,130, 43, 9,219,218, 73, 58,122, 25,160,161,247,111,138,248, 25,161,195,229,124, 79,151,220,129,230,236, 91,184,133, 95,
-224, 23,183, 10,168,174, 65, 73,230, 34, 4,205,255, 16, 55,215, 45, 2,156, 68,128,160,125, 50, 59, 95,171, 7, 66,125,167,179,
- 46,111,143, 8, 64, 70, 70, 70,221,236,168, 81,229, 30,180, 87,175, 6, 56, 73, 54,127,184, 0,159,109, 63,133,197,143, 62,140,
-185, 31,252, 23,143,189,247, 77,187, 76, 30,101, 4,104, 83, 30, 0,202, 94,113,106, 79,168,223, 82, 20, 32,185,201,179, 55, 38,
-127, 67,239,223, 26,252,125,253,177,251, 64, 46,198,246, 26, 11,215, 78,110,160,105, 2, 1,209,130,166, 40, 16, 66,160, 35,128,
-150, 38,208,106,181, 80, 86,215, 99,199,177, 29, 16,235,196,156, 39,165, 26,175, 10, 72, 91, 48, 14, 83,252, 75,145,121,140,189,
- 13,115, 34,128, 43,249, 27,218, 75, 75, 75, 35, 43, 87,174, 68,247,238,221,239, 9,251,146, 18,100,100,100,160, 35,120,254,142,
- 22, 2,166,188,127,123,162, 0, 77,207, 68, 36,128,135, 0,188,246, 23,152,252, 7, 0, 66, 0,186, 7, 90, 0, 24,207,250, 79,
- 74, 74,106, 30,119, 55, 20, 7,134,239,237,241,224,109,233,200, 29,181, 12,208,156,247,111, 43,241, 51,152,177, 98, 29,126, 4,
-240,232,251, 83, 64,178, 22,129,154,181, 26,167, 75,238,128,242,246, 66,241,239, 53,122,239, 95, 40,108,151, 59,212,220,122,127,
-123,242, 0,176, 17, 92,108,197,193,250,245,235,213, 0,106,159,143, 28, 92,243,207, 85, 31,171, 95, 93,150,170,234,218,217,247,
- 78,209,185,107,221,230,158,251,175, 91,123,175, 26, 49, 71,206,134, 67, 52,220, 87, 20,152,250, 13,251, 34, 0,166,200,159,241,
-252, 1, 88,157, 16, 40,145, 72,168,115, 91,207, 39, 42,198,229,231, 36, 13,122, 12, 53,170, 26, 80, 2, 64,159, 82,132,134, 78,
- 71, 64,107,181,232,228,236,142, 67,213, 39,113,233,112, 49,162, 35,162,243,237,174,220,146, 23, 0,112, 95, 6,216, 66, 4,116,
-191,134,243,229, 1, 54,145,191,161,189, 37, 75,150,144, 53,107,214,192,211,211, 19,119,238,220,193,242,229,203,209,209,194,254,
-142, 16, 2,230,188,127, 91,162, 0, 50,153,172, 27, 0,191,166, 27,101, 40,128, 20, 0, 37,127, 17, 39, 93,215,150,198,239, 75,
- 30, 0,115, 17,129,213,171, 87, 75,141,133, 66, 82, 82,146,130,171, 61, 67, 34,232, 8, 41,118, 13,189,127,227,229,127,165,165,
-165, 45,234,141, 75,214, 62, 70, 4, 76,127,255, 43,144,205,128,207, 92, 57,242,255,249, 24, 30,206,216, 8, 56, 57,161,147, 68,
-220, 46,215,107,184,198,223,212,123, 27,243, 0,104, 1, 8,154,218, 86, 96,103,123,220,154, 29, 53,170,236,159,153,219,250, 44,
-123,110,114,103,127,191, 72, 53,128, 51, 73, 73, 73, 30, 0,220,108,109,143,123, 36, 29, 75, 30,121,100,151, 65,248,159,219,247,
- 45,121,240,134,233,129,217, 10,137,182, 72, 6,100, 14,198,164,207, 68, 4,204, 13,121, 60, 61,235,233,173,219,254,187, 13,186,
-217,218, 51, 19,123, 77, 28,220,197,189, 11, 84, 26, 21, 8, 33, 16,139,196,168, 82, 54,224,200,239, 63, 99,253,183, 27, 32, 29,
- 32,117, 72,226,176,244,157,115,177, 97,195, 6, 44, 90,196, 61, 7,192, 61, 17, 0,187,200,223,208,222,130, 5, 11,152, 60, 0,
-232,200, 99,254,134, 66,192,150,239,218,155, 59,192,240, 49,128,126,189,191, 10,192, 43, 0,142,201,229,114, 29,120,152,171,123,
-156, 58,117, 10,153, 25, 75, 91,229, 1,176,152, 8,168,173,242, 0,152,138, 8,152, 35,122, 91,162, 0,246,162,173,150, 1, 50,
- 98, 68, 46,151, 35, 47, 47,143, 46, 45, 45, 53, 36, 50,105, 84, 84, 20,103,239,102,198,138,117,128, 65,226,159,137,203,214, 54,
-191,175,111,135,155,173,173,188,103,138,162, 62, 2,112, 23,250,229, 63, 79,218,105,238,230,243,145,131, 27,163,243,126,237, 60,
-231,205,175, 33,151,203,197,121,121,121,221,209, 50,157,181, 77,237,209,214,145, 0,107,249,253,173,161, 45,134, 4,204,145,191,
- 58, 33, 24,216,102,221, 49,147, 14,158, 68,237,251,225, 0, 57, 28,112, 4,227, 70,141, 67, 15,247, 30, 0, 77,240,135,234, 14,
- 14,157, 56,132,155, 69, 55, 49, 41,116,146,212,217,217,185,221,219,195, 80, 4, 56,138,172,153, 72,192,131, 50,225,207,222, 44,
-128, 14,232, 99, 50, 1,100,130, 7,103,152, 75, 0,100, 82, 0,180, 21, 82, 82, 82, 76,146,189,225, 78,108, 70, 80,176, 89, 85,
-224, 40,175,191, 45,150, 1, 54,205,240,215,230,229,229,137,154,134, 14, 24,242,159, 20, 21, 21,197, 41,202,209,180,153,146,194,
-209,231,104,110,140,217,209,185,238, 57,194, 25,128, 72, 46,151,191,110, 16, 2,123,202, 94,155,209,175,125, 81, 32,151,203, 39,
-228,229,229, 33, 47, 47, 79, 5, 64,210,244,103, 55,241, 51, 81, 0, 91,235,204, 26,201, 79,157, 38,107,113, 28, 87,226,118,196,
-144, 64, 90, 90, 26,149,158,156, 78,252, 23,248, 75,209,219,244, 49,101,201,185, 10,182,243, 1, 70,134,141,164, 26, 26, 26, 34,
-215,189,191, 14, 1,193, 15, 41, 0,224, 66,225,111,210,248,232, 4,132,134,135,218,220, 30, 99,199,142,165, 54,111,222,220,106,
- 85,128, 70,163,177,235, 6,114, 52, 89,255,217,102,251,119, 0,240, 75,252, 76, 68, 1,140,203, 88, 11, 0,107,158, 56, 91, 79,
-221,214, 78,145,109, 34, 22,123,137,202,209, 68,199,216,203,203,203, 35,121,121,121, 34,195,250, 10, 12, 12,180,233,183,154, 8,
-202,225, 29, 70, 71, 24,251, 54, 1,119, 0,117,250,132,252, 20, 5,192, 5,214,215,247,178,105,143, 43,121,121,121,204,186,178,
-154,192,192,192,174,129,129,129,206, 29,161, 46,237,245,196,173,217,118,212,144,128, 85,114, 79,227,118,143,186,186,186,230,207,
-154, 58,155,233,188, 49, 58,108,180, 67,206,115,230,204,153, 60,185,254,249,201,222,144,195, 52, 14, 38,127, 9,244,195, 13, 15,
-188, 8,176, 90,145,225,225,225,188,106,226,193,131, 7, 15, 30, 60,254, 98, 16,240, 85,192,131, 7, 15, 30, 60,120,240, 2,128,
- 7, 15, 30, 60,120,240,224,241, 23,192,255, 3,211,238,250, 72,118, 88, 93,170, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 1, 0,
+ 8, 6, 0, 0, 0,197,144,206,103, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,167,147, 0, 0, 0, 9,112,
+ 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7,216, 9, 1, 11, 50, 54,169,
+138, 31,255, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,125,121, 92, 84, 85,255,255,251,220,217,217, 23, 1, 21,133,193,125, 95,
+201, 37, 55, 40, 49, 51,205, 52,192,212, 36,219,196,210,180,178,180,111,249, 60,233, 79,159, 12,148,202,212,132,158, 74,179,210,
+ 18,151,180, 92, 18,116, 80, 83, 82,209, 92,202, 5, 69, 1, 65,145,101, 86,102,187,115,231,222,223, 31, 51,131, 3, 2,179,128,
+ 73, 61,243,126,113, 95,195, 93,230, 51,231,158,237,253,249,124,206,231,156, 67,250,245,235,199,193, 3, 15, 60,240,192, 3, 15,
+ 60,248,159, 2,229,201, 2, 15, 60,240,192, 3, 15, 60,248,223,193,153,223,179, 1, 0,196,227, 1,240,192, 3, 15, 60,240,192,
+ 3,143, 7,192, 3, 15, 60,240,192, 3, 15, 60,240, 40, 0, 30,120,224,129, 7, 30,120,224,129, 71, 1,240,192, 3, 15, 60,240,
+192, 3, 15,254, 17,224,219,159,156, 61,123,150,184, 43,168,190, 88, 2,143, 60,143,188,134,144,145,145,193,173, 95,191,254,129,
+165,111,234,212,169,220,150, 45, 91,136,167, 60,254,214,242,208, 4,121,240,228,159, 71,222, 63, 89,158,203, 10,192,255, 56,234,
+102, 32,105,201,233, 76, 79, 79,199,236,217,179,137,167,216,220, 47,227,184,184,184,154,243,172,172,172,127, 68, 94, 78,124, 42,
+185,209,142, 96,215,143, 25,255,232, 58, 35, 9,220, 9,177,161, 19,162, 64,163, 26,251,144,175, 95,220,146,235,162,167,253,122,
+208,114, 60, 0,127, 69,101,157, 56,113, 98,204,174, 93,187,100,118,231,177,187,118,237,202,105, 17, 45,146,179,244,157,132,180,
+216,118,201, 21, 22, 22, 2, 0,164, 82,233,223,169, 19,113, 90, 59,157, 58,117,170,211,207,110,217,178,197, 21, 69,141,219,186,
+117,107,205,201,206,157, 59, 17, 23, 23, 87,235,254,131, 82, 2,242,242,242, 56, 0,136,142,142, 38,205,241,220,174, 31, 51,238,
+107,249,133, 71,181, 7, 0,220, 49, 24,192,232,141,150,139, 74, 53, 0, 32, 33, 33, 1,153,153,153, 13,166,111, 96,193, 64,174,
+243,237,206, 46,253,248,247,195,191,119,162, 92, 36, 8,124,245, 2, 12,187,118, 66,161,152, 4, 5,128, 1,146,149, 88, 44, 57,
+141,246, 98,160,194, 80,128,197,250, 68,151,126, 55, 33, 33, 33, 38, 51, 51, 83, 86,231, 90,108,102,102,102, 78, 11,107, 91,205,
+ 82,111,255, 38,239,219,236,104, 19, 44, 34, 62, 2,127, 98, 20, 11, 57,163, 82, 79, 85,235,213,172,214,104,250,159,152, 29,231,
+ 80, 1,176, 18,182,237,179,169, 21,129,219,181,107, 23,150,110, 93, 14,159,246,254,168,190,169,194,251,137,139,101, 45,220,226,
+110, 73, 32, 82,169,148, 43, 44, 44, 68, 97, 97, 33,246,239,223,143,217,179,103,183, 84, 37,192,214,128, 72, 70, 70,134, 32, 57,
+ 57,217,148,154,154,122, 10, 0, 22, 46, 92,248, 80, 99, 95,156, 52,105, 82,205,255, 12, 99, 6,109, 50,130, 54,210,160,105,203,
+193, 48, 12, 22, 46, 92,232, 82, 90,236,201,191, 62, 88,149, 1,238, 65,122, 2, 92, 81,126, 30,152,133, 31,224,135,243,215,191,
+135, 4,237, 96,198, 49,148,127,113, 6,231, 10,170, 48,249,195, 13, 78,125,189,243,237,206, 78, 18,186, 5,207,252,250,140,195,
+ 60,145,140, 91,140,160,137, 47,162,244,245, 1,128, 94, 81,115,253,140,254,109,156, 1, 0, 61, 48, 82,146,128,131,129,167, 17,
+ 0, 96,160, 98,160, 83,117, 38, 51, 51,243,158,139,118, 4, 73, 90, 80, 27,107,142, 62,224,239,240,190,205,138, 97,125,250,145,
+103,195,163,248,202,136, 86,188,208,238,225, 20,159,132, 18,157, 74,197,138, 17,102,166,250,183, 51, 63, 55, 97,140,217, 73, 81,
+183, 92,248,217,182, 78, 60,179,192, 5,121,105,247, 85, 1,216,181,107,151,108,235,191,222, 69,226,178, 15,100, 77,172, 4,156,
+141,248, 1,160, 82, 87, 5, 4, 3,255,119,112, 9,212,215, 21, 88,247,242,234,150, 70,100, 13,117, 60, 15, 58,141, 53, 74,192,
+216,177, 99, 81, 88, 88, 8,169, 84,218,226,242, 78, 38,179,244, 27,177,177,177, 28, 0, 42, 35, 35, 35, 60, 57, 57,185, 52, 53,
+ 53,245,180,179, 66, 24,134, 1, 77,155,106,136,223,158,252,243,242,242, 16, 29, 29,237, 82,162, 18, 19, 19,237,201, 22, 89, 89,
+ 89,117, 21,128,230,168, 43, 46,151, 67,116,116, 52,153, 58,117, 42, 55,102,204,152,123,238, 29, 56,112,192,230,233,176,121, 61,
+156,150,223,156,195, 1,225, 81,237, 81,170, 80, 97,199,236,167, 17, 76,134,161,224,191,111,161,195,164, 14,200,114,129,252,107,
+ 50,203,234,106, 35,205,224,106, 11,223,122, 12,186,162,106,148, 38, 71, 53,250,220, 5,113, 54,150,246,190,131, 21, 23,222,107,
+106,121, 54, 7,233, 54,167, 12, 52,179,172,251,241,190,205,130,164,164, 36, 47, 0, 15, 3,240,177,187,172, 4,112,126,211,166,
+ 77,114,103,229,124,178,254, 19,138,174, 52, 10,104,163, 65,172,128, 73, 44, 16,240,249,106,131,152, 18, 10,245, 44,207,207,155,
+161, 37, 38, 19,191,236,150,241,235, 47, 54, 26,158,123,105,166,217,153,247, 86, 42,149,255,177,253,159,159,159, 95,233,237,237,
+ 77,105,181, 90,214,254,153, 65,131, 6,125,220,204,196,190,160,169,121,202,119,100,253, 95,186,116, 9,157,125,252,236,189, 1,
+238,120, 1,106,200,191, 82, 87,133, 21,143, 46,169,185,241,252,174, 87,129, 80, 96, 82,106, 34,118, 46,220,234, 74, 37,107,172,
+115,107,114, 69,189,121,243, 38, 0,160,125,251,246,181,254,135, 11,238,236,102, 84, 68, 72, 67, 74,128,201,196,216,226, 1,154,
+197, 10,104,134,188,180, 39,127, 0, 32,201,201,201, 0,112, 43, 35, 35, 35, 48, 57, 57, 89,225, 52,249,155, 76,160,105, 35,140,
+ 52, 13, 83, 29,242,231, 88,215,138, 33, 49, 49, 17,121,121,121,119, 91, 87, 90, 26,226,227,227,107,206,183,109,219,214,100,101,
+199, 78,225,105,114,253,179, 39,254,169, 83,167,162,127,255,254, 54, 5,192, 85,143, 64,179, 84,194,146,235,197,208,238,252, 55,
+124, 94, 88,141,240,168,246, 8, 11,150,224,250,206,235, 22,242, 15,240,179, 12, 1, 8,120,206,105,176,205, 52,198,214,229,226,
+ 53,220,124,127, 57,244,153, 27, 27,247, 16, 72, 36, 48, 24, 12, 40, 40, 40, 64,185,225, 10,186, 32,188,193,103,173,110,240,198,
+234, 62,177,181, 19,235,179, 57,110,180, 47, 98,215,174, 57, 55,219, 25,105,132,184,157,174,131,245,189,111,124,124, 60, 71, 8,
+177, 13,229, 52,229,125,109,109,153,227,243,249, 77, 42,243,164,164, 36,127, 0,147, 14, 30, 60,248,111,150,101,141,118,117,137,
+207,227,241,188,147,146,146, 94,218,180,105,211, 94,135,140,185,104, 1,191,242, 86,133, 88, 32, 16,121, 83,124,226,199,241, 68,
+ 94, 44,143,199,103, 9, 5,150,240,205, 28,143,103,228,177,196,160,229,153,117,222, 66, 1,249,226,216, 94,195,220,148,153, 44,
+138, 29,167, 81,161, 80,168,117, 58, 29, 3, 0, 90,173,150,125,247,221,119,107, 8,255,131, 15, 62,120,163,169,245,125,244,232,
+209,179,109,255,103,103,103,167, 55, 71, 27,162, 28, 89,255,203,167,196,195, 80, 81,129,183,122,118,131,253,216,189,211, 86,200,
+196,137, 49, 0,106,145,255,196,137, 19, 99, 1,144,137, 19, 39,198,110,152,248,153,197,179,216,181, 85,173,231,157,193,194,117,
+249, 88,184, 46, 31,115, 86, 93,194,115,203,254,192,228,255, 59,219,244,142,174,164,196, 41,197,224,175, 34,127,235,152, 63,215,
+128, 39, 0, 38,154,198,224, 65,131,154, 67,201,224,182,110,221,138,173, 91,183, 66, 38,147,213, 28, 46, 42, 60,156, 76, 38, 67,
+108,108,108, 13,249,219,223, 76, 78, 78, 86, 58,211, 49, 49,140,217, 98,249, 27, 45,174,255,186,228,111, 54,155,161,213,107, 93,
+122, 65,155,199,160,174,215, 96,219,182,109,216,182,109, 91, 45,101,192,165,247,205,169,221, 31, 90,207,155,164, 36,218,200,127,
+234,212,169, 72, 77, 77,173, 33,127, 1, 95,224, 42,249,219, 58,240,134, 14,167,161, 71, 49,170, 39, 13, 6,151,249, 22, 74,174,
+ 23,131,155,212,253,110, 38,100,190, 5,126,155, 16, 32, 32,224, 47,213,140,181,149, 5,208,103,110, 4,199,113,184,112,225, 2,
+ 70,142, 28, 9,137, 68, 82,139,248, 3, 3, 3,161,215,235,161,215,235, 81, 90, 90,138,105,250,121,248, 34,240,245, 6,101, 58,
+233,242, 38,117,158,117,149,184,155,203, 88, 33, 13,144,191,211,117,176,238,251,198,199,199,115,219,182,109, 67,102,102, 38, 18,
+ 18, 18,184,166,190,175,149,252,193, 48,140,219,109, 34, 41, 41, 73, 12,224,229,236,236,236,119,151, 45, 91,118,130, 16, 34,181,
+ 29, 0,218, 5, 7, 7,123, 29, 58,116,104,125, 82, 82,210,200,198,228,124,150,190,158,199, 35, 2, 17,205,112,126, 70,163, 41,
+212,204,178,237,204, 44, 27,101, 38, 36, 2, 60, 94, 48, 33, 36, 0,132,231,199,114, 8,226,104, 54, 64,173, 55,121,135,250, 49,
+ 60,106,144,198,169, 50,210,233,116, 76, 93,171,191,165,131,106,140,184,187,116,233,130,206, 62,126,208,149,221,198,227,253, 7,
+184, 76,208, 54, 37, 98,233,214,229, 0, 80, 67,254, 54, 47,194,174, 93,187,114,108, 74, 64,137,250, 22, 6, 44, 28,226,146,146,
+161,213,155,161,213,155,113,187,202,136,210, 10, 3,110,222, 49,184, 69,124,182,198,226,136,252, 31, 20, 26, 81, 2, 96,160,141,
+ 48, 24, 12, 77, 17,207,201,100, 50,216,198,200, 67, 66, 66,236,173, 89,184,208,153,212,178,132, 27,113, 37, 58,236,244,104,147,
+209, 98,249, 27,105,208,166,218,228,111, 50,153,160,213,106,161, 81,107, 30,116,177,112, 91,183,102,214,126, 37,203, 31,172,215,
+221,234,240,236,201,223, 70,252, 20, 69, 65, 44, 22,195,219,199,171, 73, 9,158,248, 84, 50,215,208,225,232,187,251,255,111, 9,
+130, 49, 12,204,232,215, 0, 0, 62,185,215,112,174,160,202,210,201,143,126, 13,166, 11, 75,129,202, 42,215, 50,208, 10,119,223,
+199, 27,149, 0,128,141, 27, 55, 98,215,174, 93, 88,185,114, 37, 78,158, 60, 9,163,209,136,242,242,114,155, 85, 86,243,124,120,
+120, 56,244, 0,120,184,241, 64,234, 75, 35,245,158, 52, 65,105, 36,141,120,240, 92,150,105,239, 9,171, 47, 38,192, 29,242, 7,
+ 0,119,149,128,164,164,164,214, 86,242,159,245,245,215, 95, 95, 92,188,120,241, 83,155, 55,111, 70,151, 46, 93, 0, 0,145,145,
+145, 80,169, 84,162,165, 75,151,158, 62,116,232,208,183, 73, 73, 73,210, 6,115,137,229, 8, 88, 70,108, 54, 51, 65,102,198,220,
+206,100, 54,117,226, 81,164,173,144, 79, 9,196, 2,158,158,239, 37, 84,122,251,242,212, 60, 49,199,136,121, 60,111, 62, 67,251,
+221, 56,243,187,104, 70,200, 39, 14,211,157,159,159, 95,169,213,106,217,250,220,252,125,251,246,189, 66,211,116,179, 85,164,190,
+125,251, 54,155, 44,126, 99,196,253,223, 89, 47,222, 37,219,146,155,120,171,103, 55,172,178, 16,180, 75, 90,171,205,250,183,145,
+126,157,223,169, 57, 15,238,221,218,165,196, 87,235,205,208,232, 24,168,181, 12, 84,213, 12,148, 26,198,245, 86, 89, 79,228,191,
+189,149,111,255,255,245,235,215,161, 84, 42,255,178, 30, 35, 61, 61, 29, 82,169, 20,182,160,191, 58, 99,253, 92,122,122, 58, 12,
+122,125, 83, 20, 0,110,195,134, 13, 40, 41, 45,133,128,199, 67, 88,235,214,181,200,255,209, 71, 31,197,193,131, 7,157,237,156,
+ 72,108,108,108, 93, 37,160,150, 39,195,217, 88, 5,218, 72,131, 54, 26, 97, 50,209, 96, 24,115, 13,249, 27,141, 70,232,116, 58,
+ 84, 87, 87, 67,163,113, 93, 1,176, 31, 2,176,193, 93,203,127,107,230, 86,128, 3, 42,173, 68, 99, 29,212, 6,225, 56,139, 18,
+144,153,137, 68,139, 5,229, 82, 91,169, 75,254, 2,129, 0, 34,145, 8, 98,177, 24, 98,177,184,201,117,170,161, 33,129,250,230,
+197,219, 99,114,250,118,112, 79, 70,225,206,208, 1, 8,198, 48, 72,158, 94, 3,230,118, 5, 16,224, 7,126,213, 22,252,252,201,
+105,128,199,115, 41, 45, 77, 29, 10,208,242, 44,125,202,138, 21, 43, 80, 81, 81,129,245,235,215,163,111,223,190, 88,182,108, 25,
+ 6, 12, 24, 0,189, 94, 95,215, 66,179,169,212,127, 53,241, 59, 75,208,238, 14, 7, 52,164, 72,184, 44,199, 58,139,163,166,109,
+184, 59, 52,102, 79,254, 53,100, 99, 85, 2, 92, 28, 14,240, 61,127,254,252,167,175,188,242,202,145,222,189,123,251, 1,192,146,
+ 37, 75,144,159,159, 15, 0, 24, 50,100, 8,118,236,216,129,225,195,135,123, 79,155, 54,173, 32, 39, 39, 39,251,249,231,159,159,
+246,251,239,191,223,147,179, 65,193, 65,236,245,235, 5, 76,142,236,224,190, 78,157, 58,231, 68, 69, 74, 47,242,124, 37,229, 60,
+ 34,212, 82, 34,129,142, 18,123,105,104, 62,143, 6,103,226,177, 98,147,175,166,180,202,231,228,161,179,131, 90, 5,134,237,112,
+168,140,218,141,249,239,220,185,243,185, 73,147, 38,125,109,115,251,171,213,106, 74, 40, 20, 54,185, 34,217,220,254,217,217,217,
+247,215, 3, 96,179,242,163, 59,118,134,161,162, 2,218, 18, 11, 9,142,180, 90,135,174,122, 1,174,255,113,237, 30,217,245,157,
+ 87, 93, 40,115, 41,241, 77, 37,127,123,226,231, 56,206, 54,198, 95, 3,147,201, 84,115, 40,149, 74,104,181, 90,200,229,242,191,
+172,231,176,205,243,223,191,127,127, 93, 79, 0,151,158,158,142, 62,125,250,192, 96,208,215,116,116,233,233,233, 46,185,235,215,
+125,182, 14, 38,147, 9,237,194,195, 97, 50,155, 27, 34,127, 87, 58, 18, 82,143,235,191,102,234, 98, 99,158,140,123, 20, 0,218,
+ 84, 67,254,167, 78,158,130, 78,175,135, 70,163,129, 74,165,130, 82,169,172,101,217,185, 10,219, 48, 64, 19,198,253, 81, 85, 89,
+133,170,170, 74, 84, 86,201, 81, 89, 85,133,170,170, 42, 84, 85, 90, 44,210,110,221,187, 67,110,253,223, 85,235, 31, 0,250,247,
+239,127,215,234,247,246,134,143,143, 47,124,125,124,161,209,104, 98,155, 72,254,110, 15, 7, 20,172,156, 5,193,211,107, 16,140,
+ 97,224,231,174,129,105,251,107, 64,128, 31,118,191, 26,143,162,221, 55, 48, 33,117, 19,192,255,139,151, 21, 49, 20, 65, 18, 46,
+129, 86,171,133,193, 96,128, 78,167, 67,110,110, 46, 62,252,240,195,122, 31,247,242,178,121, 80,174,185, 67,222,238, 90,213,246,
+249, 75,156, 60,111,138,146,225,106,155,173, 37, 39, 51, 51,147, 36, 36, 36,216,200,223,109,207, 4,159,207, 39, 12,195,212, 85,
+ 10,224,106, 44,192,166, 77,155,174, 38, 36, 36,244,221,188,121,243,200,163, 71,143,250,142, 30, 61,250,164,141,252,173, 6, 36,
+ 68, 34, 17, 87, 84, 84, 36,216,183,111, 95,215,192,192,192, 83,195,134, 13, 43,168, 79,214, 51, 83,158, 97, 59, 71,117,209, 12,
+ 25, 50, 36,254,226,197, 63, 31, 81,107, 53,173, 57,198,196,128,130,137, 49, 82, 70,163,209,168, 87,163, 76,205, 26, 13,154,210,
+226, 50,230,231, 61,123, 83, 90, 5,135,148,211,180,206,161,249, 94,159,245,175, 80, 40,248, 0,224,231,231,215, 98,135, 5,168,
+134,172,255,173,255,122,215,162, 53,151,221,174,117,207,213, 88,128,137, 19, 39,198,174,123,121, 53, 0, 75,192,223,174, 93,187,
+100, 54,210,183,173, 9, 16,247,205, 83, 0,128, 51,169,191,217,226, 3,254, 42,212, 84,198,146,146,146, 26,107,223, 70,250,118,
+133, 11,141, 70, 3,131,193, 96,215,137,252,117,105,156, 61,219, 18,251, 97, 98, 24, 92,188,120, 17,191,159, 57,131,190,125,250,
+194, 96, 48, 64,175, 55,192,160,215,227,219,111,190,129,237, 57,103, 26,122, 90, 90, 26,122,116,239, 1,147,201,132,171, 87,175,
+130, 49,209, 40, 45, 41,109,214, 60,181,157, 91,215, 44,176,173, 93,224,216, 3, 96, 50,130, 49, 91,220,254, 39, 78,252, 6,173,
+ 94,139,106,141, 26, 42,149, 10, 10,165, 18, 10,133,188, 73,138,152,205, 19,224,166,245, 15, 0, 56,114,228, 8, 52, 26, 13, 52,
+ 26,181,245, 83,131, 86,193,193,232,214,189, 59, 46, 95,186,132,195, 71,142,184, 44,211,102,253,243,249, 2,120,121,121,193,199,
+199, 7,190, 62, 62,240,241,241,130, 92, 33,143, 77, 78, 78,206,113,170,205, 53,193,213,223, 16,206, 21, 84,193,116, 97, 41,170,
+112, 12,100,220, 42,144, 97,255, 70,193,202, 89,120, 50,245,107,136, 5, 20, 32,224, 91, 14,119, 88,199,205,161,128,210,241,159,
+ 33,104,203,120,232,116, 58, 4, 5, 5, 65,161, 80, 64,161, 80,224,248,241,227,184,125,251,118,141,155,184,230,249,210, 82,188,
+ 26, 40, 65, 43,175,138,198, 44,224, 88,123, 82, 77, 72, 72,136,177,187, 23, 83,231, 94,172,139,237,130,107,132,192,155, 99, 70,
+129,203,150,127,125,239,155,153,153, 73,182,109,219, 70,154,248,190,181,148, 0,119,200,223,134,247,222,123,239,252, 83, 79, 61,
+ 53,109,197,138, 21, 93,207,157, 59, 55, 76, 34,145,240,158,124,242, 73, 34, 18,137,192,178, 44, 25, 55,110,220,249,249,243,231,
+247,233,213,171,215,238,151, 94,122,233,185,151, 94,122,169,193,177,168,228, 57,201,236,159,151,174,158,234,213,187,207,179,167,
+ 78,158,156,188,123,207, 79, 31,228,157, 60,217,250, 98,254,101,241,213,210, 2,238,219,213, 63, 72, 86,164,173,236,145,189,103,
+ 79, 90,167,142,157,126,246, 9,243, 62,178,105,211, 38,179,179, 57, 58,122,244,104,156, 58,117,170, 95,122,122,250, 82,131,193,
+ 32, 88,182,108,217, 71,187,119,239,158, 90, 90, 90,250,151, 19,135, 83,101,212,208,141,224, 27,133,144, 3, 53,214,191, 13, 35,
+ 67, 66,176, 10,151,157,183, 58,172, 46,254,203,167, 47, 34,160,107, 43,196,125,243, 20,118,205,248, 81,102,211,222,108,228,111,
+179,254, 93,153,101,176, 99, 69,191,230, 97, 88, 66,112,233,210, 37,216, 42,107, 93,247,178, 64, 32,128, 64, 32, 64, 69, 69, 5,
+198,141, 27,247, 32,202,137, 72,165, 82, 46, 61, 61, 29,131, 6, 13,130,193,104,132,222,160,135,193, 26,220,164, 55, 88,134, 1,
+214,174, 93,139,185,115,231, 58,234, 76,184,212,212, 84,152,205,102,156, 62,125, 6, 2,190,197,109,219,185,115,103,220, 40, 44,
+ 68,105,105, 41,182,108,249, 30, 83,167, 62, 3, 0, 92, 29, 79, 64,131, 29, 80, 70, 70,134, 16, 0,147,156,156,204,214,103, 1,
+185, 50, 85,209,102,249,231,230,230, 66, 91,173,171, 81,192,212, 26, 53,212,106, 21,212,106,247,134, 0,236,173,255,169, 83,167,
+214,120, 0, 92, 85, 4,166, 78,157, 90,235, 60, 74, 42, 69,183,238,150,160,184,203,151, 46,225,134,213,227, 49,117,234, 84,151,
+163,246,135, 62, 60, 20, 34,161, 8, 18,137, 4, 98,177, 24, 34,145, 8,101,101,101, 78,147,191,157,181,223,172, 21,112,242,135,
+ 27,176, 3,192,216, 21, 79,128,203,124, 11, 36, 49, 13,231, 10,170, 64,130, 2,113,173, 68,109,177,254, 93, 28, 2,176,107,127,
+196,166, 8,216,159, 59,132, 94, 15,240, 44,198,222, 93,247,190,133,232, 77, 38, 19,190,248,226, 11,140, 28,121, 55, 46,236,224,
+204,112,160, 92,135,174,123, 21,232, 23, 18, 89,175,200,122,162,220,237,135, 60,101, 14,158,117,150,176, 73, 19, 60, 10,141,121,
+ 35, 92, 86, 36,238,247,251, 90,149,128, 38,207, 2, 88,177, 98,197,150,121,243,230,133,156, 61,127, 62, 81,175,215,247,145,201,
+ 14, 73, 68, 98, 17,159, 34, 20, 14, 29, 58,228,219,163, 71,143, 77, 9, 9, 9,255,158, 60,121,178, 67,107, 61,231,208, 1,118,
+194, 83, 19, 14,247,237,219,127, 33,205, 24,199, 94,203,191,250, 1, 91, 88,192, 0,224,196,160, 76,189, 59,117,205, 12, 13, 13,
+217,203,227, 11,191,253,207,226, 20,250,147,101, 31, 59, 44,165, 65,131, 6,125, 60,122,244,104, 0, 64, 69, 69, 5,178,179,179,
+253,190,250,234,171, 15, 0,224,212,169, 83,131,122,246,236,185,255,111,161, 0,216, 22,254,121,244,219,205,142, 44,123, 87,166,
+ 4,146,157, 11,183,114, 3, 22, 14, 65,112,239,214, 53,164, 95,227, 78,189, 80,134, 51,169,191,185,234,182,106,174, 57,169, 4,
+ 0,215,189,123,119, 92,184,112,161, 22,177, 40,149,202, 2, 0, 29, 93,212,230,239,167, 39,224,158,223,252,246,155,111, 97, 48,
+ 24, 96,164,141,160,105, 26,169,169,169,141, 45,146,195,165,166,166,214,156,176,172, 25, 98,137, 15,244,122, 3, 46, 93,188, 8,
+190, 64, 0, 19, 77,195,203,219, 11, 91,182,108, 1,143,199, 67, 98, 98, 34, 30,125,244, 81,174,170,170,225, 0,175,212,212,212,
+253,201,201,201,116, 70, 70, 70,168, 45,111,234,172, 3,224,146,107,115,225,194,133, 56,118,236, 24,170,171,171, 81,173,213, 66,
+163, 86, 91,201, 95, 13,141, 90,131,106, 77, 53,180,118, 29,190, 51,121, 23, 29, 29,205,229,229,229,213, 88,255,245, 77, 3,116,
+118, 17, 32,235, 92,252, 90,101, 97, 35,125,219,216,163, 43,171, 20,218, 86,248, 3, 0, 31, 47, 31,136, 37, 98,104, 52,154, 88,
+219,208,142, 27,228,127, 95,230,107,219,148,128, 73, 43,190, 2,183, 29,104, 53, 51, 3, 57,175,199, 99,120,202,119,128, 64, 0,
+111,113,211,198, 57,235, 42, 2, 0, 48,245,216, 84, 7,223,186,131,222,251,189, 80,246,147, 14,138,229,119,175,154, 76, 38,140,
+ 24, 49, 2, 0, 16, 30, 40,193,175, 25,237,177,242,195,155,248,236,140,222,145, 69,108, 63, 45, 14, 13,253,111,247,108,142, 27,
+125, 86,115,205,173,111,142, 49,255,251,249,190, 53, 74, 64,115,212,191, 79, 63,253,244,211,231,103, 62,191,239,161,129,209,131,
+ 52,106,117, 16, 99,102,140, 97, 97, 97, 21,225,225,225,101,106,181,250,220,228,201,147,157,238, 20,126,250,241, 39, 22,192,150,
+103,167,191,152, 59,108,248,240, 31, 37, 18,137, 63, 1,199, 18, 66,192,178,156, 74,175, 85,200,174,156, 47,214,120,139,132, 78,
+245,243, 54,242, 7, 44,129,212,117, 3,245, 62,252,240,195,127,255, 45, 20, 0, 43,169, 59, 44,176, 93,187,118,185, 92, 89,207,
+164,254,198, 1,128, 77, 17,176, 35,254,230, 36,116,183, 27, 82,239,222,189,113,234,212, 41, 84, 84,212,184, 8, 59, 2,128,141,
+252,102,204,152,241,160,203,171, 86, 30,165,167,167,115,207,206,120, 22,107,215,174,179,142,153, 51, 88,184,112, 97,163,211,151,
+ 92, 92, 65,207, 98, 57, 29, 60,232,104,179,137,238,169,169,169, 87,147,147,147,203, 51, 50, 50,120,201,201,201, 53, 1,129,214,
+105,129, 78,119,116, 54,139,121,216,176, 97,205,158,119,209,209,209,156,189, 21,111, 31, 3,224,198, 10,128, 4, 0,183,101,203,
+150,123,172,124,171,135,192,229,250,188,101,203, 22,226,170,199,192, 25, 52,230,250,119, 85, 89,152,252,225, 6,192,110,225,159,
+ 81,239,222,157,142,172,109,174,130,178,243, 0, 56, 90, 9,176,116, 88, 41, 74, 1, 12, 88, 25,136,229,167,187, 32, 4, 64, 69,
+129, 22,157, 58,117,178,144,198,242, 64, 60,246, 80, 8,162, 30,203,119,214, 34,118,122,120,211,250, 44,113,183,191,105,166, 62,
+175, 73,178,254,162,247,109, 54,108,216,184,225, 42,128,171,205, 37,239,219,239,190, 44, 68, 51, 68,133, 54,103, 96,158, 21, 11,
+254,138,252,252,171, 55, 3, 34, 19, 39, 78,140,217,149,218, 34,247, 2, 32, 0,184,135, 30,122, 8,123,247,238, 53, 88, 73,159,
+ 5,224,117,159, 60, 15, 77,134, 45, 72,112,238,220, 57,156,213,242,127, 32,105, 91,184,112, 97,100,125,110, 73,187,105,132,174,
+ 88, 59,228, 62,151,113, 77,122,154,186,236,111, 67,171,242,185, 74,226,142,214,246,111, 14, 52,101, 72, 96,209,162, 69,184,126,
+253,122,179,165,197,153,229,125, 93,197,153,183, 21, 56, 3, 75, 96,232,200, 4, 9,126, 57,209, 5, 97, 94, 62,248, 51,239, 14,
+186, 58, 73,254, 78,212,191,150,186, 28, 46,185, 79,223,245, 44,207,238, 28,218, 54,179,188,180,191, 42,225,127,249,110,128,117,
+ 61, 12,110,120, 18,238,187, 18, 48,110,220, 56,241,223,172, 2,186,101,217, 55,215,111,103,100,100,216, 86,168, 97,146,147,147,
+155, 58,149,201,131,230, 39,255, 38,149, 69, 74, 74, 74,179,148,101, 70, 70, 6, 63,121,120,242,125,175, 23, 71, 50,245, 56,146,
+153,223,226,219,172,167,102,122,240,192, 43,161,187,251, 8,123,224,129, 7, 30,120,224,129, 7,127, 95, 80,158, 44,240,192, 3,
+ 15, 60,240,192, 3,143, 2,224,129, 7, 30,120,224,129, 7, 30,120, 20, 0, 15, 60,240,192, 3, 15, 60,240,192,163, 0,120,224,
+129, 7, 30,120,224,129, 7,255, 8,212,154, 5,112,246,236, 89,183, 35, 83,235, 11, 38,244,200,243,200,243,200,243,200,115, 82,
+ 94,163,211, 68, 91,128, 60, 79,249,122,228,213,194, 43,175,188,210, 14,128, 2,128,208,186,213,121,139, 74,159,199, 3,224,129,
+ 7, 30,192,223,223,159,242,247,247, 39,254,254,254, 2, 0,188,150,150, 62,219,190,243,118,251,207, 55, 21,245,173,143,239, 65,
+ 11,194, 19, 79, 60, 17,243, 15,120, 13,219,218, 87,146,191,235, 11,120, 20,128,127, 56,154,176,221,186,203,136,139,139,139,177,
+118,186, 53,135,245,218, 63, 82, 94, 11, 7,137, 12, 11, 35, 0,160, 82,169, 88,149, 74,197,169, 84, 42, 19, 0,179, 59,194, 94,
+126,172,119,201,172,177,189, 39, 2,192,172,177,189,191,121,249,177,222,235, 0, 96,225,164,135,200,194,167,163, 5, 47,143,233,
+229,214,154, 34,246, 75,209,102,102,102,214,218,124,167, 41,228,111, 87,239,155,115,173,253,166,202,108, 14,121,220,125, 80,108,
+254, 82, 69,233,137, 39,158,136,217,187,119,175,236, 31,208,198, 12,176, 44, 22,119, 95,121,180, 77,176,136,234,220, 58,148, 31,
+ 33,109, 71,133, 5, 4, 11,189, 69,130,102,251, 61, 62,254, 25,160,172, 90,152,222, 90, 32, 30,216, 41, 0, 78,236,173, 98, 4,
+ 32,106,234, 79,101,101,101, 33, 45, 45,173,214,242,127, 11, 22, 44,176, 53,116,226,142, 60,246,135,192,218, 5, 61, 37,171,165,
+200,107,241, 69, 31,229, 45,225,162, 58, 72, 1, 0,101, 52, 51,189,181,144,255,157,237,230,101,117,181,168,172,178,146,118, 70,
+208, 75, 99,122,229,155,205, 92,248,195, 67, 91,249,117,237, 58,236,128, 72, 68, 21,205, 73, 25,244,159,255,146, 11,184,163,210,
+ 61, 33,224,147,159, 0,114, 17, 64, 79, 87, 19, 89,119, 41,218, 38, 46, 55, 91,139,252,237,234,190,187, 75,229, 18, 23,175,223,
+119,121, 9, 9, 9,182, 53,250, 29,190, 83, 66, 66, 2,151,153,153, 73, 92,200, 59,210, 12,114,156, 34,127,150,101, 65, 8,193,
+200,145, 35,185, 35, 71,142, 16, 23,203, 88, 8,192,212, 28,233, 9, 10, 10,154, 37,151,203, 63,119,243,235,126, 0,148,104,190,
+ 85,176,107, 97, 88,159,126,212,179,225, 81, 98,101, 68, 43, 97,104,247,112, 62,159,132, 82, 58,149,138, 17, 35,140,166,250,183,
+163,159,155, 48,134,110,234,111, 56,171, 73,132, 0,120,220,250,217,210,224, 7,224, 41, 0,233,214, 79,191,102,146,251,125, 75,
+179,176,221, 42, 96,202, 97, 17, 15,178, 54,168,208,166,144,205,252,249,243,239, 33,127, 0, 72, 75, 75,139,157, 63,127,190,203,
+ 86,206,198,215,188,239, 33,107, 0, 96,127, 8,196,198,215,188, 31,168,188,212,212,212, 24,138,162,184,103,158,185,187,164,237,
+ 43,175,188, 18, 3,128,139,136,136,224,218,181,107,199, 5, 7, 7,115, 79, 63,253,180, 83, 50, 55,164,126, 20,115,156, 26,194,
+ 45,141,142,175,177,126,215, 45, 93, 23, 51, 15,171,185, 57, 17, 27,184, 25,237,182,114,227,131,247,115,131, 58, 44,115,202, 58,
+238,208, 46,172,117, 76, 7, 41,247,218,156, 25,198,229,111,189,200, 45,124, 97, 26, 90, 11,249,223,189, 59,251, 89,172,124,227,
+101,110,217,220, 23,216,110,126, 62, 70, 0,104,221, 58,152,111, 45,255,122,113,102,231,211,157,195,195,189, 2,158,153, 18,153,
+ 54,113, 82,123, 1,203,177,210,144, 86, 34,239,143, 95, 63,145, 54,239,169,126,223, 62,254, 88,155,200,136, 8,239,226,127, 47,
+238,237,238, 54,153,246, 27, 69,185,180,105,148, 3,203, 31,205,224, 9,104,113, 30,128,204,204, 76,146,144,144, 80,243,189,132,
+132, 4,174,190,161, 19, 43,105, 59,173, 84, 52,148, 14, 59, 57, 77,238,232,236,201,127,193,130, 5, 24, 57,114, 36,247,235,175,
+191,186, 35,138,110, 70,227,181, 44, 40, 40,104,146,155,223, 13,183, 26,156, 82, 0, 72, 74, 74,138, 76, 74, 74,218,147,148,148,
+148,107,119,236, 76, 74, 74,114,105, 27,229, 79,214,127,194, 79, 93,150,226,247,248,147,147,194, 21, 3,123,118,224,183, 13,239,
+168, 54,136, 59, 86,155,245,237,137,159,119, 91, 58,204, 20,198,148,221, 10,248,250,139,141, 66, 23,121,220, 45, 5,160, 61,128,
+111, 0,196, 91, 63,219,183, 32,126, 11, 6,176,197,170,156, 28, 7, 48,214,122, 30,220, 12,178,167,192,137,241,210,150,174, 0,
+ 56,129, 33, 0,174, 0,136,114,199,186,177,185,208, 35, 34, 34, 98,237,173,126, 59,203,191,230,158, 51,238,118,219, 51, 73,195,
+133,118, 86,186, 2,212, 20, 69,205,185,237,222,131,144, 7, 0, 39, 78,156,144,137,197, 98,228,230,230,222,163,108, 21, 23, 23,
+147,146,146, 18, 50,100,200,144,216, 61,123,246, 56,149,135,173, 79, 92,148,113, 98, 1,250, 84, 8,107, 89,195,132,226,176,174,
+248,121,242, 77, 73, 34,145,142,189, 16,203,220, 26,239,208,109, 26,211, 65,202, 69, 8, 37,183,223,124,117,186,177,157,143, 80,
+168,186,120,140,120,149,159,199,188, 17,157,209, 54, 64,130,242, 51, 71,201,157,211,199,168, 5,179,102,208, 49, 29,164, 92, 55,
+ 47, 95,147,181, 67,173, 23,173, 90, 9, 71, 9,133,148,248,248,241,219,243, 79,157,188,213, 61,172, 93, 7, 83, 64,171,118,196,
+215, 23, 94, 29,162,188,162,130,130, 68,157, 88,142, 51,254,124,178, 92,251, 0,235, 48,103,111,241,219, 14, 55,149, 0,174,158,
+207,186, 71,125,207,253, 85,242,106,148, 0,185,124, 52, 50, 50, 20,104, 10,249, 55,166, 84,212,145,211, 36, 15,192, 19, 79, 60,
+ 17,179,103,207, 30, 25, 33, 4, 20, 69, 33, 47, 47, 15, 71,143, 30,117, 75,150,217,108, 62,111,245, 0, 52, 71, 60,139, 68, 46,
+151,239, 12, 10, 10,122,218,141,239,218, 60,206,154,164,164,164, 94, 0, 14, 28, 60,120,112, 92, 86, 86,214, 16,219,145,157,157,
+253,148, 76, 38, 59,148,148,148,228,212,144,199,130, 69, 11,196,149,183, 42,130,245,156, 49,130,227,147,110,156, 72,212,157, 21,
+ 8,187,179,132,234,204, 18,126, 39,134,199,139,100, 89, 18,174, 37,230, 80, 70, 72, 5,126,113,108,175, 88,252,100,232,125, 85,
+ 0, 62, 1,112, 16,192, 60,235,231, 39, 77,200,236, 64, 0, 75, 0,236,177, 86,244, 61,214,243, 64, 55,229, 29, 1,176, 23, 64,
+ 50,128,245, 0,222,176,202, 60,210,196, 74,225,111,253,244,110, 6, 11, 27, 86, 11,107, 73, 99,150,214, 3,196, 67, 0,142, 1,
+104,109, 85,158,158,117,229,203, 89, 89, 89, 50,123,203,127,193,130, 5,178,180,180,180,216,180,180,180, 88,123, 37, 32, 45, 45,
+ 45, 54, 43, 43, 75,230,140, 60,123, 75,157,154,162,192,213,189, 51,112,117,239,140, 90,164,205,254, 16, 8,119,229,217, 44, 77,
+119,228,165,167,167,199, 28, 63,126, 28,211,167, 79, 71,113,113, 49,146,147,147, 99,234,123, 70, 44, 22,203,218,180,105,227, 48,
+255, 50,210,211, 99,218, 28,255, 3, 37,211,135, 65, 88,172,194,231, 75, 62,142,169,109, 28, 3,233,233, 25, 49, 2, 67,132, 44,
+168,141,222, 33,249,207,122,105, 10,253,175,249, 51, 56, 97,209, 25, 97,224,157, 11,228,194,109, 53,194, 67,188,241,112,143, 48,
+180, 85, 94,193,117,141, 30,124,150, 67, 0,225, 9,254,239,197,233,220,107,175,188,112, 37,166,131,180, 65,210, 81, 40, 53, 65,
+131, 6,249,164,245, 30,242,184,201, 55,168,163,200, 39, 32,148,149,248,120, 27,131, 90, 5, 27, 66,194,219,243, 21,114,141, 72,
+173, 98,160, 80, 25, 93,113, 99,199, 56, 67,156, 78,198, 3,220, 99,249,215,167,148,187,160, 4,144,122, 62,235, 30,245, 61,231,
+148, 60,110,107,224, 61,135,139,242, 26,202,211, 38,145,118, 93,165, 34, 35, 67,129,230, 34,127,138,162,184,125,251,246,201, 88,
+150,197,235,175,191, 14, 66, 8,142, 30, 61, 10,203,214,187, 44,113, 67, 30,104,154,254, 29, 0,211, 12,158, 0, 57, 0,200,229,
+242,237, 65, 65, 65,177, 46,126,151, 15, 0, 51,103,206, 20, 1,200,202,206,206,238,178,108,217, 50,166,174, 18, 26, 28, 28,140,
+ 67,135, 14,197, 36, 37, 37, 57,212,202,120, 68,224, 71, 51, 92, 91,163,209,212,197,204,178,189,204, 44, 59,192, 76, 72, 47,240,
+120,237, 9, 33,109, 64,120, 97, 44,135, 8,142,102,219,169,245,166,144, 80, 63, 70, 72, 13,210,220, 55, 5, 32,220,106,241,175,
+132,101,156, 99,165,245, 60,220,141,223,154, 1,160,216, 90,153, 22, 1, 8,178,126, 18,235,117, 87,247,218,253, 55,128,107, 0,
+214, 1, 16,192, 50,134,205, 0,248,204,122,189, 41,251, 47,143, 4, 80, 1, 96, 84, 51,145,236, 11, 0,222,183,126,182, 52,244,
+ 4,240, 35,128, 71,173,158,148,158,238, 10,178,145,191, 61,233,219, 43, 1, 46, 87, 78, 43,249,219, 80, 87, 9,112, 71, 94,157,
+206,140,184, 42,239,240,225,195,160,105, 26, 3, 7, 14,140,237,214,173, 27, 10, 11, 11,107,222,143,101, 89, 72,165, 82,110,241,
+226,197,178,227,199,143, 99,220,184,113, 14, 59, 20, 67,238, 41, 80, 52, 3,229, 64,105,172,177, 91, 48,174,109, 56,124,151,180,
+ 88, 14,115,164, 27,184,195,139,131,101, 55,142,251, 35,238,249,171,142, 59, 40,138, 87, 93,113, 33,151, 45, 83, 26, 80, 85, 77,
+115,241,253, 34, 56,127,137, 16,183,148, 90, 84,168,244, 72,236, 31,193, 81,132,112,191,253,180, 31,170, 35, 39,184, 51, 59,127,
+ 46,106, 76, 92,238,239,109,231,132,132,250,117,108, 27, 17,197,120, 73,216,142, 35, 31, 79,244,233, 48, 48,121,124,235, 46, 79,
+198, 5,181,141,238, 43,175,110, 29,111,162, 77,166,235, 5, 90,167,134,222,172, 4,229, 84,157,200,204,204,148, 57,152, 25, 80,
+239, 61, 39, 98, 94,254, 17,179, 3,146,147, 3,145,156,124, 87,185,181, 17,119,115,144,118, 61, 10,140,219,150, 63,199,113, 48,
+153,238, 14,217, 15, 31, 62,220,214, 94,220,149,109, 18, 8, 4, 38,150,101,143, 91, 61, 1, 77, 81, 2,106,134, 62,229,114,185,
+ 44, 40, 40, 40,217,133,239, 22, 38, 38, 38,250, 29, 62,124,120, 69,118,118,118,235,175,191,254,154, 93,188,120, 49,127,243,230,
+205,232,210,165, 11, 0, 32, 50, 50, 18, 42,149, 10, 75,151, 46, 53, 31, 58,116, 40, 62, 41, 41,233,213, 70, 37,178,140,191,217,
+204, 68,154, 25,115, 79,147,217,212,159, 71,145, 40, 33,159, 18,137, 5, 60, 53,223, 75,120,219,219,151,119,135, 39,230,140, 98,
+ 30, 47,136,207,208,109,110,156,249,221,119, 70,200, 39,110,199,189, 57, 82, 0, 30,179, 90,135,246, 56,102,189,238, 10,166, 1,
+120, 29,150,177,146,247, 1,252, 1,203,252,201, 63,172,231, 82,235,253,105, 78,202,243, 2, 48, 11, 64,146,245,220,104,119,192,
+122,125, 22,238,221,202,215, 89, 76, 1,240,149,245,179,169,120, 30,192, 28,107,158,205,177,158,183, 20,116,178,186,176,126, 6,
+ 48, 23,192,108, 0, 49,240,160, 65,148,150,150,202, 6, 15, 30,140,217,179,103,231, 12, 30, 60, 24, 39, 78,156,192,250,245,235,
+ 99, 90,183,110, 45,163, 40, 10,133,133,133,164,178,178,146,188,246,218,107,177, 71,142, 28,145,189,244,210, 75,141,146,205,208,
+ 27,183,100,101,131,187, 35,121,246,236,156, 63,195,204,177, 61, 85, 65,178,140,245, 25, 49, 22,237, 4, 88, 87,248, 60,217, 82,
+ 25, 79, 70,190, 86, 26,123, 52, 83, 42,139,125,120,101,131,229, 83, 66, 51,171, 62,255,124,115,208,246,243,165, 55, 55,159, 41,
+ 86,110, 56,126, 93,123,163,204,192, 81, 28, 5,131,206,140,138, 10, 26,121,197, 10,243,174,194, 82,205,158, 91,101,202, 29, 69,
+ 37,151,143,149,149,143,185,105, 52,125,212,144, 76,191,192,240,118,250,106, 69,219, 30,209,143, 80, 52,137, 28, 89,122,249, 71,
+125, 96,144,183,164, 67,247,126, 21, 28, 83,113,158,240,252, 66, 88,150,229,221,185,163,119,198,139, 87,215, 53, 93,159, 27,188,
+ 86,148,187, 19,227,207,164,174,165,111, 59,238, 7,161,181, 20, 52, 22,148,103,231,206,111, 18,154, 67, 78,117,117,181, 12, 0,
+248,124, 62,222,122,235, 45,228,229,229,193,205,113,127,123, 24, 1, 24,141, 70,163,177,180,180, 52, 11, 77, 11, 8,212,212,114,
+ 7,200,229, 25, 65, 65, 65, 19,156,245, 20, 27, 12,134,254, 11, 23, 46,124,242,149, 87, 94,225,122,247,238, 77, 0, 96,201,146,
+ 37,200,207,183,236, 70, 57,100,200, 16,176, 44,139,225,195,135, 83,211,166, 77,227, 46, 95,190,188,238,249,231,159,127,222,203,
+171,126,106, 98, 89,206,144,115,240,224,182,194,194,235,207,155, 77,230, 48,158, 64, 98,224, 17,177,138, 18, 9, 85,148,216,171,
+156, 22,120, 85,130, 18,221,102,197,102,131, 70, 85,213, 74,182,251,236,123,230, 83,191,187, 29,247,230, 72, 1, 24, 3,224, 80,
+157,107,135,172,215,157, 5, 15,192,187, 0, 18, 1, 84, 53,240, 76,149,245,254,187,112,110, 92,103, 26,128, 3, 0, 84, 13,220,
+ 87, 89,239, 79,115, 35, 79, 30,129, 37,134,224, 67,235,231, 35, 77,168, 92,241, 86,175,201, 16,107,122,134, 88,207,227, 93,148,
+ 19, 8, 32,192,137,195,213,161,148,161, 0,157, 16, 39,240, 0, 0, 32, 0, 73, 68, 65, 84, 78,226,110, 4,112,145,213,211,227,
+ 86,156, 71, 93,139,191,174, 71,192, 85,176, 63, 4,162,243,184,111,106,206, 59,143,251,166,222, 64, 62, 87,228,213, 33, 19,206,
+ 21,121,107,215,174,229,242,242,242,112,250,244,105,180,107,215,142,251,229,151, 95,160, 86,171,113,233,210,165,123, 44,218,119,
+223,125, 55,167, 71,143, 30,177, 91,183,110,109, 80,222, 23,107,215,114,237,243, 46, 32,244,116, 62,100,237,198,113,189,175, 48,
+ 50, 74,109,130,249, 82,245, 61,207,190,249,238,139, 57, 17,209,167, 99,139,254,152,210,160,245,124,173,164,228,237, 18,154, 89,
+ 85, 81,169,151,210,122,115, 96,254, 45,181,207,158,203,165, 85,198,200,190,232, 17, 26, 4, 0,216,115,246, 14,191,160,172,218,
+ 15, 64, 96, 25,109,232,113,211,104, 74, 40, 40, 45,125,187, 33,153,163,198, 39, 82,221, 70,126,208,155,209,254, 81, 28,209,125,
+180, 68, 32, 48,211,215,254,200, 82,150, 22, 95,186, 83, 94,252, 91,177, 90, 94, 10, 80, 20,145,107,104,255, 89,137,253, 29,213,
+ 27, 82,135, 84,234,115,171,215, 10, 4,180, 62,255, 87, 69,227,255,237, 96,111,245,215,245, 8,184,235, 85, 8, 10,202,110,178,
+ 28, 0, 24, 57,114, 36,119,248,240, 97,176, 63, 4,128,227, 56,124,252,241,199, 56,114,228,136, 77, 81,115,187, 12, 20, 10,133,
+145, 16, 50,226,212,169, 83,134,240,240,240,184, 38,122,117, 2, 0,203,108, 0,235,231, 12, 0,108, 80, 80,144, 51,134,154,106,
+247,238,221,165,251,247,239,255,106,243,230,205,228,232,209,163,100,244,232,209,156,141,252, 1,203,118,247, 34,145, 8, 69, 69,
+ 69,216,183,111, 31, 9, 12, 12,100,134, 13, 27,246, 43,203,214,111,180,119,142,234,114,123,200,144, 33,179, 46, 94,252, 51, 66,
+173,213,132,113,140,201, 4, 10, 70,198, 72, 85, 27,141, 70,165, 26,101,183, 88,163,225, 78,105,113,153,241,231, 61,123,215,180,
+ 10, 14, 41,162,105, 93,181,187,121,201,175,167, 97,216, 10,166,181,245, 56, 92, 71, 81, 56, 12, 96, 1,128,182, 0,202, 28,100,
+ 62,129, 37,118,224, 56,128, 27, 14, 20,142, 27,214,231,230,161,225, 56, 3, 91,250, 38, 3, 72,113, 32,239,107, 88,134, 24,190,
+114,144, 62,251,138, 40,133, 37,206, 97, 32, 0, 53,128,247, 0,156, 6,208, 17, 64,161, 19, 46, 68,123,121,207, 0,120,209, 74,
+178,122,107, 90,245,214,243,116, 88,226, 1,190,119, 66,222, 12, 0,175, 56, 89,193, 9, 44,177, 16,223, 56, 72,223, 42, 0,190,
+176,196, 58,236,182,166, 77,108,213,164,255, 0, 48,216,234, 17,248, 21,119,227, 53,234, 69, 92, 92, 92,172, 61,209,219, 43, 1,
+117, 99, 3,226,226,226, 98,179,178,178, 26,125,129,184,184,184, 88,106,202,221,113,123,246,135, 64, 80, 86, 37,160,238, 88,190,
+219,242,166, 40, 56,119,228,157, 61,123, 22, 17, 17, 17,184,124,249,114, 77,157, 25, 54,108, 24,151,155,155,139,241,227,199,223,
+235,166,242,242,146,137,197, 98,168,213,234,122,229, 73,207,158,133, 50,162, 13,250, 93, 62, 81, 35,239, 77,191,199, 98,162,114,
+ 85, 50,106,188,248, 30,197,169, 56,159,134, 72,108,178,212,204,134,149,128,133,104,215,238, 55, 0, 67, 56,112, 60,220,168,120,
+ 67,199, 48, 96, 12, 22,231,216,197,138, 10,220, 48,208,155,248,132,104, 64,136,169,160,180,116, 91, 99,249,215, 86,218,109, 33,
+128,212,252,163,243, 11,197, 97,147, 21,165,101,226,118,101, 37,167,196, 16, 4,117, 42, 44, 50,135, 87,149,221,132, 80, 40, 8,
+237, 25,230, 61, 77,169, 49,125, 11,224,166, 35,203,213, 58,247,223,225, 48, 64, 66, 66, 66,108,102,102,102,142,203,236, 94,103,
+ 8,224, 31, 16,168,219,100,175,128,139,223,231,154, 42,111,212,168,145,156, 76,150, 3,178,205, 18,143,125, 96,177, 47,198, 44,
+215, 96,228,200,145,112,113,218,223, 61,176,141,213, 63,252,240,195,186,102, 80,232, 20, 65, 65, 65,211,237,140, 83,163, 92, 46,
+223,227,228,119, 25, 0,229,187,118,237,146, 61,245,212, 83,209, 43, 86,172,232, 99, 54,155,137, 68, 34, 65, 92, 92, 28,126,249,
+229, 23,176, 44,139,113,227,198,113,243,231,207, 39,253,250,245, 51, 78,158, 60, 57, 50, 33, 33,225, 78,191,126,253,234, 87,192,
+230, 36, 51, 49,143,140,217,212,171,119, 31,255, 83, 39, 79,174,252,157,207,239,213, 33,178,195,151,126,193, 33, 37,130, 16, 49,
+119,120,223,161, 64,185,162,106, 68,120, 80,200,251, 93,186,116, 57,236, 19,230,189,254,147,101,159,211, 13,201,115, 85, 1,224,
+ 1,136, 6, 48, 12,192, 50, 0,175, 89, 43,131,119, 29,242,251, 6,150,113,246,127,193, 50, 36,144,215,136,135,225, 33,171,245,
+235,140, 59,254,184,213,187, 64, 53, 34, 47, 4, 64,164,149,152, 27,147,121,218,250, 92, 40, 44,227,249, 13,201, 19, 90, 45,231,
+ 36, 88,166, 17, 62, 3, 32,223, 42, 59,223,122,190, 25,150,113,242, 77,176, 12, 93,208, 14,228, 77, 1,240, 5,128,110, 86, 37,
+201, 62,157,183, 97, 9, 90,188,108,125,246, 7, 7,242, 94,135,101,118,131,206,137,252,243, 2,176, 31,192,119, 14,202,227,105,
+ 0,255,177,126,254,110,151, 62,129,181, 44, 51, 1,172, 1,176,220,122,255,118, 67, 63,152,149,149,149, 3, 0,197,197,197, 50,
+ 91,180,127, 93,171,191,184,184, 88,102,255,108, 99,176, 61,179,233, 87,186, 38, 58,191,174,149,190,233, 87, 26, 15, 66, 94,110,
+110, 46, 70,140, 24,129,203,151, 47,223, 37,113,169, 52,118,235,214,173,178, 14, 29, 58,196,178, 44, 43,139,140,140,228, 88,150,
+133, 94,175,199,207, 63,255,140,232,232,232,216,125,251,246,213, 43,175,107,110, 46,190, 15, 14,173,149, 87,221,231,142,129,118,
+229, 77,224,209, 80,112, 44, 48, 39,242, 43,174,154,245,129, 92,239, 7,121,126, 16,250,142,216, 29,123,105, 71,227,110,246,107,
+ 37, 37,219, 1,108,239, 24,209,182, 43,128, 55,140,102, 22,219,206, 23, 98, 68,152,101,184,147,112,156, 70,195, 48,203,202,203,
+203,239, 56, 65,166, 43, 57,142,243,206,191, 44,127, 86,121,122,107,171,242,219,114,148,223,209,128,207,175,242,174, 86,112, 80,
+170,205, 92,104,136, 48,128,207, 98,146,222,104,254,126,217,235, 15, 7,252,235,147,227, 74, 7, 68,147,227, 68,167, 77, 92,137,
+100,191, 7,163,173,158,151,236, 68, 87,191,105,243,134, 57,138,202,183,127,142, 56, 43,143, 36, 42,208, 68,121,247, 88,236,153,
+153,153, 24, 56,112, 96, 75,210, 69,184,156, 57, 23, 0, 27,249,159,103,176, 65,102,105, 99, 77, 37,127, 91,221,224,241,120, 33,
+124, 62,191,252,248,241,227, 95, 62,252,240,195,238,174,243, 0, 0, 17,114,185,124,157, 85,177,152, 34,151,203,127,176,125, 58,
+227, 84, 4, 80, 13,160,114,197,138, 21,125,231,205,155, 87,122,246,252,249, 54,122,189,158,200,100,135, 32, 18,139, 64, 17, 10,
+135, 14, 29, 34, 61,122,244,208, 37, 36, 36, 12,158, 60,121,178,195, 54,151,115,232, 0, 51,225,169, 9,107,250,246,237,223,129,
+102,140,143, 95,203,191,250, 34, 91, 88,240, 2, 0,136, 65,113,189, 59,117, 61, 21, 26, 26,146,195,227, 11,223,254,207,226,148,
+234, 79,150,125,236,118, 70,214,167, 0,188, 97,213,134,198, 3,184, 4,192,167,158,239,237,181, 90,236,241,176,204, 35, 79,106,
+196,253,223, 25,150,232,114,103, 20,128, 42,235,243,188, 70,228,197, 0,184,234,164,188,171,214,231,119, 52, 34,111, 22,128,153,
+ 0, 46, 0,152,111,125, 47,123,217, 50,171,245, 63,199,106, 13,111,180, 90,217, 13,201,155, 97,205,143,126, 86, 47, 66,125,233,
+ 84, 91,239,219, 60, 1, 27, 27,145,247,181,181, 83,240,114,178,243,250,218, 65,254,125,100,245,108, 28,176, 42, 53,168, 35,251,
+ 23, 0, 61,172,101,145,111, 85,164, 28,186,118, 87,175, 94,205, 1,144, 53,211, 66, 64,100,230, 26, 45, 55,115,141,182,158,133,
+123,220, 10,114,106, 22,121,127,254,249, 39,249,243,207, 63,107, 93,251,238,187,239,114, 0,144, 31,126,248, 1, 0, 72, 81, 81,
+237,152,186,134,200, 31, 0,218,255,249, 39, 1,106,203,123,249,131, 5, 22,114,252,208,154,166,186, 33,122, 59, 92,232,133,205,
+ 92, 33,248, 0,175, 26, 53,228,111,101,245, 59, 98,177,216,169, 69, 68, 56,142, 35,132,144, 37, 11, 19,123,122,133,181,139,156,
+192,194,171,115, 73,113, 25,207,100, 80,114,173, 67,125,136,143,183,128, 48, 38, 22, 10, 37,205, 16, 9,145,168, 52, 76,167, 70,
+ 12,130,134,234,108,221,255, 31,164,139,222,126, 56,162, 33, 98,225,224,222, 44,128,230,144, 87,175,197,222,161, 67, 7,156, 62,
+125,186, 69,144, 63,251, 67, 32, 14,156,103, 0, 0, 27,101, 52,190, 63, 78,219,188, 48,164,185,202,199,108, 54, 87, 1,192,128,
+ 1, 3,154,180, 32,144,141,252,173,168,180,126, 58,187,192,142,208,106,152,157, 1,128, 79, 63,253, 52,252,249,153,207, 47,122,
+104, 96,244, 12,141, 90,237,207,152, 25, 83, 88, 88,216,157,240,240,240,171,106,181,122,249,228,201,147,243,157, 77,215, 79, 63,
+254,196, 0,120,237,217,233, 47, 14, 31, 54,124,248,120,137, 68,210,138,128, 51, 91,102, 78,112, 85,122,173, 98,221,149,243,197,
+183,189, 69,194, 38, 45,124, 87, 87, 1, 48,195, 18,164,230,204, 56,252, 41,235, 97, 70,195,203,139,154, 97,137,168,119,118,190,
+166, 12, 64,182, 3,121,187, 96, 9, 90,115, 6,207, 58,145,190,207, 1,124,233,168,239, 7,240,170,221,119, 26,147,247,141,213,
+ 99,224, 8,133, 86,203,222,153,244,185, 50,223,245,115, 7,242, 30,117, 66,158,205,219,176,209,154, 55,206, 44, 31, 75,226,226,
+226, 98,234, 70,253, 91,221,234, 57,238, 52,244,184,184,184, 24,187,149,250, 90,154,188, 22,143,235,165,183,141, 84,187,118, 27,
+ 95, 89,153, 62,211,118,141, 22, 80,223, 25,116,236,254,178,226, 98,141, 83,153, 70, 8,247,159, 89, 67,200,123,159,255,182,240,
+231, 53,161, 59, 79,156,188, 61, 59,196,159,125,146, 10,242, 11,224, 56,128, 16,206,104,100,216, 50, 22,168,164,141,108, 64,233,
+109,189, 75,171,147, 89,221,252,178, 58,231, 45, 37, 11, 91,220, 74,128,127, 23, 60,182, 92,115,191,223,145, 5,208, 70, 44, 22,
+223, 30, 48, 96,192,163,103,206,156,105,178, 64,185, 92,126, 48, 40, 40,104,166, 92, 46,223,232,130, 2,192, 88, 61,167, 0,128,
+ 13, 27, 55,164,192, 50, 60,221, 44,248,246,187, 47,127,133,101, 40,246,190,160, 62, 5,192,224,142,214,215, 72, 33, 25, 61,242,
+254,177,242,106,193, 74,164,164,206, 53,183, 43,103, 75,151,247,119,128, 92,167,123, 1,240, 50, 1, 8, 97,193,149, 26, 12,244,
+230,178,178,138,115,214,142,203, 41,188,247,249,111,220,143, 31,141, 37,227, 95,219,159, 11, 32, 55, 97,112,215, 55,130,130, 68,
+139,248, 60,194,221,174, 50, 92,185, 77, 51,155, 36, 2, 74, 44,225,243,120, 38,134, 21,187,146,190,204,204,204, 28,219,242,182,
+214, 79,183,148,177,123,166,254,217,185,254,157,152, 22,216, 88,189, 39, 46, 92,255,171,229,221, 55,197,167, 41, 74, 24, 53, 69,
+ 1, 66, 8,158,156, 56,171,222, 62,100,215,143, 25,205,245,174,101, 0, 72,115,144,191,157, 18,176,209,133,199, 3,173,237, 72,
+251,119,237, 31,248,245, 84,196,230,140,152,241,200,251,103,203,243,160,165, 43, 0,114, 57, 39,151,203,103, 53, 85,206, 83,111,
+238,231, 0,224,217,145, 61,200,183, 71, 46,126,172,231,230,172,121,109,234,241, 30,180,150, 68, 5, 9,248,173, 64,136,206, 71,
+194,175,232,213,205, 47,127,219, 1,215,100, 91, 93,217, 77, 89,111,254,126,145,231,223,197, 3, 64, 90,146,215, 36, 35, 35,157,
+ 75, 78,158, 77,118,253,152,241, 79,111, 94,225, 86,131,217, 23,150, 61, 1,254,118, 32,238,238, 35,236,129, 7, 30,252, 13, 53,
+126, 30,224, 37, 34, 96, 89, 14, 32, 4,213,122, 79,243,247,192,131,255,217,254,192,147, 5, 30,120,240,191, 3,198, 12,168,117,
+ 78, 47, 59,239,129, 7, 30,252,131, 65,121,178,192, 3, 15, 60,240,192, 3, 15, 60, 10,128, 7, 30,120,224,129, 7, 30,120,224,
+ 81, 0, 60,240,192, 3, 15, 60,240,192,131,127, 34,106,197, 0,156, 61,123,214,237,104,212,250,130, 9,235,147, 55,254,145,232,
+152, 94,125, 58,201,218,180, 11,143,213,232,181,178,195,178,220,216,172, 67,231,114,220,149,215,123,240,152,152,126,125, 6,203,
+238,148,150,194, 91,226,141,155, 37, 5,177,121, 39,246,186, 45,175,185,223,119,238, 52, 42,102,200,224, 14, 50,137, 55, 15,124,
+ 30, 5, 34, 38,120,114,234, 69,226,174,188,228,255,151, 27,243,208,224,135,100,254, 62, 60,128, 15, 36, 12,174,127,142,211,131,
+122, 95,143,188, 22, 43,175,209,169,102, 45,253,125, 59, 12,120,154,243, 99, 11,238,107,250,126,127,183,200,237,142,180,255, 7,
+145,247, 92,251,184, 85,169,219,242,222,168,188,119,195, 85, 79,125,254, 75,228,241, 81,207, 20, 89, 87,228,197,198,198, 70, 25,
+ 12, 6, 69,110,110,174,242, 65,190,175,203, 10, 64, 67, 88, 29,131,206, 0, 58,192,178, 78, 64,193,252, 28,220,112,246, 7,198,
+ 12,239, 16, 67,192, 34, 36, 32, 8,185,135,207,200,222,153, 59, 3,195, 70, 15, 3,163,213,201,122,116, 27, 9,150,133,108,222,
+139, 15,199,246,239,223, 7,215,174, 21, 65,165,212, 98,237,198, 35, 57, 13,201, 27, 56,226,153, 24, 14, 4,145,157, 58,200,146,
+223, 92,142, 23,158,121, 12,223,252,247, 51, 0, 98,236, 61, 87, 2,138,130,108,245,146,197,200,207,191, 2,169, 52, 18, 34, 9,
+ 31,183, 74,242, 99,161,171, 63,201,139, 30,235,203, 9,133, 66, 72, 36, 18, 20, 20, 20,160,109,168, 31, 90,241,125,208, 54, 34,
+ 0,129, 18,127,120, 19, 51, 40,138, 2,199,154,161, 19,241,161,186,163,194,164,255,102, 57, 44,168,212,133,125, 56, 95,137, 10,
+126, 1, 66,248,120,243, 33,148, 80,224,243, 0, 74,200, 71,206,207,209,156,137,227, 33,110,194, 9,167, 11,188,247, 83,171, 99,
+194,195,195,209,174, 99, 59,153,222, 96, 4, 37,146, 0, 38, 96, 78,218,169, 24,189, 78,139,175,254, 21,147,243, 0, 21,201,150,
+ 54,143,249,127, 25,174,150,133,211,207, 39,188,179,200, 27,192, 67,173, 37, 94,255, 41, 45, 45,237, 38, 16,139,192,122,121,125,
+ 8, 96,125,230,135, 41,213, 45, 37, 3,162,122,140,138,185,113,241,112,125,123, 13,252, 35,234,104, 70, 70, 6,249,102,211,166,
+203, 34,161, 80,194,178,172,191,183,143,143,207,132, 39,159,244, 2, 64, 39, 39, 39,115, 45, 52,205, 20, 0, 36, 39, 39,179,205,
+ 32,206,207,223,223,127, 65,215,174, 93, 39,139, 68,162,118, 37, 37, 37, 37,165,165,165, 39,105,154,254, 0, 64,129, 27,242, 2,
+ 2, 3, 3,151, 63,242,200, 35,143,135,133,133, 73, 79,157, 58,117,231,194,133, 11,199, 13, 6,195, 82, 88, 86,136,117, 26,163,
+ 70,141, 74,141,136,136,120,219,219,219, 27,190,190,190,167, 15, 28, 56, 16,253,183,241, 0, 52, 64,254, 60,111, 17,255,161, 25,
+195, 59,174, 98, 57,206,112,244,202,157, 79, 87,199,168, 14,204,207,193, 69, 71,223,149,223, 62,200, 25,171,229, 48, 85, 43,193,
+ 55, 83,248,227,226, 21, 60,247,220,252,154,251, 20, 5,252,150,187, 17,173, 34,194,101,108,181, 26, 52, 75,112,232, 80,110,236,
+218,141, 71, 26,144, 24,201,157, 62,113, 17,196,203, 15,103, 46, 22,227,220,197,231,241,213,247,191,212,220,101, 89, 96,236,208,
+161, 64,117, 25, 0, 95, 20, 92,184, 4, 65,171, 0, 12, 27,210, 75,166,212, 53,162,179, 16, 10, 32, 20,250,245, 25,128,214,222,
+ 66,180,109, 37,134, 95,112, 16, 2, 69,190, 8, 20,243, 32,224,241, 96, 50,155,161,100, 88,156,170,116,188,220,230,210, 87,219,
+115, 18,158, 2,126, 94, 94, 8,105, 21, 12, 63, 63, 47,112,148, 25, 12, 91, 13, 51,204,240,241,241, 66,171,214,237, 80,112,185,
+ 11,215,177,219, 55,141,118, 74,253,227,215,112,254,190,222,240, 15, 8, 68, 72,171, 96,104,181, 90, 8, 69, 98, 8, 12,150,197,
+249,162,164,145, 50,185, 66,137, 71, 94,220, 24, 91, 92,114, 11,138,178, 34, 84,157,203,112,164, 12, 56,221, 73,140,158, 57, 58,
+ 54,123, 99,118,142, 19,178,238,171, 18, 80, 88, 88,200, 1,128, 84, 42, 37, 45, 69, 94,120,120,248,115, 52, 77,111, 4,128,201,
+177,177, 84,198,214,173,238,116,190,150, 53, 82,237, 28, 57, 28,199,129, 16, 82,243,105,187,102,123,206,193, 78,106,174,172, 39,
+239, 10,249,247,240, 54, 49,219,125, 3,252,187, 1,128, 80, 34, 6,173, 55,128,213,234, 82,143, 31, 57,188, 36,225,157, 69,221,
+ 51, 63, 76, 41,118, 36,231,211,119,231,114, 86, 11,139,129,101, 8,146,181,246, 67,245,246, 69,125, 71, 61,142, 81,143, 61,225,
+ 82, 25,221,184,120, 88,214,169, 87, 76,236,181, 63,114, 92, 87,138, 19,228, 46, 61,158,152,152,136,173, 9,217,141, 62, 19,155,
+ 93,123, 43,146, 30, 1,150, 87, 45, 55,176,208, 51,150,114,213, 90, 63, 51, 6, 7,160,139,175,160, 81,121,171, 86,173,202,121,
+247,245,183, 66, 39, 78,158,228, 99, 48,232,177,250,227,143,168,181,107,215, 26,230,206,157, 27, 14,224, 86,115,183,189, 73,147,
+ 38,141,222,185,115,103,150,171, 74,212,204,153, 51,185,194,194, 66, 84, 85, 85, 97,197,138, 21,240,245,245, 69, 76, 76, 12,164,
+ 82, 41, 54,110,220,232,110,187, 27, 57, 96,192,128, 77,111,190,249,230,181,174, 93,187,110,236,223,191,255,165, 59,119,238,180,
+203,205,205, 29,240,194, 11, 47,236, 81,171,213,169,176,108, 0,231, 44, 98, 39, 79,158,156,153,146,146, 18,108, 50,153, 32,145,
+ 72,224,237,237,221, 70,171,213, 62, 61,113,226,196, 9,231,207,159,159, 11,224,191,206, 10,139,136,136,104,187,104,209, 34,228,
+229,229,113, 26,141, 38,160,206,109, 30,156, 91, 85,181, 89,112,246,236,217,186, 94, 2,231, 20,128,213, 49,104, 15,203, 14,120,
+ 60, 0,102,173,145,185,153,123,181,252,147,161,157, 67,231, 63,210,163,205,146,214,254,146,182,171, 81,182, 5,192,149,249, 57,
+ 13,111, 82, 99,172,150,163,117,167, 71,177,252,237,201,216,104,199, 73,135,143,167, 67,171, 51, 98,220,232,249,120,120,216, 76,
+ 60,147,248, 8, 36, 18, 17,104, 51, 3,141,142,150, 53, 92,201,138, 0, 26,152, 60,125, 61, 94,126,115,118,205,213,177, 15,199,
+ 64, 44, 22,225,199, 67,191, 96,239,177, 92,108,218,240, 25, 12,122, 35,132, 60, 62,124,188,132,208, 86,149,196, 42, 75, 80,239,
+238, 99, 28,199, 1, 28,107, 57, 40, 22, 28,199,193, 72,139, 44,221,147, 8,224,104, 51,204, 60,192, 12, 51,204, 52, 11,198,220,
+184, 2,187,240, 69, 41, 23,232,199,192,207,215, 27,225,237,162,208,173,119, 39,248,250, 72,160,170,174, 64, 89, 69, 25, 20,170,
+ 59, 48, 25, 8,188,188,188, 16, 18, 50, 12,149,229, 33, 92,171,208,143,234,119,227,143, 92,204, 49,122, 29,244,124, 64, 40, 22,
+ 66,175, 19,130,214, 9, 97, 16,139,192, 39, 12, 56,240, 96,208, 87, 67,175,211,160, 93,187,182, 50, 33,143, 15, 57,212, 8,165,
+167,163,238, 26,243,117,177,114,211, 74,135, 21,232,237,164,183, 27,239, 43, 19, 18,106,237,239,158,144,144, 48, 48, 40, 40, 40,
+159, 16, 98,224, 56,142, 31, 24, 24,232, 85, 80, 80, 16,108, 93,221,173,173,187, 21,121,238,220,185, 83,237,126, 35,198,221,213,
+226,234,101, 75, 66,184, 57,115,230,196,174, 93,187,214, 37,153,225,225,225,201,131, 6, 13,250, 96,120,191,126, 48,137, 68, 72,
+ 75, 75, 99,103, 79,153, 18,151,254,195, 15,217, 46,254, 62, 86, 45, 89, 82,115,190,224,253,247,145,182,116,105,163,231,206,136,
+173, 67,238,156,117,179, 24,110,244,232, 14, 61, 1, 92, 79, 73,201,212,187, 72,254,185,189,123,246,244,179,181, 25,111,177, 4,
+183, 43,202,161, 86, 40, 49, 96,208, 96,175,159,191,218,144,157,240,206,162,158,153, 31,166, 56, 90,155,157,153,247,193, 90,254,
+179, 79, 79,224,119,150, 74, 89,171, 18,128,247,211,214,212, 86,162, 23,188, 6, 0,120,247,245,185,110,109, 39,237, 22,249,219,
+144, 25,228,194,195,163, 93, 18,237,205, 39, 56,183,244, 69, 16,191, 86, 48, 95, 63, 7,227,245, 63,145, 47,215, 34,122, 95,185,
+ 83,223,239, 63, 96,192,209, 89,211,146, 34,147, 94,122, 33, 32,243,187,239, 89,169, 84, 74, 45, 79, 73,133,239,146,229,248,241,
+199, 31, 75, 51, 50, 50,168,230,242, 2, 76,154, 52, 41,110,231,206,157, 7,118,238,220,105, 59, 31, 99,251,223,129,130, 18,115,
+224,192, 1, 89, 81, 81, 17, 58,118,236,136, 17, 35, 70,192,223,223, 31, 74,165, 18,183,110,221,194,141, 27, 55, 48,102,204, 24,
+110,204,152, 49,177,111,189,245,150, 43,229, 52,233,145, 71, 30, 89,189,106,213,170, 45,253,251,247, 95, 77, 8,185,101,215,143,
+147,248,248,120, 31, 0,185,214,195, 41,121,115,231,206,221, 54,103,206, 28,234,244,233,211, 32,132, 32, 56, 56,184,230,216,183,
+111,159,112,200,144, 33,159,221,188,121,243,132, 35, 65,147, 39, 79, 38, 59,118,236,224,138,138,138, 34,242,243,243,113,253,250,
+117,162, 82,169, 58, 2,224, 79,156, 56,209,188,107,215, 46,238, 65,146,191,237, 90, 93, 37,128, 95, 15,249, 7, 71, 71, 5, 39,
+245,139, 12,154, 78, 8, 17,112, 28,103, 98, 45, 7,109, 54, 25,244, 66,138,109,219,187,181,248,237, 86,126, 29, 59,237, 60,117,
+227,251,213, 49,236,209,249, 57, 13,239, 22, 7, 8,209,163,123, 87, 80, 84, 14,242,149, 85, 0, 46, 65, 85,122, 21, 2,177, 8,
+187,246,124, 10, 93,165, 25,211,159,127, 3, 44, 11, 60, 57, 97, 40,204,124, 31,135, 47,151,159,127, 9, 44, 11,140,235, 75,172,
+188, 18, 9,131,145, 70,252,216, 49, 16, 7, 80,216,180,121, 63, 40, 10,216,246,253, 70,148, 94,255, 51,118,223,150, 85, 57, 13,
+109,151,200,114, 0,203,178, 96, 89, 22,102,179, 25, 70, 1, 7, 19, 49,129,166,105,232,188, 12, 0, 43, 6,197,153, 97, 22,114,
+168,166, 13,208,170, 85,141,166, 45,196,199, 8, 62, 95,130,224,224, 96,116,234,212, 9, 97,173, 7, 3, 60, 10,102,243,105, 80,
+156, 18, 6, 45, 3, 51,171, 69,217, 45, 57, 66,130, 43, 17, 28, 48, 12, 31,174,250, 57,230,251,111,239,149, 37, 49, 48,224,140,
+149,128, 65, 4,154, 50, 65, 43,228,163, 90, 34, 0, 95, 32, 4, 88,111, 16, 30, 65,181, 86, 7, 69, 89, 17, 10, 78, 31,131,188,
+184, 24, 44,203,130,226,120,110, 85,154,175,214,223, 85,156, 95,120,229, 5,199,253,100,237,213,199, 12,153,153,153,139,222,124,
+243,205,217,197,197,197, 20, 33, 36, 36, 35, 35,227,123, 88, 54,119,242,114,183, 34,207, 74, 72, 16,172, 91,183,110,243,157, 59,
+119,176,109,219, 54, 68,119,237,202,107,142, 6, 34,149, 74, 73, 98, 98, 98, 12,199,113,178,181,107,215,186,188, 97, 17, 77,211,
+233,195,173,117, 74, 40, 20,162, 75,151, 46,216,126,232, 80, 86, 72, 72, 8, 42, 42, 42,156,150,115, 31,183,170, 37, 3, 7, 14,
+228,108, 27,196,216,125,254, 57,106,212,168,210, 69,139, 18,252, 83, 82, 28,175, 30,151,240,206, 34,111,111, 19,179,189,119,207,
+158,126, 60,138,194,171,207, 78,135,222, 96, 68,218,151, 95,194, 75, 34,129,193, 96,128, 65,175, 71,223,254,253, 58,255,242,221,
+119,115,208,240, 86,222, 53,125,206,210, 5,175,177, 0,168,171,133,133, 84, 93,194,175,219, 60,221,121,241,246,221, 70,198,222,
+188,124,132,139,123,242,197,216,172,221, 95,186,165, 8,216,239,218,199,109, 13,116,120,221, 17,122, 4,240, 81, 84,109,198,225,
+184, 16, 8,230,103, 64, 61, 61, 10,252,192, 80,151,200, 63, 49, 49,177,204,164,213,221,122,233,213,217,237,223,121, 99, 33,214,
+110, 72,191, 56,104,192,128, 14,233,107,210,189, 94, 95,248, 22,190, 27, 58, 24,155, 55,111,158, 1,203,174,165, 77, 33,254,152,
+157, 59,119,202,108,100,159,145,145, 81, 0,203, 54,237, 7,157, 81, 0, 14, 28, 56, 32, 11, 9, 9, 65,255,254,253, 25,138,162,
+248, 22,239, 44, 11,129, 64,128,160,160, 32,180,110,221, 26, 55,110,220,192,129, 3, 7,100, 46,180,185,132,241,227,199,127,180,
+106,213,170, 53, 93,187,118, 93, 79, 8, 97, 1,124, 6,224, 49, 0, 71, 8, 33, 75, 97,217, 95,229, 45, 0, 75,157,145,183,106,
+238,220, 31,134, 39, 36,144,221,187,119,131,207,231, 67, 38,147,225,220,185,115,232,212,169, 19,150, 45, 91,134, 94,189,122, 97,
+246,236,217,252,247,222,123,111,149, 35, 97, 59,118,236,224, 0,192,203,203,235,118, 64, 64, 0,196, 98, 49,132, 66, 97, 53, 0,
+198,129,199,238,190,145,255,172, 69, 31,214, 92,251, 60,229,157,122,149,128,250,102, 1, 80,124, 30,197,103, 88, 78,163, 55, 49,
+183, 8, 33, 34, 31, 17,175,143,159, 16,209,146,158,163, 58, 34,246,101,160,219, 8,180,241,230, 38,205, 24, 22,245, 78,144,159,
+ 87,220,234, 24,248, 55,156, 28, 22, 60,158,173,207,246, 3,208, 14,254,225,227,161, 55, 27,176, 62, 99, 3,190,217,188, 13, 99,
+ 98,135, 1, 0,116, 58,128,199,111, 88,148,196,171, 43, 0,192,108,182, 87,164,202, 0,228,130,226,137,144,244,220,139,136, 79,
+ 76,196,207,123, 44, 68,230,229, 13,104,171,111, 55,154, 89, 38,240,106,200,223,196,152, 97, 84,155,160, 83,234,160, 52,209,144,
+235,104, 40,140, 26, 40, 53,213, 80,148,107, 32, 87, 26, 32,175,110,120, 9,245, 87,159,233,192, 17, 66,192,227, 17, 16, 74, 4,
+179,153, 3,163, 43,134, 86,121, 21,165,101, 42,200, 21,213, 80,105,204,144, 43, 12, 40, 41, 41,195,197,203,103,161, 84,157,197,
+224, 1, 3, 27,220, 27,157, 7,128,210, 24,160,191,118, 11, 85,127, 92, 66, 85,113, 17,212, 42, 57,212, 42, 57,138, 46,158,198,
+241,204,175,144,187,117, 19, 42,174, 93,131,153,102, 45,173,137,247,151, 13, 3, 18,235, 65,199,199,199,119, 95,190,124,249,155,
+109,218,180,209,110,219,182,173, 79,102,102,230, 79, 0,250, 91, 11,221,237, 5,167,132, 97, 97, 11, 0, 96, 72,175, 94,152, 51,
+103, 78,249,169,203,151,179, 31,234,214, 45,166, 57, 18,191,117,235,214, 28, 0,100,238, 92,139,149, 57,119,238, 92,151,228,154,
+ 68, 34, 0,192,246,237,219, 17, 26, 26,138,119,230,206,197,130, 5, 11, 16, 18, 18,210, 34,198, 97,109,164,159,145,145, 81,115,
+ 0,192,225,195,135,195, 1, 76,112, 82,204, 67, 1,129,129,221,120, 20,133,231,227,227,161, 84,169, 81,114,251, 22, 4, 2, 62,
+248,124,203, 33, 16, 8, 32,146,120,161,163, 84,250,113,255,209,163,157,178,216,175, 22, 22,226,219,237, 63,213, 28, 54,188,159,
+182, 6,239,167,173,193, 94,217, 97,151,223,119,116,194,123, 49, 0,112,243,242,145,156,209, 22,242,151,161,133,172,118,116,254,
+235, 79, 80,254,242, 0,140,202,170, 64,143, 0, 62,120,126, 65, 96, 20,229,136,222, 87, 14,111,190,133, 31,120, 14,230,100,221,
+184,118,173,234,243,140,255,118,253,250,191, 95,227,211, 47, 63, 43,250,108,213, 71,239,191,249,218,188, 9,203, 63, 88, 14,137,
+175, 55, 70, 12, 25,134, 83, 39, 79,125,253,108,210,179,110,191,179,141,252,109,231,187,119,239,198, 67, 15, 61,212, 17,192,116,
+103,221,254, 38,147, 9, 3, 6, 12, 96,205,102, 51, 95,165, 82,193,104, 52,194,104, 52,226,242,229,203,144,201,100, 56,118,236,
+ 24,218,180,105, 3,147,201,132,153, 51,103, 58,147,214,169,137,137,137,159, 76,158, 60,217,111,253,250,245,126,132, 16, 33,128,
+195, 0, 84, 0, 6, 0,248,201, 78,241, 60, 8,160,151, 35,121, 59,223,124,243,135, 9,125,251,146,239,226,227, 81,250,251,239,
+248,232,163,143,216,159,127,254,249,255,221,188,121, 51, 84, 38,147,189,188,104,209, 34,152, 76, 38, 12, 27, 54, 12,222,222,222,
+ 67,157,205,191,128,128,128,202,214,173, 91,195,199,199,135,243,246,246,190,105,205,195, 7, 94, 7,237,149,129, 70, 61, 0,243,
+115, 80,177, 26, 21,233,191, 93,171,200,138,142, 10,142, 29, 40, 13,178,172, 35, 62,126, 25,126,243, 25,131,131,127,148, 99,104,
+207, 64, 60, 34,253, 25,190,191,124,208,127,108, 63,233,244,205, 71, 46,254, 81,159,240, 54,157, 19, 8,199,149,112, 19,159,155,
+143, 5,175,125, 6, 64, 14,203,178,201, 70, 68,118, 29, 0,177,136, 15,189,214, 8,208, 22, 5,193,215,215, 23,229,242, 6,247,
+203,134, 94,119,133, 0,224, 46,254,246, 37, 40,106,109, 45, 35,129,213,255, 9,131,209, 4,137,143, 24, 16, 90, 20, 4,141, 90,
+141,161, 67,135,226,200, 79,223, 53,108,142,176, 52, 88,150, 15,134, 97, 96, 52, 26, 81,205,231,129, 79, 83,192,109, 53, 24, 47,
+ 6,102, 33, 11, 78,192,131,142,199, 7,163,213, 65,105,108, 56,214,201,215, 71, 11,134, 33, 48,210,102, 40, 85,106,228, 95, 43,
+ 70,201,237, 74,232,105, 19,212,213,114, 84,107,148, 48,152,105, 16, 62,129, 86,167,130, 90,119, 3, 69,165, 42, 84,105, 26,222,
+ 75,194,108,167,165, 49, 42, 45, 74,206, 94,194,157, 75, 55,160,214, 92,131, 70,169, 4, 7, 62, 4, 60, 2,142, 8, 64, 81, 22,
+175,175, 43,234,230,219, 73,111, 59, 53, 28,224, 0,119, 0,220, 89,188,120,177, 30, 0, 22, 45, 90,116, 42, 37, 37,197,219,154,
+116, 3,128, 98,119, 5,175, 91,183,110, 69,124,124, 60, 0, 32, 42, 36, 36,212, 58, 38,206,107,206,198, 97,115,255, 91, 61, 1,
+ 14,179, 47, 60, 60,124, 52, 77,211, 72, 75, 75,195,211, 79, 63,141,201, 99,198,220,237,232,207,159,183,120,130, 66, 66, 56,103,
+227, 2, 22,188,255,126,205,152, 63, 0,188,181,100, 73, 45,207,128,147,110,255, 90,176, 89,255, 54,210,183, 33, 35, 35, 3,201,
+201,201,200,206,190,254, 45,128,239, 28,118,104,124,254,127, 12,180, 17, 60, 30, 15,151,175, 23,128,227, 56, 92,204,191, 10,154,
+ 54,129, 2, 1,159,207, 7, 33, 4,172,217, 12,189, 86,135,171,191,253,118,200,137, 60,164,236, 73,255,217,167, 39,216, 91,252,
+ 20, 0,156, 56,115, 30,157,163, 34, 93,154,166,156,157,249,159, 26,107, 63,219, 98,249,219,134, 66,184,199, 39,189, 24,187,111,
+167,123,222,128,102,129,252, 54,132, 17, 93, 80, 62, 71, 12,209, 35, 83, 97,206,219, 15,179,218, 18,111, 80, 62,231, 97, 68,102,
+228,194,204, 54, 94, 85,186,118,238,218,214,203,203,219,235,211, 47,214, 25, 98, 71,141, 18, 14, 30, 58,228,187, 3,123,127,121,
+252,242,181,124,128,229, 32, 22,137, 48,108,224, 48,236,217,189, 7, 99,199,142,229,246,239,223,239,116, 87, 80,215,234, 63,112,
+224, 0,174, 95,191, 78, 3, 16,158, 60,121,146,158, 61,123,246,180,140,140,140,103, 29,201, 41, 44, 44, 68,199,142, 29, 1,128,
+ 42, 44, 44,196,185,115,231, 16, 25, 25,137,168,168, 40, 40, 20, 10,228,229,229,161, 67,135, 14, 8, 13, 13, 69,100,100, 36, 10,
+ 11, 11, 27,175, 40, 20,149,148,152,152,248,193,200,145, 35,125, 78,157, 58,229,199, 48,204, 75, 18,137,100,162, 94,175, 95, 5,
+203,214,231,176, 42, 0,107, 96,217,157,143, 70, 35,211,219, 5, 2, 65, 82,230,188,121, 27, 31, 14, 9, 33, 21, 11, 23, 98, 40,
+203, 98,205,238,221, 92,169, 78,247, 34,238,110,203,190,241,226,197,139,235, 25,134,225,251,248,248, 32, 60, 60,220,199,100, 50,
+ 65, 32, 16, 56,122,125,175,210,210,210,174, 55,111,222,132, 86,171, 37, 10,133,162, 59,159,207,143, 99, 24,166,197,238, 56, 86,
+223, 16, 64, 24,128,142,147,162, 35, 94,109, 31,236, 61, 29, 38, 61,208, 53, 14,103, 66, 38,225,145,185, 95, 65, 95,169, 4,207,
+207, 23,178,213, 73, 24,209,227, 55, 4,157,207, 26, 9, 32,162,161, 31,232,228,215, 14,127,156,223, 97,231,112,208, 2, 48, 89,
+ 14,147, 17,124,150, 7,202, 74,226, 59,127,116,188,139,200,254, 11, 28,198,246,239, 85,199, 8,229, 3, 16, 0, 2, 49, 24, 98,
+134,213, 14,198,148,233,243, 0, 64,150,242,238,220, 6, 27,130,153,229,192,176, 20, 40,134, 1, 69, 27,161,163, 44,117, 71,207,
+227,193,155,209, 67,173,231, 64, 4, 4,102,179, 25, 58, 51, 80,174,109,120,183, 83,134,102, 97, 16,240,192,234, 24, 48,172, 10,
+154,106, 19,120, 68, 0, 35, 99, 2,205,209, 96, 76, 52, 32,100, 65, 17,128,136, 88,168,244,102,148, 85,232,160, 53, 50,245, 26,
+201, 20, 49,215, 12, 26, 17,114,119, 72,215,100,208, 67, 37,151,131, 34, 60,240,249, 28,192,241,193, 35,238,155, 58, 87,138,174,
+208, 93, 35,187, 10,157,113,251, 55,164,155,193,110, 15,237,148,148,148, 9, 0,110, 46, 90,180,168,191,191,191,127,128, 74,165,
+ 42, 74, 73,113,125,135,204,185,115,231,190,176,110,221, 58,180,110,221,218,254,154,114,205,154, 53,217, 15,117,235, 54,250,212,
+229,203, 7,155,171, 33,204,157, 59, 55,214,110, 40,160, 49,242,143, 25, 52,104, 80,248,240,126,253, 64,124,125,145,146,146,130,
+133, 11, 23, 66, 32, 16,192,164, 80,192,223,223, 31,239,204,157, 91, 19, 23,144,156,152,232, 80, 9,168, 59,198,239, 40, 38,160,
+177, 17,133,186,214,191, 3,239,128,195, 42,163,144,203,187,249,248,250,162, 82,161,128,236,196, 9,240, 41, 30,140, 38, 19,116,
+122, 61, 88,150,173, 81, 92, 24, 19, 13,218,104,116,102, 72,131, 5, 64, 89,135, 1, 88,187,138,111,176, 94,199,251,105,107,132,
+ 0,208, 89, 42, 45,191, 81,191,109,225,146,151,170, 93,199,232,152,125, 59,191,116,197,221,220,112, 6,187,224,246,175,229,150,
+221,250, 95,244,123,238, 13,136,162,250, 88,250,138,202,219,200,151, 91, 20,127,209,208,241, 40, 54, 51,240, 90,219,248, 80,179,
+ 90,173, 14, 16, 73,196,232, 20, 21, 37,190, 81,114,179, 77, 85, 69, 21,166, 60, 59, 93,182,247, 96, 22, 86,127,152,182,109,231,
+222,221,241,157,163, 58, 35,233,233, 25,200, 61,115, 12, 99,199,140,225,246, 31, 56,224,240,157,237,173,254, 3, 7, 14, 32, 46,
+ 46,206,166, 44, 10,111,221,186,133,217,179,103, 11, 1,192,153,216,130,170,170, 42,140, 24, 49, 2,102,179, 25,133,133,133, 56,
+118,236, 24,122,244,232, 1,127,127,127,180,111,223, 30,253,250,245, 3, 69, 81,160, 40, 10,109,218,180,113, 84, 79,123,244,234,
+213,235,147,161, 67,135,242,206,159, 63,239,103, 54,155,203,182,111,223,174,214,235,245, 41, 0,236, 7, 77, 95,125,252,241,199,
+139,247,238,221, 27, 69, 8,185,141,134,119,180,237,159, 60,124,248,198,193,124, 62,169,248,224, 3,112, 38, 19,100, 60, 30,155,
+171,211,205,132,101, 27,119, 27, 94, 89,188,120, 49,159,162, 40,200,229,114, 92,191,126,189,188, 87,175, 94,161,206,148,115,120,
+120,120,144,153,227,160,215,233,112,241,226, 69, 48, 12,211,162,103,158,240,235,144,127,231, 48,127,201,240,199,251,134,207,246,
+147, 8, 6, 49,102, 86,193,231,204,126, 8,104,195,187,173, 52, 64, 95,169, 2,132,124,152,149, 26,148, 40,104, 32, 56, 2, 20,
+ 75,139, 27,115,241, 94, 83,171,209, 37,192, 15,140, 17,184,150,243, 45, 58,197, 60, 86, 99,192,153,104, 19, 4,160, 80,109,176,
+236, 80, 59, 54,102, 0, 36,193,225, 88,181,241,167, 6, 19, 60,182, 55,193,222,115, 28, 4, 98, 64, 24,241, 24,232,226,163, 53,
+ 94, 0,129, 80, 4, 19, 12,240,145, 88,118, 36,221,189,119, 11,254, 56,153,211,168, 75,146,101, 89, 8,105, 61, 76, 16,130,162,
+ 24,192, 96,233,216, 76, 38, 19,140, 6, 1,120,124, 1, 96, 0, 56,214, 50, 68, 16, 41,141, 2,114,235,159, 81,160, 51,176,224,
+241, 8, 76,140, 9, 6, 35, 11,181,198, 82, 15, 77, 44, 7,218,200, 2,124,128, 39,224,129, 47, 6,136,222, 12,150, 48, 96,161,
+135, 70, 15, 88,118,150,108, 28,102, 0, 20, 11,112, 4,160, 40, 22,132,240,192,114, 4, 20,101, 53,156, 88, 10, 44, 69,129,176,
+206, 25,200,118, 65,126,194, 38,214, 35,111, 0, 33,139, 22, 45, 42, 79, 73, 73,137, 5,240,212,162, 69,139,198,164,164,164,104,
+ 1, 84,185,229,178, 74, 72, 16,174, 91,183,238,203,248,248,120, 72, 91,181,170,185, 46,109,213, 42,192,234, 5, 8,121, 16, 13,
+134,166,105,153,109,236,159,211,104,240,175,127,253, 11,198,170, 42,216, 34,223, 58, 89,149, 21,129,209,136, 9, 19, 38,148,151,
+150,151, 79,115,198,210,110,198, 33,153, 90, 30,128, 70, 60, 4, 56,125,250, 52,169, 79,121,168,165,212, 26,105, 40,105, 57, 12,
+ 6, 3, 2,252,253, 33, 22,138, 96, 50, 51,224, 56, 14,102,179, 25, 52, 77,195,100, 50,129,101,204,206,198, 51,176, 87, 11, 11,
+169,206, 82,169,205, 34, 96,175, 22, 22, 82,223,110,255, 73,108,239, 17,232, 44,149, 42,155,203,125, 95, 82,144,215,108,150,191,
+187, 49, 0,163,178, 42, 80, 46,221, 6, 97, 68, 23,144,168, 62,136,220,240, 59, 42, 13, 44,188,249, 4,244,175, 63,226,202,245,
+ 27,112,180,107,177,158,161,113, 58,247, 36, 62, 89,245, 49, 30,142, 25,142,197,255,111, 9,126,217,247, 11,190,219,244, 13,134,
+142, 28, 30,223, 94, 26, 1,190,151, 0, 7,143, 30,196,230,175,191,193,142, 31,183, 67, 40, 22,115,187,119,239,110,116,125,136,
+157, 59,119,214, 34,126, 27,148, 74,215, 55,184,211,104, 52,240,247,247, 63, 1, 96,176, 84,103, 60,227,177, 0, 0, 32, 0, 73,
+ 68, 65, 84, 42,197,192,129, 3,193,227, 89,134, 89, 35, 35, 35, 33, 18,137,160, 82,169, 32,149, 74,225,235,235, 91,164,209,104,
+ 34, 27, 17,119,241,252,249,243, 43,118,236,216, 49,174,115,231,206,221,182,111,223, 94,173, 80, 40,150, 2,216,108,175,191,140,
+ 26, 53,234,205, 13, 27, 54,108, 5, 80, 14, 32, 1,192,111, 0,250,214, 35,239,247,181, 50,217,138,128,188,188,119,159, 97, 24,
+124, 12,176, 95, 86, 87,207,168, 35,239,169,121,243,230,125, 60,107,214, 44,220,184,113, 3,123,246,236, 1,195, 48,135, 0, 60,
+227,196,235, 83, 1, 60, 94,149, 15, 77, 67,251,251,239, 92, 8,203,106,174, 1,154,191,186,143,234,215,175, 31,206,158, 61, 91,
+ 51,238,223,104,130,235,156,119,152, 20, 29,177,220, 79, 34, 24, 84,161, 54,252,114,252,106, 69, 10,120, 34,224,202, 81, 60, 42,
+229,240,127,175, 77,192,192,158, 82,204, 75,126, 28, 79,118,164,129, 11, 7,192, 9, 36, 12, 26, 13,214, 81, 34, 95, 89, 12,190,
+ 8, 24,251,228, 27,216,252,233,135, 22, 99, 81,103,132, 89, 15,252, 40, 59,139,236, 83,150, 25,133,237, 34,162, 64,241, 29,147,
+215,184,190, 4, 38, 3,176,123,207,126, 68,143,121,205, 98,253, 67, 0,158, 4, 72, 28,159,128,113, 35, 39, 90, 26,126, 81, 1,
+ 24, 3,221,184, 70,207,113, 96,136,133,224,141,180, 37,248,207,104,208, 67,167,211,161,186,186, 26, 26,181, 10, 26,141, 6,106,
+ 77, 53, 12,213,213,208,235,245, 13, 87,254,106, 2,189,193, 12,189,193, 12,173,206, 4, 77,181, 17, 10,141, 17, 74, 53, 13,149,
+198, 4,165,210,242, 41,175, 98, 32, 87, 48,144,171, 24, 84,202,105,220,169,108, 56,141, 20,199,193, 12,128,152, 9, 8,197,130,
+ 35, 28,192,113,224, 56, 30,204,236,221,226, 99,173,189,135,171,190,241,238, 67,187,227,216,222, 99,248,229,208, 47, 53, 74,193,
+149,162, 43,174,214,185,112, 0, 29, 83, 83, 83,207, 1, 88,251,206, 59,239,188,222,161, 67, 7, 38, 35, 35,131,164,165,165,185,
+172, 1,207, 74, 72, 32,194,176,176,157, 0, 16, 22, 22,118,207,253, 57,115,230, 48,121, 87,174,108,105,174, 88, 0,155,251,223,
+217,125,227,109, 99,255, 0,240,195, 15, 63,224, 90, 89, 25, 0,224,231,156,156, 90,247,174, 92,185, 18, 26, 18, 18,162,120, 16,
+138,202,232,209, 29,108,243,174,107, 93,183,157,219,238, 59,244,105,250,249, 94,102,205,102,168,229, 10, 84, 86, 86,162, 74,169,
+128, 86,167,131, 86,167,131,166,186, 26, 90,149, 26, 26,165, 18, 6,189, 14,180,193, 0,150,113, 24,232, 76,117,150, 74,109,125,
+ 6, 11,128,182, 31, 14, 0,128,111,183,255,132,247,211,214, 4, 0, 8,115,185, 34,118,140,142,169,171, 56, 68,245, 24, 21,131,
+ 7,140,219, 83,164,136,220,240, 59, 72, 84, 31, 24, 15,111, 67,209,243,253,225,205, 39, 56, 26, 23, 2, 70, 85,129,232,253,229,
+224, 59,168,126, 89, 89, 89,228,229,249,175,224,218,149, 43,200,205, 57, 10,127, 95,127, 76,157, 50, 21, 1,193, 65, 56,115, 50,
+ 15, 62, 66, 49,188,189,189,209, 70,218, 22, 91,190,223,130,119,222,123, 23,213, 74,247,119,169, 29, 48, 96,128,203,223,241,245,
+245,133, 74,165, 26, 76, 81, 20,221,190,125,123, 12, 26, 52, 8, 61,123,246, 68,171, 86,173, 32, 22,139, 33,149, 74,209,183,111,
+ 95, 4, 4, 4, 64,163,209, 68,250,250,250, 58, 18,185,242,240,225,195, 89,155, 54,109, 18, 40, 20,138,197,117,200, 58, 97,196,
+136, 17,159,108,216,176,225,171,176,176,176, 15, 8, 33, 62, 0,222, 1,208,152,155,236,189,229, 26,205,202, 23, 25,198,252,165,
+ 94, 63,173,142,188,248,103,146,255,189,227,181,215, 23,240,174, 92,185,130, 19, 39, 78, 96,195,134, 13,213, 0,254,207,201,215,
+167,188,140, 70, 49,119,233, 18,218,103,103,147,240,210, 82, 30, 30, 80, 12, 74,221,160,247,134,130,224,235,118, 2, 34, 30, 69,
+124,139,171,180,223,109,201,189,241,127,103,139,228, 39,245,102,114, 13,149, 55, 32,222,241, 42, 62, 24,166, 65,222,210, 65, 88,
+ 29, 91, 13,239, 31,231, 0,242, 18, 84,115,226, 11, 86,205,171, 1,220,141,234, 63,119,254, 39,252,251,223,155,208,201,175, 55,
+254, 60,126, 14, 7,100,151, 16, 59,180, 39,226, 70, 88, 42, 26,199,227,131,118, 97,162,196,216,254,221,176,124,229,135,216,127,
+ 65, 13, 31,105, 15,140, 31, 63, 1,191, 28,218,137, 61,191,108,177,188,156,217, 4,145,160,241,126,142, 99,205, 48,179, 22,107,
+ 6, 86,107,134,166,105, 24, 12, 6,232,245,122,104,117,122,232,117, 90,232,117, 90,232,140, 6,208, 70, 67,195,238, 47,189, 47,
+ 84,213,102,168,245, 44,212,122,214,242,191,134, 69,181,150, 65,181,142,129, 66,110, 70,149,220,132, 42,133, 9, 85, 85, 38, 84,
+ 86,210,184, 83,105,106, 84, 1,184,235,254,191,215, 84,227,243, 56,240, 8, 1, 87, 39,234,159, 35,142,235,220,219, 73,111,163,
+251,208,238, 53,231,217, 27,179,107, 60, 2,199,246, 30,195,149,162, 43, 55, 92,169,112,219,182,109,251,149,227,184, 94,241,241,
+241, 73, 81, 81, 81, 33, 0, 40,150,101, 69, 38,147, 41,112,254,252,249,126, 13,184,130,235,133, 48, 44,236,253,117,235,214,141,
+139,143,143, 71, 84, 72,136, 83, 67, 87, 77,116,255,199, 0, 64,116,183,110, 14, 3,216, 58,183,110, 29,155,150,150,134, 63,139,
+138,212, 59, 14, 28,192,229,203,151,107,172,254,174, 93,187,194,122,143,222,113,224, 0,138,138,138,112, 37, 47, 79,239, 72,230,
+130,247,223,199, 91, 75,150,212,184,247,109,255,219,206,109,255,187, 18, 11,144,146,146,201,141, 26, 53,234, 85,123,210,183,125,
+ 14, 28, 56, 16, 41, 41,153, 78,117, 76, 87, 47, 23,228, 49, 12, 3,154, 54, 66,126,167, 28, 21,183,203, 80, 89,118, 7,149,101,
+119, 32, 47,175,128,178,170, 10, 70,173,214, 18, 63,163, 84,194,137, 32, 64,230,253,180, 53,252,247,211,214,240, 1,168, 1,176,
+131, 7,244,185,231, 33,187,184, 0,167,209,182, 99,116, 76,105, 65,158,172,239,160,187,105,232,216,255,201, 24,101,197,117, 89,
+ 83,234, 7, 73, 84,212,178,252,221, 65,190, 92,139,226,151, 30, 2,119,227, 60, 66,255,123, 6,222,235, 79,227,246, 20, 41, 6,
+238, 47, 7, 17,136,192, 39, 0,159,114,172,128,158,191,112,129,252,235,195,229,152,247,214,155, 48,177,102, 92, 46,188,138,233,
+ 83,167, 65, 40, 22, 99,215,143,187, 1,147, 25, 70,131, 17, 71,243,142, 67,175,175,198,172,153, 51, 15,191,252,242,203,141,149,
+ 53,153, 52,105, 82,236,152, 49, 99, 64, 8, 65, 86, 86,214, 61, 46,253,183,223,126,219,233,247, 12, 14, 14,198,173, 91,183, 0,
+128,159,158,158,142,138,138, 10,244,238,221, 27, 1, 1, 1,160, 40, 10, 39, 79,158, 4, 69, 81, 32,132,224,214,173, 91, 8, 14,
+ 14,118, 70,236, 7, 52, 77,143, 4,240,131,221,181,169, 35, 70,140, 72,123,233,165,151, 2,211,211,211,197,132, 16, 10,192, 78,
+ 88,102, 1,220,113, 32,111,225, 9,147, 41,186,174,188,103, 22,237,216,250,244,180, 57,100,220, 43,233,200, 57,113, 17,105,105,
+105,172, 90,173,126, 1,150,217, 5, 78,121,183, 58,249,250, 6,180, 47, 43,195,112,157, 14,109, 4, 2,111,111, 30,239,129, 45,
+183,223,175, 95,191,154,195,169, 33, 0, 0, 5, 91,142,223,152, 43,215, 26, 79, 3,200, 7,208, 38,247,106,197,231, 35,187,133,
+189,199,191,113, 34, 8, 27,102, 0, 34,111,192,168, 5, 56, 14, 38,158,248,206,209, 63,111,127,137, 70, 86, 95,218,252,221,103,
+177,211,166, 39,201, 0, 64,203,154,112, 77, 89, 12,192,140, 78,126, 81,136,141,237,131,176, 86,255,159,189, 47, 15,107,234,218,
+222,126,247,201, 64, 0, 21,193, 89,180, 42, 86,212,170,117,192,138,168,149, 68,209, 90,173, 29,190, 26,181,245,218,250,211,150,
+160,246, 58,117, 64, 91,123,237, 96,171,222,123, 81, 59, 74,236,112,181,189,245,170,193,218, 58,213, 1, 77, 80, 17, 65,180, 90,
+ 71, 64, 80, 17, 20, 81, 18,166, 4,200,180,191, 63,146, 19, 3, 4,114, 18, 80,180, 61,239,243,228,225, 76, 89,236,236,189,207,
+ 94,239, 90,123,237,181,219,163,168,164,212,230, 43, 48,154,113,179, 88, 95,239,143,234,244, 72, 4,242,114,237,203, 60,137, 16,
+227,250,219, 98, 0,246,158, 53, 97,223,174, 4,220,186,115, 3,173, 90,218, 86, 18,180, 20,139,240,248,224, 1, 80,255, 82,143,
+ 75, 23, 66,136,173,102, 88, 32,128,149, 16, 48, 22, 43, 96, 50,195, 34, 18, 2,132, 1,251, 78, 90, 41,108,185, 2,234,193,111,
+234, 43,228,233, 17,205,169,159,152, 66, 40,114,242, 48,152, 0, 51, 5, 42,141,128,165,202, 2, 66, 8,136,152,192,108, 1,244,
+ 85, 64, 90, 74, 9, 25, 48,160, 51,117,233,242,103,123, 22, 99, 5,177,187,255,109,164,128,192, 98,101,192, 8,236, 43, 5, 0,
+ 80, 1, 5, 40, 55, 47,128,179,242,119,117,158,188, 39,185, 27,215,142, 54,105,210,164, 62, 9, 9, 9,107, 0, 12, 72, 72, 72,
+216,155,144,144,112,100,210,164, 73,111,116,239,222,221, 68, 8,105,245,217,103,159,237, 95,188,120,241,180,149, 43, 87, 38,213,
+ 67, 62, 89,235, 95,248,214, 91,111, 45,123,235,173,183,176,119,239, 94,232,111,213,126,151,187,181,105,131, 43, 87,174, 0,128,
+154, 75, 34,159,186,146,254,188,241,198, 27,210,175,190,250, 74,253,229,151, 95, 98,112,207,158,178, 19, 23, 47,186,117, 21, 31,
+ 59,123, 86, 51,188,127,255,167, 46,157, 56,209, 21,128, 15,128,207, 77, 62, 62, 16, 85, 85,161, 71,135, 14, 88,180,104, 17,146,
+147,147, 87,133,134,134, 38, 37, 39, 39, 31,204,203,203,115, 67,238,106,231, 1,104, 64, 12, 64, 53, 30,152,148,148, 68, 98, 99,
+229, 39,142, 31, 47, 76, 86, 40, 20, 98, 0,136,141,149, 15, 91,181, 74,149, 2,142, 73,128,186,246,127,236,221,138,155, 5, 99,
+173,102, 75, 47,125, 73, 9, 74,238,220, 6, 33, 12, 40,181,162,178,178, 18,148, 82, 80, 74,113,229,194, 69,152,140, 85,248, 61,
+ 49,209, 93, 29, 58,143, 57, 45, 1, 48,227,101,145,214,241,178, 72, 56, 47, 11,180, 79, 17,112, 70,167, 30, 67,164,121, 89,105,
+106, 0,232,218,165, 11,206,164,217,120,114,246,239, 59, 0, 0,109, 30, 25, 36,187,157,123,170,201, 60, 0,131,127, 43, 68,250,
+211,192,128,176, 40, 20,206, 29,134,246, 95, 31, 67,166, 86,143, 64, 49, 65,145, 86, 7, 33, 33,110, 61, 0,142,119, 51, 57,185,
+218,147,221,187,119,167,227, 39, 60,141, 93, 59,118, 97,235,214,173,248,224,189,247,177, 95,115, 16, 2,161, 0,193,157,130, 35,
+ 75, 74,234, 95,186,188,125,251,118,141,157, 8, 72,199,142, 29, 91, 45, 22,224,192,129, 3,184,124,249,114,165, 82,169,236, 80,
+211,155,228,178,191,116,237,138,156,156, 28, 60,246,216, 99,230, 5, 11, 22,136, 55,111,222,140,128,128, 0, 92,186,116,169,150,
+231, 53, 39, 39, 7, 93,185,183,179,115,226,185,233, 79, 60,241,196, 71, 47,189,244, 82, 64,122,122,122,243,202,202,202,255,243,
+245,245,125,198, 30, 24,248, 43, 71,121,206, 11,229,167, 63,243,247,205, 27, 71,140,126,129,252, 51, 17, 32, 29,159,197,167,107,
+223,165,218,172, 75, 51, 1,168, 60,104,102, 82,102, 50, 21,139,125,124,208, 66, 44,134,175,197, 82,165,175,190,100,237,129, 67,
+ 53, 2, 48, 95,131,243,159, 73,171, 50,231,107, 28, 83,154,185,159, 73,139,127, 43,171, 52,235,195, 31,109, 61, 62,200, 79,240,
+132,160,170,210,223, 76,153,178,162, 50,227,241,148,203, 5,251,242,181,134,164,249, 26,220,172,139,100, 76,251,219, 82,205,225,
+ 99, 41, 50, 0,106,171,128,157,230, 19,224,114,233, 77,252,227,141,153, 48, 24,170, 80, 90, 97,139, 1, 48, 50, 62,216,178,189,
+254, 52,187,121,185, 41,228,133,103,255,110, 83,150, 22,214,114, 54, 99, 92, 63,130,169,115, 86,195,207,207, 7, 45,124, 37, 50,
+ 0,234,172,115,167,100, 27,190,216, 94,239,128, 36,164,102, 24,137,141, 4,128, 16, 88, 40,181, 17, 1,179,125,185, 31, 97, 32,
+180, 90, 97,182, 7, 7,186, 35, 1,197, 21, 45, 81, 81, 85, 4,177,144,113,164, 57, 51, 91, 1,147,137,194,100,166, 40,175,176,
+130, 8, 8, 44, 32, 48, 89,239,186,238, 93,193, 98,101,192, 16, 11,136,133,128, 50,212,225,254, 39,117, 24,207,172,164,243,151,
+ 54, 19,119,185,161, 47,166, 92,108,104,223,113,184, 45,250,245,235,119, 51, 36, 36,228,133,171, 87,175,246,216,186,117,107, 26,
+128,231, 18, 18, 18,158,115,126,120,229,202,149,154,197,139, 23,203, 86,174, 92,233, 78, 65, 56, 42, 36, 38, 38,166,206,135, 94,
+124,245, 85,155, 15,208,179,196, 64,180,134,219, 31, 0, 48,164,119,111, 89, 26, 7,229,239, 24,128,207,156,113, 68,171, 14,235,
+215,207, 26, 23, 23,247,229,196,137, 19,205, 25, 25, 25,194,107,215,174,161,107,171, 86, 41,187,118,237,226, 20,160,120,143,242,
+ 0, 56, 43,247, 91, 73, 73, 73,206, 49, 30,103,157,234,217, 45, 9, 80,173, 92,165,151, 47,142,125,241,210,193, 67, 41, 45,253,
+253, 91,148,234,138, 97, 54,155, 65,237,239,129,238, 86, 33, 74,117, 58, 80, 74, 49, 48, 42, 74,246,123,162,219, 60, 72,102,220,
+141, 57, 97,236,203, 1,153,240, 65,143, 99,188, 44,210,177, 10, 32,235,234, 85,206, 36, 32,106,194, 75,210,196,221,255,115, 88,
+249,191,170,190, 83, 3, 64,155,144,225,178,219, 57,201, 26, 0,104, 26,229, 79,107,147, 0,124,131, 1, 49,255, 64,129,213,138,
+254, 27,210,144, 54,174, 29,250,236,186, 5, 33, 1,154,139,188, 51, 22,119,237,218, 69,166,188, 52,133,142, 26, 51, 26, 59,182,
+253,130,143, 87,173, 68,108, 73, 9,168,213,138, 45, 91,182, 33, 63, 63,255, 25, 0,187,220,201,113, 69, 4, 0,224,133, 23, 94,
+ 56, 13,142,115,217, 27, 54,108, 32, 99,199,142,165,167, 78,157, 18, 15, 26, 52, 8,163, 71,143,134, 90,173,198, 35,143, 60,130,
+170,170, 42, 68, 70, 70,130, 82,106, 61,117,234, 20, 35, 18,137,188,201, 8,248, 88, 64, 64,192,154, 41, 83,166,136, 46, 92,184,
+208,162,170,170,170,174,192, 64,174, 24, 24, 60, 96,242,198, 1, 35,167,144,239,146,128,210, 10,192,120,101,175, 85,155,165,158,
+129,234,129,129,156,244,169,182,164,196, 44, 54,153, 96, 16,139, 33, 52,155,221, 76,143,223, 27,176,121, 0,156, 45,127, 87,215,
+ 92,186, 82,157,148, 63,123,126,241, 51,105,121,238,181, 59,229, 41, 0, 58,216, 95,222, 42, 0,249, 0,114,230,107,224,214,197,
+169,252,122,183,102,196,136,126, 50, 11,109,166,118,126, 57,202,245,165,182,117,255,140, 31,178,203, 64,214,126,189,137,211, 15,
+220,190,227, 11,114, 91,155, 35, 5, 99, 80, 59, 87,111,179,102, 1,176,152,116, 0,213, 99, 92, 63,110, 19,186, 38, 8, 0, 74,
+109,138, 26, 2,136,169,157, 8,216,149,191, 45, 7, 32, 0,142, 68, 46,229,228,117, 18,214,183, 3, 53,155,180, 16,218,189, 63,
+148, 82, 88,204, 20,149, 38,160,180,204, 12, 19, 40,204,148,129, 80, 68,112,231,150,169,206,114,158, 56,177,138, 0,192,176,136,
+183, 41, 49,217,172,127, 10,128, 82, 2, 80,187,197, 64, 5, 32, 2, 43,172, 86, 33, 50,179,182,113,250,205,175,125,252,154,236,
+106,246,213,250, 20,176, 8,182,165, 26,245,105, 39, 71,205, 47, 91,182,140,245,143,158,177, 91,197,119, 21,245,139, 47, 74,183,
+109,219,166,182,147, 0,181, 59, 18,176, 94,165, 50,253,126,246,172,188,107,191,126,150, 39,122,245,210,219,251,104, 21,106,100,
+209,146,143, 27,103,179, 56,250,245,115, 63,221,241,246,219, 50, 0, 24,220,179,103,173,123,233, 25, 25,154,180,139,222,147,161,
+126,189,123,127,205, 48,140,229,210,137, 19,254,237,218,181,187,147,156,151,183,209,157,213,127, 31,180,142,115, 63,208,219, 3,
+254,216,169,129,242, 26,109,205,133, 4, 92,144, 47,142, 13,223,241,237,119,219, 66,186,117,125,172,170,170, 18, 22,147, 25, 86,
+171, 21,205, 3, 3, 81,162,213,178,202,159, 11,137, 42,254,240,205,191,183, 5, 96,204,186,122, 85,204,206,255,167,158,250, 3,
+227,101,145,214,101,113, 95,184, 75, 14,228,192,156,121,177,244, 82,198, 37,153,179,242, 7,128, 81, 79, 61, 39, 59,180,239, 87,
+205,237,156,100,239, 43,177,142, 0, 63,215,215,185,235,176,193,191, 21, 2,191,189,225, 56,127,244,215, 2,199,113,137,201,123,
+ 99,113,203,255,182,144,225,195,135, 63, 61,118,194,184, 61,175, 79,159,117,244,241,254,253, 70,236,248,117, 39, 82, 78,159,196,
+201,147, 39,119,215,231, 6,174,135, 8,204,218,190,125,251,183,219,183,111, 31,186,125,251,118,206,133, 27, 59,118,236,168,253,
+251,247, 31,218,181,107, 23, 66, 66, 66, 48,102,204, 24, 4, 4, 4,100,150,148,148,132,158, 63,127, 30, 57, 57, 57,140, 72, 36,
+194,216,177, 99,163,246,239,223,239,233, 79,189, 80, 82, 82,178,106,231,206,157,245, 5, 6,122,130,223,243, 79,111, 93,241, 75,
+194,179,239, 86, 4, 79, 67,197,137,165,214, 27, 71, 62,153,238,165,188,202,107,133,133,162, 55, 51, 51,243, 44, 6, 3,115,134,
+ 97, 68,237, 5,130,130,130, 38,114, 2,184,202, 6,232,110, 10,192, 37,230,107,160, 7,240,135,253,227, 21,142, 30, 61,171,137,
+137, 89, 44,139, 87,126,172, 14,238,210, 3, 64, 21, 68, 62, 18,228,221, 44,197,166, 93,201,196,115,121,187, 53, 51, 94, 91,136,
+ 13,223,255, 12, 88,175, 1, 16,194, 92, 89,129,224, 14, 1,178, 79,222,158,197,217,154,131,197, 10, 33, 99,133,137, 8, 33,162,
+230,187, 68, 0,102,128, 90,192, 53, 48,204, 25, 39,207,221, 36, 0,208, 62,136,161, 34,161,205,218, 55, 91,109, 9,140,138,203,
+ 40, 44,102, 64, 32,180,194, 98,230, 54,114, 28, 75,249, 23, 1,128,240, 33,139, 40,216,156,240, 12, 96, 37, 54,119,127, 70,214,
+ 78,143, 10,249,237,251,223,106, 26,161,127,113, 50, 87, 88,229,239,228, 9,112,187, 28,235,196,165, 75, 9, 39,106,184, 12,235,
+121,214,237, 51,141,153, 58,184, 22,185,181, 45,241,139,183,217,214,103,189,146,209,200,121, 0,106,214,173,222,205, 82, 43, 78,
+125, 71,181,114,213, 37,249,226,216,190, 0, 4,151,146,146, 76,149,134, 10, 88, 45, 22,244, 14, 11,147,117, 8,125, 12, 39,126,
+219,201,173,142, 41,153,178,239,183,221,142,211, 97,143,133, 56,142,247,253,182,187,214,121,125,161,241, 95,127,110, 35,200,163,
+159,122, 94,118,225, 82, 54,110, 94, 59,171, 6,128, 67,251,126, 85,183,123,164,175,236, 86,238, 57,143,219,125,242,228,201,240,
+ 52,189,175,133,248,212,123, 63,247,133,246,248,237, 70,229, 61, 31,240,147,147,147,127, 83, 42,149, 76,122,122,186,245,224,241,
+ 36,180,106,221,170,230, 74, 15,143,176,125,251,246,239,148, 74,229, 15, 10,133,194,228,201,247,222,122,235, 45, 53, 0, 50, 99,
+198, 12,154,157,157,141,180,180, 52,148,149,149,133, 54,111,222, 28,173, 90,181,114,236, 5,224,133,242,103,241,175,164,164, 36,
+ 81, 74, 74, 74, 63,163,209,184, 20,213,231,242,189,193,123,231,182,252, 77, 20,208,253,135, 69, 37,217,251,167, 53, 64,158,121,
+115,106,234, 51, 0,198, 0,248, 29, 86,107, 25,220,199, 35, 52, 58,216, 85, 0,174,174,123, 69, 0,220, 14,130, 74,165,112,221,
+186,117,238, 93, 85,251,142,105, 58,117, 29, 77,110,229,165,208,182,193,157,161, 45, 51, 99,211,142,163, 94,119,208, 13,223,174,
+177,127,183, 29, 5,110, 33,176,185, 16,159, 44,121,221,163,151,254,155,227, 89,247,108,157,102,129,214, 74, 0, 64,226, 43,162,
+198, 10, 19,172, 0,252,252,252, 96, 48, 27,136,197,236,185,188,212, 52,219,158, 1,225, 79, 44,164, 86, 42,192,213, 43,123,154,
+114,141, 41,215,165,131,252, 46,129, 28,234,199, 89,225, 55,242,180,128, 49, 54, 86,238, 3,192,178,106,149,170, 65,166,136,106,
+229, 42,118, 35, 31, 71,155,102,159,243,108,157,254,188, 21, 95,120, 69,198,106,110, 5,236,140,131,251,126,209,212,236,107,183,
+114,189,203, 31,224,110, 99,159,154, 28,216, 76,124, 80,193,212,191, 34, 53,187,204,140,208,230,194,251,242,170,216,215,234, 55,
+218, 59,231,169,242,175, 54, 62,123,191,225, 15, 23,124,106, 52, 26,127, 1,220,111, 74,199, 17,239,148,100,239,223,132,234,177,
+ 1,158,194, 4,160, 24,158,197, 13,220, 51, 18,192,105,240,241,118, 31, 97, 30, 60,156,209,163, 71, 15,100,101,101,241, 21,193,
+131, 7, 15, 30, 15, 9, 24,190, 10,120, 52, 6,120,229,207,131, 7, 15, 30, 60, 1,224,193,131, 7, 15, 30, 60,120,240, 4,128,
+ 7, 15, 30, 60,120,240,224,193, 19, 0, 30, 60,120,240,224,193,131, 71,147,163, 90,104,234,233,211,167,189,142,218,116, 21, 76,
+200,203,227,229,241,242, 30, 24,121,245, 70,135,243,245,199,203,227,229,253,185,228,121, 76, 0,156, 6, 10, 79,225,110,224,105,
+ 76,121, 60, 30, 76, 80,190,221, 30,202,118,224,252,188, 82,169,244, 7,240,196,209,163, 71, 63, 17, 8, 4,195,124,124,124, 96,
+ 48, 24,142,141, 24, 49,226, 61, 0,105, 10,133,194,240, 32, 84,128, 61, 59,164,250,175, 60,174, 80, 74,233,185,115,231,208,175,
+ 95, 63,254,157,228,225, 17, 1,240,104, 29, 50,151, 68, 57,174,228, 57, 39, 62,241, 84,222, 95,112, 64,231,132,167,158,122, 74,
+182,111,223, 62, 13, 87,153,193,193,193,181,110,228,231,231,215, 28, 76,161, 82,169, 8,199, 50,222, 51, 18, 80, 87, 62,255,166,
+146,183,122,245,234,209,219,182,109, 75,204,204,204, 4, 0,132,132,132, 60,155,154,154,186,211,219,246,117,238,247,148, 82,199,
+251,193, 94,103,223, 21,251,117,226,134, 60,115,109, 7, 79,148,255, 99,231,206,157,219, 86, 90, 90,218,171, 75,151, 46,184,115,
+231, 14, 42, 43, 43, 1, 96,216,182,109,219,212,254,254,254,151,148, 74,229,243, 10,133,162,222,173, 36,207,157, 59,231,145, 65,
+144,156,156, 44, 83, 40, 20, 26, 79,190,163, 82,169,212,114,185, 92,230, 77, 2, 40,234, 97, 18,134,201,147, 39,123,242,126, 0,
+ 0,186,116,177,237,128, 91, 86, 86,134,170, 42, 91, 26,116,189, 94,239,201,251, 86, 47,206,158, 61, 75,135, 13, 27,134,222,189,
+123,195,199,199,167,176,170,170,234, 17,126, 24,253,235,161,102, 50,160,123,150, 8,136,183, 98,239, 45,126,141, 31,231,246,153,
+231,103,239,245, 72,166, 90,125,215, 64,202,204,204,132,191,191,191, 99, 16, 98,193,101,243, 15,185, 92, 78, 85, 42, 85,205,115,
+ 82,199, 51, 94,213,109,100,228,221,237, 92, 93,201,111, 8, 8, 33,116,228,200,145,178,164,164, 36,143,148,197,182,109,219, 18,
+219,182,109,139, 87, 94,121, 5, 58,157,206, 26, 23, 23,183, 99,229,202,149, 83, 23, 47, 94,188,197,195,255,143,223,126,251,205,
+113, 62,110,220, 56,236,221,187,183,222,115, 46, 98,107,244,101, 26, 22, 22, 6, 0,212, 41, 51,156, 71,202,191,164,164, 36,165,
+123,247,238, 45, 0, 64, 34,145,192,215,215, 23,133,133,133, 40, 46, 46, 70, 64, 64, 0, 10, 11, 11,123,237,221,187, 55, 77,169,
+ 84,246, 84, 40, 20, 5,245,201,235,219,183, 47,228,114, 57, 66, 66,238,102,253, 91,181,106, 85,181,103, 98, 99, 99, 1, 0,199,
+143, 31, 87,123,211,111, 26,146,253,113,237,218,181,117,221,114,236, 85,224, 45,252,253,253,113,225,194, 5,136, 68, 34, 24,141,
+ 70,236,221,187, 23, 89, 89, 89, 88,178,100, 73,131,250,113, 96, 96,160, 0, 64,212,225,195,135,247, 70, 70, 70,222,122,254,249,
+231,219, 37, 38, 38, 66, 32, 16,180,105,217,178,165, 0, 60,254,210,202,159,189, 86,147, 4,252,105,130, 0,195,195,195,165,247,
+219,226,110, 74, 4, 15, 94,238,248,120, 11,157, 78,231,176,248,245,122, 61,214,175, 95,239,248,120, 48,208,186, 60,159, 52,105,
+ 18,149,203,229, 20, 0,173,249,140,167, 56,124,248,176,250,237,183,223, 70,183,110,221, 26,173,254,186,118,237, 74,222,121,231,
+ 29, 80, 74,145,148,148,164,246,180,221, 51, 51, 51, 49,110,220, 56, 43, 0,136,197, 98, 38, 52, 52, 20,113,113,113,155,219,180,
+105, 67,195,195,195,199,123, 96,113,222,171, 46, 66,194,194,194, 40,251,187, 78,158, 60,201,238, 7,192,182, 11,103,183,191, 78,
+167,219, 38, 22,139, 91, 0,192,220,185,115, 49,109,218, 52,136,197, 98,248,250,250, 66, 34,145,128, 16, 2,129, 64,128,146,146,
+146, 22, 0,226,148, 74,101,189,178, 99, 99, 99, 17, 18, 18,130,156,156, 28,199, 39, 54, 54,182,218,167, 33,144,203,229, 50,251,
+239,244,122, 76, 88,184,112,161,227,227, 60, 94,214,184,206,121,163,151, 46, 93,186,192,223,223, 31, 75,151, 46,133,191,191, 63,
+118,236,216,129,138,138,138, 70, 81,254,246,119,153,234,116,186,255,155, 62,125, 58,122,244,232,209,110,239,222,189,184,117,235,
+ 22,174, 95,191,142,226,226, 98,227,253, 28,155,148, 74,165, 52, 47, 47,143, 42,149, 74,169,171,123, 89, 89, 89,244,242,229,203,
+124, 2,186,251,160,252,163, 99, 87, 34, 58,118,101,157,196,224,190, 16, 0,226, 2,245, 93,247, 6,169,169,169,234,198, 32, 1,
+211,166, 77,123,104, 72, 64, 67, 97, 48, 24,106, 89,253,222, 52, 47,171, 76, 38, 77,154,228,176,242, 19, 18, 18,208, 80,197,239,
+108,253,171, 84, 42, 50,114,228, 72,153, 74,165,170,230, 17,104, 8,182,110,221, 74, 0,144,200,200, 72, 89, 77, 79, 3,199, 65,
+215,108,247, 6,160,109,219,182, 88,190,124,121,229,155,111,190,105,204,201,201,217,189,114,229,202, 49, 77,221,190, 78,123, 0,
+ 16,231,118,242,176, 93,158,200,202,202,234, 5, 0,179,102,205, 66, 73, 73, 9,110,220,184, 1,145, 72, 4,161, 80, 8,161, 80,
+ 8,145, 72, 4, 95, 95, 95, 84, 84, 84, 32, 49, 49,241,101, 0,129,238,132,230,228,228, 64,165, 82, 57, 62,206,158,128, 85,171,
+ 86, 33, 49, 49,209,235,223,173, 82,169, 52,246, 41, 0,117, 35,189,203,117, 37,238,230, 60,126, 94,189,122, 21,187,119,239,198,
+242,229,203,209,165, 75, 23,180,110,221, 26, 73, 73, 73, 88,178,100, 9,252,253,253, 1, 0, 2, 65,131, 12,245, 14, 51,103,206,
+156,242,175,127,253, 11,169,169,169,184,113,227, 6,204,102,243, 43,173, 90,181, 10, 4, 96,186,223,125, 47, 56, 56, 24,209,209,
+209,234,236,236,108,234,172,252,163,163,163,213,143, 62,250, 40, 30,240, 93,114,255, 20,112, 86,252,206,199, 77,225, 1,160, 46,
+ 62,245, 93,111, 50, 18, 48,126,252,248,198, 32, 1,212,131, 15,103,188,248,198,190, 70,107,144,204,204, 76,232,245,250, 58,221,
+252,199,142, 29,107, 12, 98,208, 96, 28, 62,124, 88,109, 39, 22, 72, 74, 74,210, 16, 66,208,182,109, 91,117, 99,118, 78,214,253,
+111,247, 4,212,139,213,171, 87,143, 31, 62,124, 56, 5,128,184,184, 56,241,247,223,127,143, 87, 94,121,133,117,205, 75,254,248,
+227, 15,177,253,222,254,240,240,240,231,184,252,255,113,227,198,225,233,167,159,118,184,247,217, 99,246,156, 61,230,232,254, 7,
+ 0,216,173,127, 87,237, 64,106,220,175, 23,123,247,238,253,164,117,235,214, 0,128,203,151, 47, 35, 55, 55, 23,167, 78,157,130,
+209,104, 4, 33, 4, 66,161, 16,132, 16, 88, 44, 22, 24, 12, 6,108,223,190, 29, 0,250,123,226, 57,146,203,229, 46,201, 75, 78,
+ 78, 78,131, 72,128,211,111,111,144, 55, 0,141, 48, 85,106, 50,153, 48,104,208, 32,104, 52, 26, 92,189,122, 21,131, 7, 15,118,
+220,211,104, 52, 8, 10, 10,114, 16, 1, 47,208,113,230,204,153,121,223,125,247, 29,162,162,108, 27, 25,117,236,216, 17, 22,139,
+229, 71,216,114,211,223, 87, 40, 20, 10, 13, 75, 62, 67, 66, 66,112,226,196, 9,202, 42,127,150,252,245,236,217,147,203,248, 48,
+ 4,192, 15,176,237,121, 86, 31, 38, 0,136, 6,208,134, 87,251,247,185, 99,115,210,134,247, 49, 8,208, 78, 2,100,169,169,169,
+ 26,111,101,116,237,218, 21,211,166, 77,195, 79, 63,253,228,109, 76, 0, 1, 64,127,250,233, 39,151, 55,247,236,217, 3,251, 61,
+143,101, 31,191,242, 24,134,118,187,128,252,244,165, 13,170, 39,231, 57,255,196,196, 68, 68, 69, 69, 33, 58, 58,218,161,252, 59,
+119,238,220, 24,164,175, 65, 68, 32, 50, 50, 82,122,248,240, 97,220,185,115, 71,198, 94,147, 74,165, 50,149, 74,165,142,140,140,
+148,122, 58,111,239,230,127,201,184, 16,128,109,219,182,237,102,231,254,245,122, 61, 86,173, 90,133,242,242,114,136, 68, 34,248,
+248,248,224,202,149, 43, 88,190,124, 57,116, 58, 29,226,226,226,126, 89,185,114,229,168,197,139, 23,171,221, 40,217,106,100,192,
+ 93, 76, 0,135, 58,135,155, 29, 0, 29,211, 1,238,126,111, 80, 80,208,176,170,170, 42,152,205,102, 28, 59,118, 12, 2,129, 0,
+ 70,163, 17, 21, 21, 21,176, 90,173,142,247,216,100, 50,161,170,170,138,125,167,251,186,147, 91,151,155, 63, 54, 54,214, 17, 15,
+ 16, 18, 18,130,194,194,194, 6, 19, 81,167, 85, 1, 92,251,162, 22, 64,144,171, 27,107,214,172,241,170, 16,113,113,113,120,251,
+237,183, 49,112,224, 64,135, 7,132, 77,159, 61,112,224, 64,100,100,100,160,109,219,182,222,136,238, 50,115,230,204,171,223,125,
+247,157,243,248, 25,124,227,198,141, 27, 77,169, 88, 6, 15, 30, 76, 88,165, 63,120,240, 96, 12, 30, 60, 88, 13, 0, 25, 25, 25,
+232,213,171, 23,215,118, 56, 13,192, 23,192,102, 0, 83, 81, 99, 75,112, 59,222, 0,240,133,253,248, 61, 0,189, 0,247, 91,212,
+255,153,193,238, 6,184,126,213, 98,135,229,191,126,213, 98,199,189,251, 78, 0,238, 55, 30, 20, 18, 48,109,218, 52,250,222,123,
+239,213,114, 5,122,163,252, 27,211,250, 7,224,210,250,103,173,126,145, 72,132,130,130,130, 38, 85,254,206,214,191,115, 64,151,
+ 90,173,118,246, 2,220,247,128,205,204,204, 76,188,242,202, 43, 6, 0,126,254,254,254,120,255,253,247, 33, 18,137, 28,247,103,
+204,152, 1, 0, 8, 12, 12,196,196,137, 19,113,244,232,209, 67,247,177,156,196,217, 3, 80, 31, 9, 8, 11, 11,171,185, 85,172,
+ 75, 50, 96, 52, 26,161,213,106, 81, 89, 89,137,128,128, 0,248,248,248,192,108, 54,131, 82, 10,139,197, 2,163,209, 8,147,201,
+ 4,139,197,226, 76,232,239,212, 87,200,156,156,156,106, 1,128,236,116,128,179, 71,192,249,126, 67,225, 69, 64,160,164,174, 27,
+206, 49, 1,158,144,129,229,203,151, 99,194,132, 9,232,218,181, 43,252,252,252, 32,149, 74,161,213,106,225,239,239, 15,157, 78,
+135, 13, 27, 54,128, 97, 60,118,200,118,154, 57,115,230,213, 5, 11, 22, 96,199,142, 29,120,238,185,231, 0,160, 61,154, 96, 11,
+218,186, 60, 1, 1, 1, 1,178, 41, 83,166,168, 1, 96,203,150, 45,178,169, 83,167,122,210, 22, 70, 0,211, 0,252, 84, 15, 9,
+112,158,106,123, 4, 64, 63, 0,105,188,109,143,106,138,191, 46,252, 41, 51, 1, 54, 84,249,179,240,214, 74,119, 30,144, 63,249,
+228,147, 6, 43,127, 22,131, 6, 14,192,193, 67,106,108, 58,228,231, 32, 5,199,175, 60,214,160,223, 24, 22, 22,134,156,156, 28,
+ 36, 36, 36,160,115,231,206,216,184,113,163,199, 86,151, 82, 25, 47,117,242,224, 52,138,242,103,231,227, 11, 11, 11,101, 53,239,
+141, 28, 57, 82,150,144,144,208,104,177, 0,128,205,253,207,213,251,164,211,233, 46,194, 54, 47,108,221,178,101, 11, 54,108,216,
+ 0, 0,216,188,121, 51,116, 58, 29,251,152, 57, 35, 35, 3,109,218, 52,141, 87,178, 70,180,127, 45,114,198,117,159,248,156,156,
+156, 99, 22,139, 5, 58,157, 14,119,238,220,129, 78,167,131,193, 96,128,193, 96, 64,121,121, 57, 74, 75, 75, 81, 82, 82,130,138,
+138, 10, 84, 85, 85,177,115,187, 41,245,201,172,169,220, 93, 5,146,214, 92, 21,192, 21,118, 87, 63,117,113,205, 19,248, 53,118,
+123,108,220,184, 17, 82,169, 20,126,126,126,184,112,225, 2, 52, 26, 13,252,253,253,241,143,127,252, 3, 71,143, 30,197,146, 37,
+ 75, 60, 37, 0,237,103,206,156,121,125,234,212,169,248,249,231,159, 89,229,223,241, 65, 81,254,182,113, 65, 41,101,149, 63, 0,
+ 76,153, 50, 69,125,233,210, 37, 79,167, 86, 89, 18, 0, 59, 9,168, 57, 29,112,217,233, 56, 23,192, 89, 94,237,223, 69,205, 32,
+192, 38, 33, 0,247, 35, 8,176,177,149,191, 93,113, 55,134,229, 70, 62,249,228,147, 6, 41,255, 23,223,216,135, 65, 3,239,186,
+110,182,253,188,221,225, 17, 56,120, 72,237, 21, 9, 80, 40, 20,176, 47, 13,131,193, 96,192,129, 3, 7,176,124,185,109, 69,193,
+217,179,103, 97, 54,155, 61,144, 21,163, 1,108,129,127,148, 82, 54, 24,176, 65,202,159,181,254,235,115,243, 55, 86, 44, 0, 75,
+ 36,164, 82,169,204,221,179, 33, 33, 33, 99,227,226,226,194, 82, 83, 83,133, 63,252,240, 3,115,233,210, 37,204,152, 49,195,204,
+214, 99, 92, 92, 28, 82, 83, 83,241,195, 15, 63, 8,175, 93,187,134,240,240,112,183, 50,239, 69, 12, 0,107, 73,215, 32, 1,148,
+ 37,125, 92, 17, 26, 26,154,110, 54,155, 97, 52, 26,113,251,246,109, 20, 20, 20,224,214,173, 91,184,117,235, 22,110,223,190, 13,
+173, 86, 11,131,193,128,170,170, 42,148,148,148,176,255, 51,175, 62,153,108,160,159, 51, 9,173,167,236, 30, 41,127, 54, 7, 64,
+205,107, 13,233, 31, 46, 86, 3, 56, 72, 30, 87, 25, 89, 89, 89,200,200,200,128,193, 96, 64, 68, 68, 4,250,247,239,143,141, 27,
+ 55,226,221,119,223,133, 88, 44,134, 64, 32,128, 80,200,217, 33,219,105,230,204,153, 55,167, 78,157,138,180,180, 52,124,240,193,
+ 7,172,245,123, 19, 15,200, 50,230,244,244,116,202,206,249,159, 58,117, 10,235,215,175,151, 1, 64,207,158, 61,225, 28, 24,216,
+ 64, 18, 48, 31,182,249,255, 73, 0,230, 0, 8,199, 95,220,253, 15,220,141,244,119, 21, 4, 88,115, 21,192,253,154, 2,160, 30,
+ 94,255,179, 40,127, 7, 9,104,192, 84, 66, 53,229,239,234,252,224, 33,207,199, 55,231, 65,215,207,207, 15,189,123,247,174,118,
+ 63, 53, 53,213, 35,121,147, 38, 77, 66, 66, 66, 2, 88, 34, 0,128,218,175,121,188,238,124,227,198,141,106, 0,216,187,119,175,
+204, 85,196,122, 82, 82,146,230,234,213,171, 46,173, 71, 87,168, 43,233, 15, 75, 52,146,146,146, 16, 25, 25, 41, 83,171,213,110,
+251, 78,106,106,234,129, 21, 43, 86,140, 78, 78, 78, 62, 24, 26, 26,138,204,204, 76,232,116, 58, 97, 96, 96, 32,102,206,156, 9,
+173, 86,123, 45, 57, 57,185, 75,104,104, 40,146,147,147, 73, 76, 76,140, 59,114, 92,107,206,191, 1, 49, 0,213,222, 45, 54, 95,
+130, 61,119,130,195, 51,227, 52,255,239,182, 61,134, 14, 29,250,174, 70,163,153,103,177, 88, 80, 90, 90, 10,147,201,228,152,247,
+175,172,172, 4,165, 20,148, 82,100,100,100,192,104, 52, 34, 42, 42,234, 37,133, 66, 97,118,149,116,164, 46, 68, 69, 69, 33, 42,
+ 42,170, 90,208,159,167, 83, 0,206,138,222,238,242,167,206,253,195,190, 42,160,177,199, 53,206,227, 39,187,212,239,205, 55,223,
+132, 70,163,129, 76, 38, 67, 86, 86, 22,154, 53,107,134,220,220, 92, 8, 4, 2,174, 30, 0, 50,115,230,204,235,211,167, 79,199,
+145, 35, 71,240,143,127,252, 3, 0,130, 1,220,192,221,252, 15, 77,110,249,179,227, 75, 78, 78, 14,194,194,194,216,126, 38,139,
+142,142, 86,135,132,132, 32, 35, 35,131,114, 12, 4,116, 38, 1, 83,237, 4, 96, 51,128, 99, 0, 20, 0,164, 0, 10,192,163,241,
+ 58,112, 99,103,227,115, 21,240,179,106,213,170, 58,175, 55,165,242,183,175, 0,184, 23, 44,218,107,153,215,243,220,247,111, 95,
+ 95,207,188,150,238,130,196, 60, 69, 84, 84,148, 44, 33, 33, 65, 51,121,242,100,186,117,235,214,106, 68,160, 6,225,227, 92, 15,
+ 49, 49, 49,110,153,141,135,137,129,104, 13, 34, 97, 27,149,100, 50, 78,202,223,105, 48,119,204,235,135,135,135,255, 45, 46, 46,
+238,199,137, 19, 39, 34, 35, 35, 3,215,174, 93,235,178,116,233, 82, 89, 76, 76, 12, 39,121,247, 40, 15, 64,181,122,174, 67,241,
+113,202, 24,168, 80, 40,244,241,241,241,203,246,236,217,243,161,217,108, 70,113,113,177, 35, 6, 0, 0,110,223,190,141,226,226,
+ 98, 80, 74, 89,171,221, 35, 45,203,206,255,135,133,133, 57, 34,216,217,235, 92, 73,128, 11, 43,191,214, 52,212, 61, 80,254, 30,
+131, 37, 1,139, 23, 47, 70, 82, 82, 18, 38, 78,156,136, 21, 43, 86,224,173,183,222,130, 80, 40,132, 68, 34,113, 59,134, 80, 74,
+173,179,102,205,194,143, 63,254,136,239,191,255, 30, 0, 58,219,149,127,163, 27, 84, 13, 65,126,126, 62,118,239,222, 93, 45,139,
+163,253, 88, 54,106,212, 40,181,151, 75, 30, 45,118, 18,176,203,110,253, 15,229,149,127,221,112, 21, 4,200,137, 0,120,146,136,
+195, 91,133,221,216,104, 12,229,223, 80, 69,125, 47, 48,127,254,124,217,165, 75,151, 26, 85,166,221, 69,218,168, 75,233, 88,133,
+103, 95, 91,207,122, 5, 40, 33, 4, 86,171, 21,219,182,109,227, 76, 2,222,126,251,109,182,156,181, 98, 0, 24,134,129,213,106,
+197, 59,239,188,163,230,170, 60,235,147,151,148,148,164,113,206,138,232, 69,191,251,239,138, 21, 43,110, 39, 39, 39,239,229,106,
+245,223, 7,104, 62, 28, 93, 0, 0, 32, 0, 73, 68, 65, 84,111, 27,169,233,237,169,131,240,113, 34, 1, 49, 49, 49, 31, 41,149,
+202,132,159,126,250,233,188, 88, 44, 6,187, 42,192,106,181,162,101,203,150,208,233,116,144,203,229,136,138,138,242, 83, 40, 20,
+110, 23,120,179,227,139,115,240,223,201,147, 39, 17, 21, 21, 85,109, 60,113, 55, 14,197,198,198,210,156,156, 28, 89, 77, 23,191,
+183,105,128,157,225, 34,192,207, 12,192,188,102,205, 26,137,221, 26,101,156, 62, 30,145, 0,231,196, 63,115,230,204,113, 28,151,
+150,150,186, 29,155, 8, 33,100,230,204,153,244,135, 31,126,120, 30,192,175, 15,162,226,177, 43,122,226,233, 61, 46,164,189, 6,
+110, 62, 12, 99,248,253, 6,187, 10,192,149,226,231,180, 10,160,177,149,122, 93,242, 30, 20,242,240, 32,119,156,207, 62,251, 76,
+211,216, 50,107,172,145,190,103,168,225,254,231,250, 82,115,205,133, 78, 60,248,189,247,244,183, 46, 89,178,100, 95, 67,234,115,
+220,184,113,213,150,197, 62,253,244,211,213, 60, 3, 30,206,253, 19, 15,189, 61,156,202,173, 80, 40, 46, 40,149,202,102,251,247,
+239,255, 52, 55, 55,119, 94, 69, 69, 5, 44, 22, 11, 6, 12, 24,128,193,131, 7,199, 69, 69, 69,197,114, 81,254, 0,112,252,248,
+113,199,113,100,100,100,181,235, 53,207,221,140, 43,196,153,208,178,100,194, 30, 7,224, 85,187, 79,158, 60,185,174, 91, 66,167,
+241, 82,124,175,198, 21, 55,158, 10, 43, 0,124,255,253,247,252,134, 41, 60, 56,147,128,186,148,127, 93, 4,160,177, 59, 23,223,
+ 89,121, 16, 15,153,253, 95,174,110,156, 21,254, 61,152, 22,104,148,119, 80,161, 80,232, 97,115,189,206,103,175, 93,188,120,145,
+139,226,114,160,111,223,190,141, 62, 30,184, 34,180,222,186,252,239, 53, 89,228,193,235,143,251, 73, 2,220, 86,174,183,251, 8,
+243,224,193,131, 7, 15, 30, 60, 30, 94, 48,124, 21,240,224,193,131, 7, 15, 30, 60, 1,224,193,131, 7, 15, 30, 60,120,240, 4,
+128, 7, 15, 30, 60,120, 60,132, 48,195,131,237,138,121,252, 53, 33,228,171,128, 7, 15, 30, 60,248,177,157,199, 95,188,147,156,
+ 62,125,218,235,136, 75, 87,193,132,110,228,213,187,254,216, 11,121,141, 93, 62, 94, 30, 47,239, 47, 45,239,247,119,175,121, 61,
+176, 12,252,180, 11,238,181,188,147, 75,188,151, 23,182,162,182, 60,182,254,148, 74,165,212,100, 50,225,202,149, 43,106,163,209,
+ 8,161, 80,136,188,188, 60,188, 20,208, 21,251,210,211, 81,241,120,103, 12, 29, 58, 84, 38, 16, 8,216,117,237, 77,214,190, 74,
+165,242, 49, 0,109,207,159, 63,191,187, 99,199,142,140, 86,171,149,116,236,216,113,185,175,175,239, 58,133, 66,113, 3, 0,226,
+227,227,153,248,248,120, 75, 93,242,226,227,227,155,219,189, 5,134,152,152, 24, 10, 0, 75,255,254,228, 55,138, 39,115,103,110,
+ 74, 15,189, 34,108, 59,118,104,179,230, 45,202, 1, 80, 74,169, 16, 64, 96,124,124,252,117,254,125,123,176,229,221,107,150,200,
+117,211, 23, 79, 83,224,122,156, 50,119, 85,196, 83, 82, 97, 80,128, 58, 59,243,178,236, 81,159,102, 88,116,238,176,230, 65, 98,
+ 89,245,228, 35,231,151,184, 52, 49, 38, 76,152, 32,221,179,103,143, 58,238, 93,219,249, 47, 71,158,196,225,195,135, 57,181,203,
+223,102,188, 42,101, 8, 81,103, 92,186, 4,157, 78,135, 46, 93,186,160, 89,243,230,216,158,176,141,115,187, 78,154, 52,169,218,
+139,155,144,144, 80,239, 94, 10,246,236,138, 94,245, 27,118,163, 38, 74,105,195,250,157, 92, 91,253, 85, 85, 5,121, 47, 43,108,
+ 13, 16,242,170,237, 56,103, 3,112,114, 81,195, 27,117,210,157,234,229, 75,104,205,233,107, 74,165,146,234,245,122,217,246,237,
+219,213, 57, 57, 57,144,139, 90,161,125,231, 54,168,212, 87,192,215, 96,198,240,183, 94,199,200,137, 83,176,235,187,120,236, 60,
+120, 80, 61,118,236, 88,217, 3,208,133, 51, 45, 22, 75,135,156,156, 28,107,255,254,253,197,161,161,161, 56,117,234,212,187,149,
+149,149, 19,148, 74,101,148, 66,161,208,198,196,196, 88,235, 91, 18, 22, 19, 19, 83,230,124,254,213, 87, 95, 49,123,255, 27,219,
+163,211,172,129,120,103, 72,159, 54,199,247,255,123,235,182,179,210,211, 61,250,142, 90, 65, 8,209, 42, 20,138,188, 1, 3, 6,
+ 88,237,164,129,247, 52,252,197,220, 68,158, 50, 13, 78,217,198,188, 81,254, 95, 71, 62, 43,141,104,211, 73, 77, 64,145, 85, 94,
+140, 14, 29,187,170, 77, 86, 11,150,244, 27,134,194, 46,109,100,223,237,250,149, 19, 17,136,158, 10,218,171, 59,123, 38,192,246,
+253, 86, 28, 57, 65, 17, 61, 21,232,213, 29, 88,244, 73,195, 20, 55,187, 65, 73, 67,179,147,185, 34, 19,141, 37,183, 33,160,148,
+ 82, 44, 35, 32, 31,213,251, 12,176,140, 96,242, 69,249, 3,179,214,250,174,242,167,118,229, 63, 18, 71,143, 30,229,244,221,148,
+227, 47, 82,179,169, 23, 84,170,155, 72, 77,177, 37,172,201,188,148, 1, 0,216,189,155,208,140,203,147,100,139,230,115,107,151,
+ 49, 99,198, 88, 15, 28, 56,192, 36, 36, 36,224,208,161, 67,213,146,225,212,132,151, 41, 84, 29,205,228,162, 35, 83,234, 5,161,
+ 96,211,133, 55, 56,103, 65,200,171,142,141,118,214,172, 89,211, 56, 4,192,169,158,236,187, 19,114, 66,118,118, 54, 52, 91,183,
+170, 63,138,154,140, 1,211,230, 64,220, 46, 16, 16,218,147,253, 89, 41, 96, 21,193, 90, 69, 49,254,213,104,228,126,190, 18,199,
+142, 29, 83, 43,149,202,106,233,110,155, 0, 22,134, 97,218,182,110,221, 26, 26,141, 70,216,191,127,127, 12, 25, 50,132, 41, 40,
+ 40, 24,120,230,204,153,115, 74,165,114,144, 66,161, 40,176, 43,107,134, 99,221, 53, 27, 61,106, 76,200,138,213, 59,152,216, 25,
+103, 91, 12, 29, 55, 91, 54, 52, 60,241,201,183,190,200,123, 38,244,137, 87,194, 0,148,193, 22, 99,192,212,165, 31,156, 19, 91,
+185,235, 71, 13, 38,164, 60,106,122, 18,220,121, 11, 28,199,158, 4, 1, 82,182,113, 7,188,210, 15, 74,165,146,241, 64, 17,214,
+220,164,130,134,133,133, 33, 44, 44,204,235, 60,241,202,151,163,165, 47, 15,140, 80,247,236, 16,140,238, 29,130,241,120,155,142,
+ 8,246,109, 6,137, 21,232,230,211, 12, 1, 89, 55,212, 51,159,121, 78,202, 69, 86,175,238,192,165,108, 6, 23, 47,251,225, 92,
+118, 11, 60, 63,198, 31,171,223, 19,160, 87,119,210,104, 70,122, 67,149, 52,187,205,105, 72, 72,136, 58, 61, 61, 29,233,233,233,
+248,240,191,103,240,232,248, 88, 53, 0,234,225,150,167,148,235, 71, 46,151,187,127,139,151,217,234, 40, 44, 44, 12,114,185,220,
+229,135,125,198, 83, 76,236,255,129,212,185, 60, 19,250, 45,147, 54, 70,123, 76,152, 48, 65,186,123,247,110, 53, 33, 4,111,126,
+ 74,240,203,145,145, 56,114,228, 8,167,239,110,221, 58, 77, 58, 52, 60, 6, 35, 70,220,196,231,159,127, 94,237,222,203, 47, 3,
+227,199, 3, 11,231, 37,168, 87,127,198,173, 77, 88,229,175,209,104,192, 48, 12,166, 76,153, 2,129, 64,208, 16,101, 95,203,242,
+119, 53, 32, 19,226,157,242,111, 52,132,173, 6, 0,172, 93,187, 22,107,215,174,181, 93, 27, 20,215,100,197, 57,116,232, 16,190,
+122, 33, 26,131,159,147, 67,216, 42, 8, 68, 36, 0, 35, 18, 64, 32, 17,131,241,149, 0,160,160, 22, 51,168,209,136,215, 95,157,
+131,210,131,233,200,206,206, 86, 43,149, 74, 41,154, 14, 36, 61, 61, 61,162,115,231,206, 98,171,213,138,164,164, 36,236,216,177,
+ 3, 1, 1, 1,136,136,136,232,176,101,203,150,143,237,207,113, 10, 8, 84, 42,149,130,163, 7,255,247,159, 71,252,242,218,233,
+203, 4,120,121, 89, 57,190,252,247,103, 64,243,190,194,127,199,182,237,150,125,234,167,151,157,116, 7, 83, 7, 49, 36, 78, 74,
+157,216, 46, 19,199,177,243,245,123,180, 23, 6,143, 70,246, 0, 56, 90,105,211,222,159,138,187, 63,218,189,165,226,163,215,173,
+ 30,106, 71, 18, 22, 22, 70,217,180,164, 78,233, 73,169,167,105, 59,149, 47,188, 42,125,170,243,163,106,113,165, 25,190,255,126,
+ 27,102,131, 17,146, 55, 63, 65,128, 88,130, 74, 81, 5,244,149, 21,240, 5, 65,213,245, 66,245, 63,255,249, 79,217, 59,239,188,
+ 83,175,242,189,148, 13,172,223,108, 5, 96,176,127,128, 39,159, 96,240,194, 88, 82,237,189,137,158, 10,172,223,236,149,242,150,
+169, 84, 42,234,173,181,206, 90,253,233,233,233,119,235,224,168, 9, 21, 70, 61, 0, 96,116,236, 1,168, 86,141,241,200,203,144,
+189, 50, 27, 34,146,117,183, 35,144,124,144,214,189,156,206, 11,209,230,255, 94,224,214,176, 31, 57,242,205,147,186,210,206, 18,
+ 59,233, 59,121,146, 91, 59, 43,158,253, 82,186,126,199,223,213, 59,207,124,128, 21, 11,126, 65,184, 52, 20,155,190, 62,130,111,
+247,219, 54, 8,154,253,183, 15,100,235,254,251,129, 87,164, 42,238, 93, 80, 96, 55, 84, 63,156, 7,165, 20,205,219, 62,142, 35,
+ 71,142,192,190,111, 65,189,229, 91,253,153, 92, 42,151,183, 82, 3, 95, 1,248, 5,169,169, 64,120,248,221,251, 31,127,124,247,
+120,225,188, 4,181,175,223, 82,217,236,215,151,215, 91, 78, 86,249, 71, 70, 70,194,106,181,226,203, 47,191,108, 84, 7, 13, 0,
+ 88,173,214,218,202,159,214,255,254, 50,147,117,213, 94,126,118, 8,183,202, 93, 60,231,240,243,217, 14,250,247,175, 61,199,206,
+ 76,209, 85,163,249, 86,235, 12, 44, 88,176,192,113,127,193,130, 5, 88,187,118, 45,152, 30,179,238,254, 87,251,243,174,228, 9,
+167,184, 46, 95,205,157,172,133, 83,184,149,175,178,178, 18,237,187,116, 5,172, 70, 48, 62, 0, 17, 10, 96, 46, 43, 65,101,206,
+ 21,220,206,203, 71,167, 97, 82, 16,113, 75, 16,147, 17, 16, 48, 88, 53,251, 45,140, 89,255, 1, 22, 45, 90,212,216,227, 50, 39,
+173,168, 84, 42, 9,165,180,101, 69, 69,197,176,160,160, 32,100,100,100,192,106,181,226,202,149, 43,216,176, 97, 3,122,247,238,
+141,224,224,224, 87, 0,188, 94, 67, 89,215,233, 13,160,148,182,238,194,164, 74, 59, 60, 50, 78, 92,156,116, 22, 37, 58, 31,252,
+184,203,140, 61,199,255,139,121,114, 95,161,208, 96, 13,179,199, 20,184, 36, 0,188, 66,111,122,212, 53,221,227,202, 51,192,112,
+232,136,236,188, 33,164, 75, 70, 98,125,146,178,101,246,229,108,156,254,225, 44,148, 74,165, 71,214, 3,171, 28, 12,134,159, 96,
+ 48,108,130, 86, 27,197, 90,199, 30,253,192, 33, 62, 45,212,109, 43, 45,144, 44,155, 3,203, 29, 45,204,151,175, 66, 40, 22,193,
+143, 8,224, 79, 4,240, 23, 8, 17, 36,146,128,150,233,113,243,208, 49,183, 59,189,184, 82,234, 71, 78, 88, 29,239,225,234,247,
+ 8,226,150, 18,187, 71,192, 59,235,223,174,156,213,240, 34, 5,110, 77,229, 15,161, 0, 57, 55,203,113,179,200,136,212, 11,182,
+ 13, 68,122,204,216, 9, 79,246, 61, 23,145, 44, 8, 73, 62,124,152, 51,182,191,109, 9, 2, 95,190,129,128,169,231,224,243,252,
+ 50, 32,216,223, 51, 79, 46,135,157,219, 60,217,226, 85,185,227, 13,245,208,160,247,112,242,240, 21,252,191, 73, 19, 17,220,186,
+ 39,230,252,253, 53,124,177,116, 63,134, 6, 46,197,186,255,126,232,245, 14, 62,132, 0, 49,139,206, 57, 44,150, 17, 35, 70,216,
+ 21,146,213,109, 3, 79,155, 42, 82, 3,135, 0,252,130,226, 91,205,208,227,145,102,248,230, 27,155,229,191,108, 25, 16, 18, 98,
+ 19, 81,124,171, 25,138,111, 53,195,128,126, 23,213,238,148,255,161, 67,135, 96,181, 90, 29, 74,122,203,150, 45,176, 88, 44, 30,
+185,175,235,241,240,212, 82,254,182,247,217, 61,121,167, 0, 89,167, 84,202, 88, 75,205, 74, 41,172,214,218,221,151,189,110,165,
+ 20,235,226,227,101,241,182,239,184,252,159, 20, 32,148,130,196,199, 43,101,148, 82,124,246,217,103,142,251,236,113,124,124,188,
+140, 82,219,115, 20, 32,117,201,139, 87, 42, 97,191, 71, 44, 22, 11,204, 22, 11,204,230,218,117,198, 94, 55, 91, 44,248,122,221,
+ 58,217,186,248,248, 58,202, 71, 33,108,222, 28, 16, 9, 96, 49,148,227,252,182, 4,252,227, 53, 5, 58,189,161,192,192,149, 31,
+225,202,239,167, 32,240,149,192, 84,116, 11,103,143,107,176,243,200, 62,148, 20, 20,224,220,185,115,141,182,177, 86, 68, 68, 4,
+ 39,111,130, 82,169, 12,160,148, 14, 73, 79, 79,255,245,253,247,223,239,115,254,252,121,177,209,104,132, 64, 32, 64,243,230,205,
+ 97, 54,155,145,150,150, 6, 66,136,216,221, 88, 31, 31, 31,239,175, 84, 42,125,227,227,227,131,139,243,146,127,255,240, 63,185,
+ 65,127, 28,217, 5,173,158,129, 88,200,160, 83,160, 4, 37,119,196, 80,252,211,140,179,119, 6,250,187,211, 27,246, 88, 19,234,
+220, 23,237,196,160,214,117, 94, 93,223, 31,176,202,191, 38, 57, 96,220,177, 80,118,191,239,106,110,206,113,211, 60,247,246,217,
+221,253, 6,195, 38, 0, 4,149,149,223, 67,114,226, 42, 12,251, 30,173,118,223, 29,222, 25, 20, 41, 13,208,150,193, 42, 22,194,
+120,242, 60,170, 46,230,160,114,255, 17,160,162, 10, 98, 74,225, 7, 1,132, 32,168,178,154,161,173,170,196,215, 7,118,185,149,
+185,250, 61,155,117,239, 12,219, 57,107,174, 80,100, 92,166, 88,244,137,247,253,181, 70,190,114,206, 46,123,185, 92,238,216, 91,
+155,197, 75,107,243,112,240,164, 14,185,183, 42, 1, 0,185,183, 42,145,149, 87, 1, 68,109,101, 55, 70,113,239,250, 33,249, 54,
+ 34, 80,118, 22,254,254,151,225, 35, 41,131,213,170,133,201,116, 18, 2, 65, 8,140,250,162, 38,235,172,147,199,253, 93, 10, 16,
+124,249,203, 44, 52, 99, 30, 1, 0,220,204,160, 24, 52, 81,128,191, 47, 31,131, 17, 99,250, 0,160,246,231, 60, 67,100,100, 36,
+125,243, 83,130,102,109,250,129, 2, 24,247,194,108,206,243,254,235,190, 89, 74,219,182,253, 3,192, 57, 20,223,106,134,178, 34,
+219, 22,204,253,251, 3, 61,122, 0,175,188,114, 87,249,151, 21,249,162,172,200, 23, 65,126, 55,235,149, 57,105,210, 36,200,100,
+ 50,140, 26, 53,170,154,235,223,249,227,205,148,128,171,247,214, 27,196, 56,205,111, 19, 66, 28,159,186,174,197, 40, 20, 26, 69,
+180,251, 57,241,232,232,104,181, 43,203,121,193,130, 5,136,142,142,174,166, 80,235,146,247,139, 82,137,115,231,206, 57, 92,240,
+206,117,198,162,230,181,217, 49, 49,154, 24,133,235,173,154,197,148,130,241,243,129,169,224, 26,148, 75,151, 98,131,190, 24,186,
+200,161,142,251,223,253,119, 3, 62,120,235, 53,132, 46,122, 9, 31,157, 61,132,173,186, 43, 24,243,236,179, 8, 9, 9,241, 56,
+ 24,208,174,232,105,120,120,120,181, 62,124,252,248,113,117,125,219,177, 43,149, 74,145, 82,169, 28,124,246,236,217,220,164,164,
+ 36,205,155,111,190, 57,244,203, 47,191,148,148,151,151, 59,182,105,174,172,172, 68,179,102,205,178, 38, 79,158,220,115,248,240,
+225,143,184, 33, 18, 12, 33,164,203,217,148,109,133,153,251, 22, 93, 93,180, 36,174,195,206,101, 29,113, 49, 95,136,146,114, 1,
+172, 4, 40, 42, 55,130,182,234, 94,185,240,221, 79,250, 60,243,252,223, 94,135,155,120, 2,187,251,191,154,171,223,205, 49,143,
+ 38, 80,254,117, 77, 1, 80,174,174, 28,133, 66,225,238, 33, 90,211,250,183,185,218,190,175,203, 59,224,246,159,246,105,221, 78,
+173,165, 38,136,139,180,144,252,114, 8, 68,200, 0,149, 70,208, 50, 61,136,217, 12, 17, 0, 11,181,162,210, 98, 70,153,217, 8,
+ 88,221, 91, 81,108,144,223,234,247,234,228,180,176, 5, 9, 54, 10, 97, 37, 78,129,124,110, 95,128, 90,214, 63,128,255,189,209,
+161,218,249,224,197, 57, 16,209, 59, 48,145,214, 80,169, 84,135,184,190, 88,146,114, 53,130, 62,250, 47,110,191, 25,131, 59, 90,
+ 95,116, 52,157,135,197,146, 3, 0,184,118,186,125,147,117,216,173,123,191, 80,191, 54, 86, 89, 77,249,179, 24, 26,184, 20,195,
+250, 76, 66, 68,208,121,108,221,187, 92,237,201, 32, 50,114,228, 72,154,148,148,132,162,162,209,104,213,234, 32,154,181,238, 11,
+ 74, 41, 24,134,225, 20,136,148,155, 11,228,228,156,179,159,149, 3,146,114,104,245,192,144, 33,182, 43, 89, 89,192, 87, 95, 1,
+101,165,128,190, 28, 40,215, 3,254,129,165,156,202, 86,151,181,159,157,157, 13, 0,248,244,211, 79, 1, 0,161,161,161,247,194,
+205,204,169, 14,231,207,159, 95,205, 98,175,169,184, 57,123,119,236, 10,219, 49,239,239,132,207, 62,251, 12,107,215,174,133, 82,
+169,148,186, 11,174,155, 21, 28,138,204,243, 23,144, 31, 24,168,102, 24, 6,243,230,205,171, 21,147,225, 73,249,158,172,106, 9,
+106, 45,199,107,159,190,135,126,147, 38, 65,249,233,167, 96,152,187,122, 78,153,117,238,174,135,240,200, 17, 28, 56,112, 0, 87,
+174, 92,145, 41, 20, 10, 13,151,141, 87,156,149,127, 74, 74,138, 26, 0,210,210,210,212, 17, 17, 17,178,148,148, 20, 77,120,120,
+184, 52, 53, 53, 21, 17, 17, 17,178,138,138, 10,117, 29, 99,174,105,198,140, 25,253,166, 77,155,214,162, 91,183,110,216,179,103,
+143,161,164,164, 68, 88, 81, 81, 97,243,118,216,231, 63,182,111,223, 30, 58,110,220, 56, 95,133, 66, 81,225, 66, 12,227,164,172,
+153,156,140,211,107, 63,120,103,102,179, 86, 61, 84,248, 93,245, 42,254,184, 78,144,123, 75, 8, 80, 6, 85, 70, 19,180,180, 85,
+254,220, 89,115,134, 18, 66,242,217, 49,223,147,223,235,194, 67,192, 79, 21, 60, 32,168,147,197, 37, 37, 37,213,250, 20,231,235,
+ 80,156,175,243,168,173,217,207, 93, 43,214,214,240,146, 19, 87,225,115, 46, 31,194, 60, 29,235, 1,168,246,124, 93, 2, 47,228,
+229,226,196,157, 27, 56,127, 37, 7,183,174, 92, 69,233,213, 60,148, 93,207,135,217, 80, 1,147,201,140, 50,139, 17, 6,139, 25,
+ 85,212, 2, 11, 40, 40,225, 78, 50,157,163,253, 47,101,219,206, 23,125,194, 90,254, 12,226,222,107,156, 21, 47,158,198, 1,196,
+170,116,136, 85,233,170, 41,124,246, 19, 17,155, 6, 17,189, 3, 33,213,225,127,179, 44,102,206, 83, 0,183, 78,192,162,111, 6,
+ 0,248,183, 48, 0, 85,183,174, 33,253,159, 29,144,249,211, 4,156,248,231, 0,100,101,220,104,210,142,217,127, 72, 8,244, 58,
+ 64,175, 3, 12,190, 23, 0, 0, 63,127,104,194, 59, 11,150, 1, 0,134, 71,245,241,216,242,127, 97,228, 97,104,181, 81, 8, 60,
+126, 16,107,222,179,145,220,145, 35, 71,114,114,253, 3,192,138,143,151,147,238,221, 1,231,207,165, 75, 54,247, 63, 0,244,232,
+ 65,177,118, 45,208,165,103, 57, 30, 27,122, 27, 67, 70,223,198,243, 47,153, 56,151,209,217,226,103,207, 67, 67, 67, 17, 26, 26,
+138,121,243,230, 53,118, 21,187,125,215,156,177,126,253,122,153, 43,133,237,240,162,173, 94,141,245,235,215,115,178,132, 95,127,
+253,117, 53, 27,249,239, 10, 11, 23, 46,172,229, 5,112,133,195, 23,114, 49,115,214, 92,156,220,180, 9, 75,150, 44,169,147,156,
+176,229, 59,120,240, 32,234, 11,216, 27,249,216, 35,248,254,187,175, 16,246,242,203, 88,177, 98, 5,234, 43,227,130, 5, 11, 48,
+122,244,104,120,179, 2, 32, 37, 37, 69,237, 20, 44,135,227,199,143,171, 1, 32, 53, 53, 85, 77, 8, 65, 74, 74, 74,189, 50, 13,
+ 6, 67,203, 93,187,118,225,194,133, 11,200,202,202,242,211,235,245, 48,153,108,253,204,104, 52, 98,239,222,189,196, 78, 22, 42,
+ 56, 20,199, 90, 85, 85, 37, 62,185,237,101, 84,102,126,129,125, 73,217,184,114, 83,128, 82, 61, 3, 11, 5,242,245,190,152,187,
+232,189,136,152,152,152, 60, 14, 6,159,131, 87,176, 75, 78, 57, 78, 7,240,104, 2,235,191, 46, 2, 64, 0, 16,169, 84, 10,169,
+ 84,138, 51,103,206, 56, 62, 57, 39,174,161,164,162, 4,173,134,120,190,238,247,228,201,147, 4, 0,252,252,166, 65,114,226, 42,
+ 68,215,138, 64, 9,129,120, 86, 81,181,251,110, 21,151, 88, 0, 11, 5,242,244,197,200, 45,209,226,118,169, 14, 37,149,149,208,
+ 25, 43,112,187,170, 2, 55, 43, 13,200,175, 44,135,214, 84, 5,157,213, 4,163,213,125,240,235,147, 79,184, 24,240,156,226, 2,
+ 94,155,210, 12, 20, 98, 80,143,183, 1,191, 27,189,239,226, 26,103,228,222,170,196,193,147, 58, 12, 94,156, 83,189, 46,232, 29,
+248, 88,175,193,199,122, 13, 31, 60, 37, 68,110,110,174,145,171,204,109, 87,172,104, 19, 23,239, 56,191,162,183, 32, 47, 59, 31,
+ 25,201,231, 81,112,181,184,201, 59,238,166,175,147, 0, 0,165,133, 20,126, 21,143, 65, 58, 75,136,255,183, 76,228,248,196,109,
+125, 25,132,187,241, 79,159, 27,145,132, 87, 23,217,148, 63, 33, 4,191, 38,219,154,128,235,154,127, 22,161,189,122, 86, 47,231,
+ 38,224,203, 47,129,203,151,109,158,128, 15, 63,164, 14,247, 59,165, 20,129,129,129,238, 71, 96,123, 31,101,231,253, 63,253,244,
+ 83,100,103,103, 35, 51, 51, 19,153,153,153, 72, 76, 76,196, 91,111,189,133,220,220,220, 38,107, 15, 86,209,185,178,164,231,207,
+159, 15, 66, 8,103,101, 72, 8, 65,125,100,162,190,123,206, 56,226, 83, 12,194, 52,195,183,239,126,130,102,187, 18, 17, 29, 29,
+141,151, 89, 54, 6, 64,209,163, 47,230,135, 13,131,159,159, 31, 70,142, 28,137,247,223,127, 31,137,137,137,234, 21, 43, 86,184,
+124,255,190,203,207,196,205, 62,143, 33, 56, 56, 88,102,181, 90,235, 37, 20,245,221,227,160, 28, 29, 30,167,136,136, 8,153,147,
+162,196,208,161, 67,101,110,188, 39,163, 70,142, 28,217, 34, 55, 55, 23, 71,142, 28,193,163,143, 62, 10,161, 80,232,152,226, 8,
+ 14, 14,230, 58, 29, 97,181,255, 95,210,189,215,192,216,245,251, 91,226,143, 61,203,240,100, 68,111,248, 75, 24,248,251, 89,224,
+235, 83,133,167,159,155,108, 5,160,117,254, 98,124,124,188,187,185, 40,199, 42, 0,142,211, 1, 60, 30, 52, 15, 0, 0,162, 84,
+ 42,155,207,159, 63, 31,243,231,207, 7, 0,227,199, 49, 31,195, 84,104,134,175,175, 4,222, 52,158, 92,110, 11, 31,246,123,234,
+ 50,168,128,193,251, 63, 27,156,173,127, 78,240, 11, 14,150,153,155,249, 65, 71, 45,184,160,215,225, 92, 73, 17,206,151,222,193,
+249, 82, 45, 46,232,181,184,108,208,161,168,170, 18,229,102, 51,110, 24,244,142,255, 89, 31, 94, 24, 75,176,250, 61, 1, 86,191,
+ 39, 0,133, 0,148, 48,136,158, 74,240,250, 84, 49,102, 77,105,131,238,221,219,193, 10,145,199, 63,153,117,245, 59,207,203,215,
+147, 20,168, 46, 25,178,172, 60, 27,145, 79, 95,105, 11,162,219,247,118, 0, 0, 64, 72,117, 16, 80, 61,170, 24, 91, 68,179, 86,
+171,245,147,203,229, 81,158,148, 49, 44, 44, 12,137,137,137,216, 84,174, 71,133,145,193,171,155,191, 69,161,196, 23, 21,198,166,
+219, 38, 98, 98,255, 15,100, 41,218, 79,176,233,199,173,142,107, 63,127,104,194,208,192,165,142,243,232,103,190,146, 81,112, 90,
+ 63, 76,215, 44, 5,102, 44, 26,141,150,199, 19, 33,251,103, 36,152, 9,128, 70,163,241,170, 15,119,233, 82, 61,122,124,212, 40,
+160,101, 75, 32, 36, 4, 8,239,223, 28, 18,177, 0, 2,230,174, 88,137,175,175,219, 1,153, 97, 24,135,229,159,157,157,237,176,
+250,217,207, 71, 31,125,132,143, 62,250, 8, 55,110,112,247,202,184,154,175,175,126,223,115,235,107,253,250,245,178, 53,107,214,
+184, 84,216, 92,173,127, 39,215,115,173, 56, 5,246,220,106,229,150,194,222, 72, 8,172,134, 42,136,218,119,129, 98,249,114,204,
+240,111,137,150,154, 20,199,253, 89,127,155,129, 15,254,253, 45,178, 86,255, 15,255,232, 55, 10,147, 3,187,225,192,142, 29,200,
+201,201,113,249,254, 61, 31,163, 64,159,190,125,101, 86,123,153, 88, 66,230, 60, 61,227,234, 90, 93,152, 61,123, 54, 37,132, 80,
+ 54,176,143,157,239,119, 86,242, 41, 41, 41,154,161, 67,135,202, 40,165, 96,167, 2,220,212, 91,146, 72, 36,122,244,249,231,159,
+207, 46, 41, 41,129, 78,167,131,175,175, 47,218,180,105,131,150, 45, 91,162,101,203,150,238, 42,207, 90,131,216, 89,124,124,124,
+ 12, 47,198,124, 46,219,112, 98, 48,174, 94, 47, 69,187, 0, 1, 34,122, 18, 60,222,141,194,191, 69,139, 98, 0,150,122,244, 6,
+191,223,192, 67,106,253, 3,110,150, 1, 42, 20,138,114,165, 82,233, 3,192, 95,161, 80, 56, 88, 96,167,200,142, 94, 49, 95,118,
+169,159, 92, 46,167,226, 89,142,200,127,226, 52,255,239,118, 64,126,119,247, 86,205,167, 81,207,193, 96,174, 66,169,222,128,108,
+147, 9, 34,171,237,203, 37,166, 74, 88, 41, 5, 5,176,231,214, 21,232,205, 38, 0,224, 48, 48, 17, 44,250,164,122, 31,183,197,
+ 3, 88, 97, 65, 21, 46, 94, 46,195,247, 91, 74, 61,250,177,206,138,222,238,242,167,246, 99,135, 98,231,178,250,193,246, 93, 21,
+ 68,163,191, 6, 16,130,162,162,187,193,121, 98,235, 77, 24,153, 14,152,219, 47, 19, 55,111, 58, 44,167,131, 92,202, 23,243,243,
+250,106,196, 75,165, 82,129, 45,205,230,179,199, 16, 21, 21,213,100, 29,119,231, 25,219,242,190,228,196,243, 0,128, 97,125,108,
+153,241,222, 89,176, 12,199,206,247,193,191,183,190, 12,229,174, 57,156,231,255, 95, 93, 20,133,160,160, 68,251,153,198, 78,150,
+162, 64,169,205, 26, 3, 40,130,130, 18, 57,201, 58,176,111,191, 35,167,197,203, 47, 3, 50, 25,193,157,235, 1,208,235, 36,168,
+ 40, 21, 99,243, 70,130,249,243, 41,174, 21,150, 33, 60, 98, 40,146, 14,169, 57, 89,197, 22,139,197, 49,223,159,152,104, 43,171,
+179,194, 47, 44, 44, 68, 97, 97, 33,103,253,239,164, 48, 40,195, 48,181,148, 42,165, 32,158, 38, 1, 82, 40, 20,154,215, 95,127,
+189, 90, 44, 0,235, 17,240,196, 21, 78,156, 88,137,181,198,178, 2, 66,184,207,217, 17, 66, 96, 46, 43,131,168,117, 16, 4,126,
+205,208,231,197, 73,248,104,236, 24,188,203, 46,219, 27, 56, 8,150,138, 74,136, 90,181, 67,191,161, 82,116,237,212, 13,159, 95,
+ 76, 65,223,190,125,101, 39, 78,156,168, 69, 2, 98, 20, 10, 0, 68, 13, 0,115, 98, 98, 28, 75, 7,205, 53,148,189, 80, 40, 0,
+232,221,133,138,117, 21,120,221,186,117, 4, 0,181,187,248, 73, 90, 90,154, 75, 23,127, 74, 74,138,134,139,242,143,143,143, 39,
+132,144,165, 45, 91,182,236, 51,116,232,208,238,151, 46, 93,194,169, 83,167, 96,177, 88,224,239,239, 15,131,193, 80, 24, 20, 20,
+116,213, 19,163, 79,169, 84, 50,237,218,181, 59,240,220,115,207,181, 59,126, 52, 13,107, 85, 7,208,130,136,209,179, 93, 21, 46,
+223,241,199,136,158,166, 43, 0,106,206, 99, 89,234,107, 19,231,140, 83,132, 16,231,211,154,121, 95,120, 52, 49,132, 28, 94,122,
+ 35, 0,163,211,160, 66,243,146, 60,158, 31,174,166,220,235, 80,124,156, 51, 6,150,106,117, 50,147,159, 68, 93,194, 88, 81, 80,
+ 89, 14,152, 76,176,216,215, 53, 93, 44, 47, 70,190,161, 20,148, 82,216,243, 11,104,184, 20, 47,122, 42,193,250,205,119,251,228,
+165,108,160, 87,119, 51, 4,208, 55, 72,249,215,232,236,238,234,160, 78, 47,128, 74, 53, 71, 13,164, 67,171,213, 26,115,115,115,
+133,171,198,128,137, 61, 48, 18, 11,250, 30,115, 88, 97, 92, 73,133, 43,175, 75,205,115, 86, 9,113,181,230,176,140, 96,176,125,
+ 37,135,171,229,126, 91,183,110,181,101, 2,148,203, 41,151,156, 15, 49, 19,191,150, 41,119,206, 85,167,108,165,136, 8, 58,143,
+225, 81,125,112,244,192,121, 28,215, 45, 7, 1,129, 98,226, 87,178,248,157,115, 57,149, 47, 40, 40, 17,132, 16,188,240,194, 11,
+248,230,155, 82,176, 42,198,246,151,178,132,128, 86,183,236,239,212, 41, 47,114,148, 76,150,116, 72,173, 30, 53, 10, 48, 22,116,
+198,245, 98, 31, 88,237,179,173, 29,244,237,240,118,116, 25, 14, 28,239,137,230,157,122,202,216, 44,129,245,129, 85,252,121,121,
+121, 0,128,130,130, 2,135,103,224,214,173, 91,142,129,213, 75, 16, 39,183,115,205,151,146,112,201, 7,224,140,111,190,249, 70,
+182,118,237, 90, 53, 75, 0,214,172, 89,227,177,245, 95, 83, 97,120, 11,137, 68,130,130,107, 87,209,173,123, 15, 88,205, 85, 32,
+102, 11,132,205, 91,160,249,160,193,104, 54,240, 9, 88,245,102, 88, 12, 85,160,102, 11, 96,177, 34,118,221,191, 49,229,229, 41,
+144, 72, 36, 46,229,153, 55, 7,114,250,191,174,158, 11, 91,225,250,217,136,136, 8,153,157, 0, 80, 74, 41,134, 15, 31, 46, 75,
+ 78, 78,174,245,156, 59,229,111,175, 43, 43,128,189, 61,123,246, 28,248,197, 23, 95, 24,111,223,190, 93, 57,102,204,152,231,210,
+211,211,255, 97, 48, 24,138, 90,183,110,173,248,252,243,207,181, 92,235, 79,169, 84,138, 0, 60, 50, 52, 60,188, 77,204,172, 24,
+ 92,201,187,162,157, 62, 43,230,201,212, 3, 27,227,110,150,105,135, 13,142, 28, 99,109,215, 41,244,255,213,180,242,235, 75, 45,
+108,239, 99,196,137,127, 18, 23, 58,160,230, 49,143, 7,149, 0,212,103, 93,120,163,252, 89,101, 83, 71,194, 24, 78, 36, 96,229,
+169,195, 26, 0,100,234,160, 8, 10, 95, 9,116,212, 12,163,217, 12, 43,181,162, 85, 64, 0,242,244, 37,240, 36,185,144,171,229,
+125,119, 99, 0, 60, 91,139,237,202,197,223,208,116,189,246, 60, 2, 19, 7, 15, 30,188, 51, 54, 54, 86, 28, 20, 20,100,189,121,
+243, 38, 22,244,189, 89, 83,249,115,254, 31,117, 37,236,241, 10,246, 44,127, 46,146, 60,213,122,134, 43,226,119,206,209, 0, 32,
+ 19,250, 45,147,238, 62,251,161, 58,101, 43, 64, 64, 48,177,255, 7,178,157,103, 62,208,112, 85,254,108, 95, 42, 42, 26, 77,129,
+ 82,214,250,133, 43,189,179, 33,238, 32,219, 31, 72,125,155,107,216,173,122, 82,164,235, 43,181,148,149,169,137, 0, 48, 84,250,
+130,148,153, 33,100,132, 48, 48, 18,217,216,201,175, 97,110,116,140,219,246, 72, 72, 72, 32, 9, 9, 9,244, 30,190,127,160,148,
+ 18, 66, 8,117,142,104,119,246, 4,120, 34, 75,161, 80,104,162,163,163,177, 96,193, 2, 7,161,104,170, 84,184,163, 70,141,194,
+220,173,235,241, 81, 89, 49, 6, 68,142, 0,211, 46,208, 86, 38, 19,181,165,238,133, 8, 68, 32, 4, 17, 11,240, 77,252,106,180,
+ 24, 61, 24,221,187,119,247, 56,106,191, 33,112,178,238,213,225,225,225,178,228,228,228, 6,213, 85,118,118,118,212,193,131, 7,
+175, 9, 4,130, 29, 79, 62,249,228,199,115,230,204,185,189,110,221,186, 36,192, 54,229,224,129, 40, 6, 64,226,169, 83,167,134,
+252,176, 97, 35, 35, 22,248, 92,159,244,210,164,254,115,231,206,213,125,253,245,215, 19, 0, 4,216, 21,127, 25,187, 65, 16, 23,
+143, 2,143, 7, 3, 92,220,255,222, 18,128, 6, 19, 6, 55,202,135,243,128,180,249, 84, 10,145, 79,146, 75,173, 25, 89,106,125,
+149, 17,102,139, 5,221,135, 12, 66,168, 57,220, 83,133,219,104,193, 40,108,210, 31, 0,106,214, 26,183,199, 1, 52, 40, 7,190,
+ 74,165,218,165, 84, 42,133,137,137,137,139, 86,173, 90,245, 79, 39,114, 49,202,249,127,113,245, 40, 0,104,180,228, 37,147, 47,
+178,113, 22,117,255,190,201, 23,229, 94, 49,253,221,103, 63,212,176,237, 67, 65,177,243,204, 7, 94,149,209,166,220, 9, 94, 93,
+ 52,234,174,217, 75,238,222, 91,244,137,231,249,200, 99,223, 62,167,137, 5,200,186,111,150, 74, 43, 12,182,125, 0,238,230,255,
+143,241,248, 29,177, 91,100, 22,133, 66,209,232,243,170, 44, 9,104, 12, 89,246, 88, 0, 53,123,220, 8,101,243,234,123,221,187,
+119, 71,251,121,243,100,107,247,239, 87,231,124,252, 11,228,162, 86,104,105,223,188,167,194, 96,198,252,183,150, 64,224, 23,132,
+ 61, 27,149, 56,211,154, 96,236,176, 97, 94,231,237,183, 88,204, 94, 15, 19, 92, 93,252, 28,200, 23,121,254,249,231,111, 83, 74,
+227,122,245,234,245,159,162,162, 34,189, 23,138,223,185,222, 71,166,165,165,193,106, 38, 24, 54,188,255, 7,115,231,206,213, 1,
+192,156, 57,115,172, 0,116, 13,105, 82, 39,143, 83,181, 99, 23, 94, 81, 30, 15,153, 7,224,158,144, 2,175, 21, 99, 66,181, 4,
+ 59, 72,203,206,104,242, 74,173,145,244,135,189,214, 96,185, 10,133,194, 2,224, 95,246,143,215,114, 93,149,175,129,191,151, 52,
+198, 51,247, 18, 54, 5, 79,177,232,147,196, 70,151,237, 46,213,175, 7,237,107,186,151,117,208, 88,155,174, 40, 20, 10,141, 66,
+161,104, 20, 89,164, 1,115, 0,108, 25,148, 74, 37,236,219,247, 34,215,105,251,222,228,131, 7, 28,219,247,142, 30, 58, 26,118,
+210, 91,231,255, 19, 76,209, 17,203,150,192,218,138,137,227,110,130,238, 72, 64, 99,212,215, 19, 79, 60, 81,101, 54,155,147, 0,
+232,223,127,255,253, 6, 41,209,152,152, 24,242,254,251,239, 83,163,209, 8, 0,251,235,122,110,229,202,149,100,241,226,197,142,
+255,101, 79, 5, 92,239,216, 94, 51,184,147,199,253, 5, 87, 15, 23,241,118, 31, 97, 30, 60,120,240,224,209, 36, 48, 3,168, 4,
+ 32,105,100, 35,206,221,142,129,156,119, 20,228,241,112,128,111, 76, 30, 60,120,240,120,184, 32, 4,208,140,131,242, 55,192, 22,
+192,221, 88,250,192, 10,126,217,223,159,174, 35,241,224,193,131, 7,143, 63, 31,252,120,125,193,131,247, 0,240,224,193,131, 7,
+ 15, 30, 60,120, 2,192,131, 7, 15, 30, 60,120,252,213, 81,205,165,115,250,244,105,175, 35,114, 93, 5, 19, 62,232,242, 66, 6,
+249,192,215,167, 0, 34,113, 49,172, 86,219,178, 48,129,128, 1, 67, 4,182,191, 12, 1, 33, 12, 40, 17,130, 16, 2, 6,102,236,
+220, 45, 2,165, 20, 65, 76, 43,120, 82, 62,123, 70,197,214,176, 5,240,148,193,150, 96,192,196, 46,249,122, 24,235,143,151,199,
+203,227,229,241,242,120,121, 15,166, 60,222, 3,224, 6,135,143, 94,134,174, 68, 7,147,137,226,246, 29,130,125,137,190,216,127,
+192, 31, 12, 17,225,128,186, 61,246, 31,234,128,253,234, 14, 56,114,162, 13,132, 16,130,129, 4, 35, 34, 24,248,136,125, 56,255,
+143,169,175, 78,167, 83, 95,157, 78,143, 38,171, 43, 77, 12, 73, 62,127, 46,253,176,250,216, 81,125, 98, 98, 98, 37,128,230, 60,
+ 7,125,248, 49,230,169, 17,210, 57,115,166, 83, 79, 55,121,122, 88,161, 84, 42,165,212,142,250,118,215,227, 10, 90, 3,124,143,
+226,193,163, 9, 60, 0, 44,134, 13, 31,194,249, 37, 60,150,156,230,150,181, 52,182,188,198, 68, 90,186, 8,227,198, 88,112,230,
+ 15, 95,136, 69, 66, 8, 5, 66,136, 68, 20, 62, 2, 19, 32,108, 14, 33, 42, 48,164,143, 25, 18,177, 15, 40,128, 14,237,128,103,
+199, 91,113,112, 7, 55,229,127,249, 98, 38, 30,125,172, 59, 58, 6,183, 68,222,181, 75, 93, 2,218,119, 67,235,142, 22,252,246,
+235,175, 72, 76, 76, 44, 70, 19,239,136, 37,151,203,199,171, 84,170,221, 78,231,207, 56,159,243,168, 27,115,231,200,169,185,242,
+188,108, 72, 88,160,218,106, 45, 66, 73,199, 10,117,167,246,163, 81, 94,213, 1,223,172,255,239,159,118,167,179,232,232,104,245,
+130, 5, 11, 64, 8,193,154, 53,107,212,141,145, 19,128, 77, 7,192,235,255,251, 15,143, 72, 23,165, 32, 12, 83, 95,123, 83,231,
+246,100,219,244,110,242,173,234,237,236,188, 51, 34,143,198, 5,155, 13,208,201, 75,192,141, 0, 52, 21,152,251,172, 11,199,143,
+ 53,129, 66, 0,161, 64,132, 97,225, 4,109,219, 48, 16, 10, 25,248,136, 4,232, 21,202,224,218,117, 51,134,132, 49,104, 21, 36,
+193,111,135, 90, 0, 0, 4,180, 2,148, 90,225, 46, 69,240,212, 87,167,211, 63,210,211,209,181, 99, 39,252,145,114, 28,169, 70,
+ 19,116,119,116, 16,251, 52, 71,239,129,195,209,127,248, 88,168,119,170, 32,231,152, 27,255, 30, 40,254, 81, 42,149,234, 96, 72,
+ 72, 8,210,211,211,217, 14, 83, 12, 96,158, 74,165,218, 37,151,203,163, 84, 42,213,193, 63,219, 75, 49, 59, 70, 78,125,132, 90,
+ 8, 25, 35, 42, 43, 45, 40,209,251,226,199,159, 14,122, 84,255,163,199, 12,151,182,240,213, 98,212,112, 49,186,118,121, 86,221,
+162, 69, 0, 76,102, 51,110,223,190,131,118,185,215,145,149,157,131, 87, 95, 25, 79, 55,254,176,199,171,118, 13,179,239,169, 0,
+112,223, 38,251,126, 90,255,192,221,237,112,215,172, 89, 3,165, 82, 41,109,170,116,192,247,241,125,161,219,182,109,171,189,159,
+ 66, 19, 41, 47,165, 50, 94, 74, 64, 16,221, 8,245, 78,115,127, 6, 73,125,205, 89,199,219,179,100, 58,246,189,114,224,181,120,
+189, 91, 34,247,219,111,191, 57,206,199,141, 27,135,189,123,247,214,123,206,227,222, 43,127,231,107,206, 68,160, 94, 2,144,124,
+ 52, 21,195, 71,132,223,183, 66, 91, 61,203, 14,233,252,176, 87, 47, 33, 35, 20, 64,167, 21,162,125, 91, 17,218,183, 21,163,188,
+ 92, 4,137, 72, 8,139,208, 7,131,250, 17, 12,120, 92, 0,134,136, 64, 8,129,143, 72, 12, 17, 83, 5, 34, 17,195,108, 0,204,
+208,215,171,252,143, 30, 58,136,110, 29,218,224,220,153,115,200, 45,188,121,183,124,101,229,144,156, 63, 65, 25, 1,193,160,176,
+ 65,248,109,175,103, 58,118,221,186,117,210,244,244,116,245,229,203,151,225,235,235, 11, 95, 95, 95,217,246,237,219, 53, 30, 14,
+102, 50,149, 74,117,144, 85,252, 78,157,163, 37,128,177,223,151, 57,221, 86, 0, 0, 32, 0, 73, 68, 65, 84,126,251,237,157,215,
+ 94,123, 45, 81, 46,151,143, 81,169, 84,137, 15, 98, 7, 15, 15, 15,151,166,166,166,114,254,221,210, 81,195,164,125, 67,155,171,
+ 59,117, 40, 68, 64, 11, 31, 48,140, 31, 42, 42,204, 40,210, 86,224,101,121,111, 42,105, 49, 8,223,127,247, 19,167,126, 36, 66,
+ 1, 94,120,230,113,117,159, 62,189,113,179, 64,135,147,191,159, 66,121,185, 30, 1, 1,205, 17, 18,210, 5,140, 64, 4,139, 37,
+ 23, 49,179,167,211,248,117, 63,254,169,172,155,232,232,104,245,194,133, 11, 29,231, 11, 22, 44,104, 52, 47,192,131,236, 1, 80,
+169, 84, 68, 46,151,211,132,132, 4,184,218, 88,233,126, 27,237, 10, 69, 12, 8, 33, 88,191, 94, 41,139,142,110, 24, 9, 96,186,
+188,232, 80,222,105, 43,154,185, 28, 76,219,183,100, 16, 28,196, 60,180,237,247, 87,133,179,178,119, 69, 10,220,122, 0,146,143,
+166, 2, 64,131,137,192,209,121, 89,245,222, 31,241,121, 15,175, 7, 11,167, 28,231, 30, 13, 66,137,154,182, 16, 9, 69,232,220,
+177, 28,101,101, 34,156, 60,215, 25, 2,129, 0, 2, 34,128, 88,100, 70,159, 30, 6,244,236, 33, 0, 1, 3,177,200, 7, 98, 1,
+ 65,216,227, 70, 4, 5, 90,177,233, 63,245,203,238,221,173, 29,174,101, 23, 86, 87,254,118,228,222,184, 70, 8, 35,164, 29, 34,
+ 30, 71, 96,203,230, 40,214,221,225, 84,222,181,107,215, 74, 87,174, 92,169,190,118,237,154,243,101,245,248,241,227,177,103, 15,
+119,107, 83,165, 82, 29,114, 86,254, 46,208, 58, 46, 46,174,248,205, 55,223, 60,128, 38,158,162,168, 71,249,171, 61, 41, 91,104,
+ 72,144, 58,184, 93, 41, 90,183,242, 71,167,224,246,240,243,247,195,181,107,249,176, 88,172, 8,238,216, 28,231, 47,166, 32, 98,
+196, 16,105,202,209,180,122, 7,211, 55,222,152, 78, 31, 15,213,225,145, 71, 58,225,194,197,107, 56,121,242, 34,110,223, 41, 3,
+165, 64, 96,160, 47, 12,134,114, 12, 28,216, 7,197,197, 37,200, 63,249, 59,134, 63, 25, 46, 77, 62,194,157,168, 60,200, 96,173,
+127,251,182,211, 96, 61, 1,107,215,174,245,216, 11,192, 78,247,215,204, 4,236, 98, 59,217, 6,247,191, 78,157, 58,209,206,157,
+ 59, 55, 56, 23,191, 74,165, 34,147, 39, 79,166, 91,183,110, 5,187,177, 82,125, 10,207,190, 21,110,173,242, 71, 68, 68, 72,217,
+205,129,234, 32,177,212,141, 76,199,255, 86, 40, 98,212, 13,121, 71,107,202, 27,178,164, 28, 39, 86, 52,171,166,248,121, 60,156,
+214,127, 77,151,127,131,166, 0, 26, 74, 4, 70,124,222,163, 78, 18,224,141,242,103,145,148,148,132,252,252,124, 0, 64,112,112,
+ 48,245,228,101, 16,208, 10, 8,137, 5, 98,145, 8,191,159,107, 3,129, 80,136,230, 34,189, 45, 14,160, 25,131,252,252,230,120,
+188,143, 21,132, 16,200,159, 53,131, 90, 25,128,248,128,128,194, 22,200,239, 26,134,226,235, 40,208,150, 35, 51, 63,191,206,178,
+ 20,151,104,161,187, 93, 96,151,197,121, 0,170,169,252, 1, 0,123,246,236,193, 83, 79, 61, 37,221,183,111,159,219, 1, 78, 46,
+151,143,202,201,201,113,217, 97, 74, 74, 74,156, 47,183, 92,182,108, 25, 46, 92,184, 48,250, 65,154, 10,112, 82,254,156, 33, 29,
+ 53, 76, 42, 17,222,132,175,111, 75, 72,124,196,232,214,173, 43, 58,119,237,138,210, 82, 13,180,218,114,136,197, 2, 4, 5, 74,
+ 32,244,109,233,118, 48, 21,210,124, 52,111,214, 10,134, 10, 51,206,157,203,194,141,130, 18,220, 44, 40, 71, 69,149, 4,143, 4,
+155, 33,241, 17, 32, 43, 51, 7,143,118,239,142, 27, 55, 75, 81, 97,110,193,105,128,118,118,251,215,117,221,211,233,128,186,100,
+122, 35,139,181,254, 23, 44, 88, 80,235,250,194,133, 11,189,242, 2,184,218,157,176,230,220,113, 99,121, 21, 82, 82, 82,212, 13,
+221,144,103,242,228,201, 84,165, 82, 65, 46,151,195,213,116, 0, 23, 79, 21,171,252, 1, 32, 45, 45,173, 86,153,236,247,221, 26,
+ 61,236, 14,131,141,229,113,217,186,208, 31,147,215,232, 93, 42,254,224, 32,198, 62, 74,113,107,222,113,227,198, 85,243,146, 60,
+253,244,211,213,234,138,119,251, 63, 56,240, 56, 6,160,177, 60, 2,141,137,172, 44, 27,177,200,207,207,247,136, 4, 8,133, 66,
+136, 4, 34,136, 68, 4, 35,135, 3, 6,125, 21,174,100,139, 33, 18,138, 32,180, 8, 49, 52,156, 66, 44, 18, 65, 32, 96, 0, 74,
+160,213, 1, 39, 78, 9, 97,181, 90, 1,220,174, 83,238,169,223,179, 81, 94, 94,119, 6,206,110,237,219, 83,189,153,160,162,162,
+ 4, 22,171,153,243,239, 60,117,234, 84,221,164,195, 96,224,164,104,106,186,254, 93, 49,195,157, 59,119, 58, 63,159,216, 20, 94,
+ 0, 87, 46,126,103,229,111, 31, 0,185, 89,128,193,237,212, 12,115, 29,102,139, 21, 70,147, 25,183,239,104, 33, 18, 75, 80, 85,
+101,130,201,108,129,217,108,133,217, 66, 57,121, 98,196, 34, 61, 36,190,157, 80, 84, 84,130,210, 50, 3,180,186, 10,180,104,213,
+ 31,195, 30,127, 28,105,201,123,209,209,104, 70, 73,105, 9,122,246,236, 14, 31,177, 16,250, 50,237,159, 98,160,176, 71,254, 59,
+230,254,107,120,166,188,138, 5, 88,176, 96, 65, 53,111, 66,205,123, 92, 9,128, 86, 27,229,120, 48, 38, 38, 8, 91,183,110,173,
+214, 95, 89, 3, 33, 55, 55,215,235, 93, 57,229,114, 57,221,186,117,171, 99,155,241,186, 98, 2,106, 42,215,154,158,170,148,148,
+ 20, 53, 27,248, 70, 41,165,199,143, 31,175,118,255,248,241,227,106,119, 78, 15,150, 52,176, 36,192,217,138,175,203,208,119,243,
+219, 48, 41, 34, 17, 91, 0, 76, 89,163,199, 19, 75,202, 27, 68,190,106,206,241,187,139, 9,224,113,239,189, 1,117,121, 0,238,
+171,127,199,149,165,223, 16,235,191,134,197,138,172,172, 44,118, 64,225,212,123, 5, 2, 33,134, 14,177, 66,192, 8,113, 34, 93,
+130,140, 44, 9, 38, 60, 5, 60,243, 52, 48,113, 28, 65,135,118, 98, 72,196, 62,144,136,125,224, 43,241, 65,112, 7, 31, 72,196,
+ 18, 72,220, 44, 3,204,203,189, 78,138,181,183, 72, 93, 3, 73,247,110, 93, 16,208,210, 31, 18,171, 17,229, 6,211,125,239, 20,
+ 71,143, 30, 61,120,244,232,209,106, 10,223,249, 3, 0, 69, 69, 69,152, 56,113, 98,147, 89,249,118,235, 72, 90,243,154,253,216,
+ 35, 75,206, 98, 1,244, 6, 19,244,122, 35, 74, 75,171,112,235,150, 14, 55,110,220, 65, 89, 89, 21,202,203, 77, 40, 47, 55, 66,
+175, 55,161,164,184,196,173,172,170, 42, 51, 42, 43, 45, 48,153,140,104,222, 92,140,206,193, 45,224,231,239, 15, 0, 8,233,222,
+ 21,157, 58,182, 64, 64, 11, 9, 40,181,192,100,182,162,170, 74,255,167, 24, 72,162,163,163,213,139, 22, 45,170, 87,153, 71, 71,
+ 71,115,182, 72,237, 91, 10,215,121,127,205,154, 53,248,230,155,111, 60,222,106,216,105,219, 89,199,135, 85,168,249,249,249,236,
+238,153, 30,105,183,201,147, 39,211,132,132, 4, 56,147, 7,149, 74, 69, 38, 77,154, 84,239,247,102,207,158, 13, 66, 8,216,126,
+ 28, 30, 30, 46, 5,128,161, 67,135,202, 88, 69,206, 90,253,236,125, 74,169,227, 62,135, 95, 91,205,138,119, 69, 28,184,204,160,
+180,110,221, 26,196,137, 37, 52, 84, 30,143, 7, 79,249,187, 58,247,202, 3,240, 32, 89,254,119, 7,120, 11, 4, 2,129,199,223,
+ 27, 62,196,138,182,109,124, 80, 90, 42,132,143,208, 12, 31,177, 0,154, 84, 49, 38,200, 68, 16,139, 68, 40, 45, 21, 33, 57,221,
+ 31, 45, 36, 4, 12,195, 96, 92,148, 17,207, 77,160, 96, 24,138,229,167, 61, 47,167, 92, 46,167, 2, 63, 9,180,162,214,240, 51,
+229,225,114, 62,197, 40,233, 72,206, 91,250, 14, 28, 56, 16,199,142, 29,115,121,207,207,207,143,243, 96,169,211,233, 70, 3,192,
+134, 13, 27, 48, 99,198, 12,199,245,162,162, 34,199,241,140, 25, 51, 80, 88, 88,216, 36,237,153,154,154,170, 33,132,128,157, 39,
+101, 24, 6,172,187,179,158,121,211, 58,145,123,253,134,172, 77, 11,131,218, 71, 44,128,209,100, 69,101, 85, 30,174,231, 21, 65,
+171, 43,133, 86,107, 64,145,182, 2, 69,218, 10,180, 12,234, 10, 32,187, 94, 89,183,238, 80, 20,220,186,131,222,189,187,163, 88,
+167,131, 72,200,160,180, 44, 15,250, 98, 43, 30,123, 84,143,118,109,218,192,207,207, 15, 62, 62,190,184, 89, 80, 6, 34, 8,228,
+ 84, 70,103,151,124, 99,173, 2,104,236, 21, 4,117, 89,235,192,221, 88, 0,174, 80, 40, 20,154,232,232,104,204,159, 63,191,150,
+ 87,129,157,102,240,118,101,193,228,201,147,171, 89,176,236,251, 69, 8,193,139, 47,190,136,132,132, 4,194,149, 4,212,180,252,
+157,239,213,244, 52,212,196,186,117,235, 8, 0,135,149,159,150,150,166,182,247,107,141,221, 27,192,254, 85, 3, 32,169,169,169,
+142,251,245,109,231,154,146,146,162, 30, 62,124,152,236,216, 49,219, 59, 49,123,246,108,156, 62,253,187,140, 85,225,199,143, 31,
+ 87,179,191,127,232,208,161,110, 61,101,235,214,173,195, 87,178, 64, 76, 89,107,176,253,174,133,254,213,238, 79, 89,107,112,212,
+231, 76,153, 8,223, 29, 50,130,199, 67, 64,218, 99, 87, 86, 39,221,171, 22,227,244,233,211,220, 87, 1,220, 11,197,239, 28, 11,
+208, 16,235,191,186, 37, 95, 93,249,219,221, 76,110,167, 2, 90,183, 22,128, 33, 2,180,105, 45, 64,143,238, 20, 55,110, 8,193,
+ 8, 8, 68, 66, 33, 68, 66, 17,254, 56,235,143, 32,127, 17, 4, 2, 1,134,135, 91,224,235,235, 3,171,149, 2,212,226,149,242,
+111,214,174, 51,110,149, 83,232, 47,107, 32, 36, 2, 92,190,145, 75, 46,115, 84,254,246,129, 77,118,253,250,117,245,245,235,215,
+ 93,253, 94, 13,199,114,140, 41, 42, 42, 58,192, 42,121, 0,152, 56,113, 34, 54,108,216,224,120,166,180,180, 20,133,133,133,216,
+181,107, 23,187, 92,240,190,119, 94,251,192,165, 78, 75, 75, 83,179,193, 98,246,107, 30, 43,133,228, 35,169, 26,153, 52, 12, 52,
+191, 20,134, 10, 19,116, 62,149,160,208,161,178,210,140,210,210, 42, 20,222, 49,224,198,205,114, 60, 41,235, 2, 32,185, 94, 89,
+ 21,198,214,200,185,114, 27, 33,221, 30, 65,183,110,157, 80, 84,116, 7,129, 45, 45,232,209, 35, 0,109,219,132, 64,226,235,139,
+226,226,114,156, 60,117, 9,121,249,165,104,223,169,207, 67, 59,128,196, 43,149,148, 16,200, 88, 93,234,172, 84,235, 91,183, 31,
+175, 84, 74,227,215,173,227,228, 5, 88,187,118,173,186, 38, 1, 88,189,122, 53,214,175, 95, 47,115, 39, 47, 62, 62,158,198,196,
+196, 16,133, 34,208,169, 76,212,149, 98,166, 0, 48,105,210, 36, 78,238,127,231, 41,133, 86,173, 18,224,237,180, 1,107,229,219,
+ 9, 0,165,148, 98,248,240,225,178,228,228,228, 58,239,187, 83,216,236,220,122,114,242, 49, 53, 33, 4,132, 16, 12, 24,208, 95,
+182,110,221, 58, 77,237,103,239,146, 12,119,242,152,201, 58,176,242,228,163,186, 86,227, 71,147,215, 92,112,200,227, 2, 62, 6,
+224,225,129, 91, 2,240, 32, 90,252, 44,166, 78,157,218,160,239, 51, 12, 3,129,192,246,233, 29,202, 96, 96, 63, 11,124,196, 18,
+ 27, 1, 16,137, 48, 44, 28,240,241, 1, 68, 2, 31,180,110, 45,129, 64,160,135,197, 98,133,213,234,185,219,222,160, 45,128,164,
+ 83, 47, 92, 73,252, 47,218, 8, 25, 28,205,189,230,241,128,178, 96,193, 2,205,186,117,235,100, 13, 89, 6,200, 46,235,123,227,
+141, 55, 28,215, 88, 75,191,180,180, 20, 6,131, 1, 51,103,206, 4, 0,124,253,245,215, 0,160,110,138,182, 77, 73, 73,209,216,
+173,125, 53, 0, 12, 25, 50,164, 65, 1, 92,157,186,244, 68,250,241,125,104,219,218, 15,126,126,182,110, 95, 85,101, 65,105,153,
+ 17, 90, 93, 5, 58,119,235,131, 31, 55,110,114,219, 38,191,254,186,159,188,248,252, 80,122, 60,237, 60,158, 28,222, 31, 93,186,
+116,129,201, 88,137,129, 3, 30,135,127, 64, 0,174,229,228, 34,255, 70, 49,146, 83, 46, 66, 87, 22,128,189, 27, 54, 61,180, 62,
+211,217, 49, 10,123,251, 19,204, 86, 40, 28,203,194,173, 53,148, 62,195, 16,128, 58, 84, 6,157,173, 80,160,191, 11, 11,150, 16,
+ 80, 56,209,242,152,152, 24,212,244, 2,204,159, 63, 31,132, 16,196,196, 40,212,118,125,142,217, 49, 10,244,239, 95, 91, 94, 76,
+ 76,140,195, 29,239, 78,201,113, 85,254, 53, 49,105,210, 36,140, 30, 61, 90,230, 45, 9,118,158,171, 15, 15, 15,151, 37, 39, 39,
+107,234,186,207, 37, 72,209,190,170,128,178,228, 43, 34, 34, 66,166, 80,196,104,106,146, 14, 39,249,240, 68,222,214,133,205,108,
+167,146,118,119, 61, 29, 11,115, 29,132, 96,223,153,250,199, 62, 87,121, 0,248, 24,128,135,148, 0, 12, 27, 62,228,158,204,249,
+ 52,150,229,239,220,145,188,129, 86, 71,208,161, 29, 3, 66, 24, 16,134,193,254,131,182,249,125, 31, 31, 9,124,196, 62,152,248,
+ 52,129,196, 71, 12, 95, 9,129,182, 72,128,180,147,205, 97,177, 90,208,185,147,103,243,186,114,185,156,222,200,187, 2, 93,250,
+ 30,244,232, 44,194,185,124,239,231,133,103,207,158,173, 65, 3,131,242,228,114,185,236,203, 47,191, 84,179,110,254,162,162,162,
+ 41,225,225,225,229, 7, 14, 28,216,253,220,115,207,141, 45, 42, 42, 34,211,167, 79,223,103,207, 23,208,100,157, 51, 53, 53, 85,
+ 19, 30, 30, 46, 99,143, 27, 34,235,199,141,155,200,244, 87, 95,166,153,151, 46,224, 70,206, 53, 48, 12,129,197, 66, 33,241, 13,
+ 66,104,239,190,216,251, 91, 34,231, 58,189,113,219, 42,211, 22,221, 80, 87, 86,154,209,175,111, 8,130, 59,182, 70,238,245, 91,
+208,157,205, 70, 70,102, 46, 14, 30,250, 3,215,242, 41, 78,164,159,243,170,157, 30,148,228, 63,214, 45,129, 94, 63, 55,240, 83,
+142,242,178,255,131,181,107,215, 58, 8,192,218,181,107,129,156, 13,181,158,117, 37,143, 43, 40,165,164, 33,253, 56, 38, 38,166,
+ 65,125,207, 73,201,107,188,185,239,202,171,224,252, 93, 87,242, 60,106,231,107,219,144,176,246, 21,219,216, 48,234,145,106,202,
+ 31, 0,228,227,159,176, 29,232, 78,187, 37, 0,124, 30,128, 7, 7,235, 87, 45,174, 53, 13,224, 17, 1,120,192, 3, 62, 26, 92,
+184,244, 83, 62,144,136,197,152, 56,158,128, 33, 4, 67, 6,155,113,246,156, 47, 24, 98,155,243, 47, 46,102,208,177,189, 0, 12,
+ 17,227,204, 89, 49, 36, 62,128,209,100,196,181, 92, 95,143,148,127,118,230,239, 8, 31,253, 12,132,173,195,145,157,153, 6, 97,
+ 65, 2, 2, 90, 4,209,146, 82,109,147, 84,176, 74,165,210,200,229,114,217,224,193,131,213,177,177,177,232,219,183,111,161, 78,
+167,195,224,193,131,101, 58,157, 14,243,230,205, 83,219,149,191,166,169, 27,185,161,138,191, 38, 9, 0,128,136, 17, 67,164, 29,
+218,119, 80,251,251,251,227,199,141,155,200,185,243,217,158, 13,232,201,105, 26, 0,196,130,214,244, 66, 70, 42, 58,180,107, 6,
+137, 68,132,242,114, 35,242,111,150,130, 8, 59,227, 68,122, 50, 31, 45,197, 5,167,222, 4,186,255, 31,170, 45, 47, 60,185,168,
+ 73,139, 20, 19, 19,228,148,182,182,113, 20,154, 59,165,236,137,210,110,104, 62, 3, 87,227,188, 60,194,199,246, 91, 43,110,218,
+ 62, 60, 30, 90, 12, 24, 48,192, 17,240,183,126,213,226, 90,247,220, 18,128,198,206,199,127,191,243,251,123,198, 34, 8,116, 58,
+ 2,191,246, 4,173,130, 8, 6, 15, 50, 65, 34, 22,192, 71,108, 66,171, 32,137,125, 16, 32, 24, 58,216,130,180, 83, 34,155,183,
+128, 35, 49,146,203,229,180, 79,207, 22,120,115,254, 71,168, 16,119,194,207,137,249,232, 30, 58, 4, 0,208,236,196, 46,100,230,
+130,150,151, 53, 29, 9, 0, 64,114,114,114,164,171, 86,173, 82, 59,123, 7, 0,144,166,180,252,239, 53,236,201,126, 26, 92,239,
+135,143,156, 34,211, 95,125,153,222, 46,186,141,138, 2, 3, 36,146, 86,232,212,237,113, 78, 83, 9, 15, 59,108,233,176, 27,233,
+103,230,108,128, 99, 69, 64,206,198, 38,255,109,238,130,251,254,108, 24,251,204,148, 70,181,220,249, 24,128, 7,139, 4,212,165,
+252,221,122, 0,254, 10,160,176, 69,245, 19,134,130,130, 34,168, 37, 69,210, 81, 33, 36, 98, 17,124,196, 66, 60, 59,158,130, 82,
+ 43, 2, 91,153, 97,182, 16, 88,173, 22,251,224,231, 30,143,119, 45,199,132, 23,229, 40, 23,246, 64,219,102,254,120,249,133, 32,
+108,218,126,214, 65, 2, 76,150,159,113,246, 82,211,174, 19,103,137,128,211, 57,255,246,120,225, 85,248, 51,130, 76,214, 17,186,
+ 53,176,182,102, 80, 5,121, 37,111,189,110, 37,162, 3, 23,215,190,113,114, 81,147, 91,253,127,101, 28,248,195,212,152,125,152,
+216, 8, 34,117, 34,139,252,180, 64, 83,145, 0,183,141,229,237, 62,194, 60,120,240,224,193,131, 7,143,135, 23,124,162,103, 30,
+ 60,120,240,224,193,131, 39, 0, 60,120,240,224,193,131, 7, 15,158, 0,240,224,193,131, 7, 15, 30, 60,120, 2,192,131, 7, 15,
+ 30, 60,120,240,248,115,160,218, 42,128,211,167, 79,123, 29, 13,234, 42,152,176,177,229, 77,155, 25,227,246,123,122,109,129,227,
+216, 63,168,189,227,248,167,239,227,107, 61,219, 70,246,154, 91,121, 7,214,220,205,152, 55,102,225,151,142,227,219,234,111,225,
+ 77,249,234,130,183,229,171, 11,174,202,247,252,116,133,219,239,165,171,119,163,107,215,174,184,122,245, 42, 6,203, 38, 56,174,
+255,242,163,242,158,215,159,187,254, 18, 23, 28, 44,125, 51, 63,223, 57, 51, 33,185,159,253,175,166,188, 9, 19, 38, 72,247,236,
+217, 83, 45, 83,226,248,241,227,101,187,119,239,214, 52,197,251,241, 32,203,107,136,172, 63,115,253, 69, 70, 70,190,212,175, 95,
+191, 77,103,207,158,125, 49, 41, 41,233,231, 70, 40, 31,125, 80,222, 15, 94, 94,211,202,243,152, 0,212,196, 87, 95,125, 37,173,
+172,172, 4, 17,136, 64, 8,129,197,108,130, 88, 36,196,188,121,243, 52, 13,101, 30, 95,125,245,149, 20, 0,230,206,157,219, 32,
+ 89,122,109, 1,252,131,218, 59, 20,127,251,206, 93, 1, 0, 5,215,175,122, 37,239,192,154, 55, 48,102,225,151, 14,197,245,213,
+142, 52, 0,192,220,103,135,252, 41, 25, 96,186,122, 55, 6,203, 38, 32, 93,189,219,166,212, 38, 77, 3, 0, 92,189,218,244,245,
+ 23, 10, 72, 51, 1,117, 40, 32,203, 4,212,111,230,231, 35, 45,246, 29, 0,192,144, 85,255,108,210,122,123,233,165,151,232,230,
+205,155, 81, 89, 89, 89,237,186, 68, 34, 81,191,244,210, 75,248,223,255,254,247,160, 46, 15, 28,209,179, 91,240, 70,106,177, 24,
+ 50,115, 11,150, 0,216,197,219, 65,117,227,243,207, 63, 31,245,251,239,191,183,184,113,227, 70,251,160,160,160,255,207,222,149,
+135, 55, 81,117,239,119,146, 52, 75,247,149,178,111,133,202, 42,133, 34, 34,107, 34, 20,196, 2,202, 82,180, 84, 63, 17,161, 1,
+ 21, 5, 68,145,126,254, 62,253, 92, 16, 20, 41,202, 26, 16,133, 15,202, 86, 16,101, 41, 20, 10, 41,101,211, 74,129,178, 83, 74,
+129, 46, 44,221,183,236,201,220,223, 31,205,196,180,164,205, 36, 13,139, 56,239,243,204,147,204,146,147,153, 59,247,222,247,156,
+115,207, 61,215, 55, 60, 60,188, 96,206,156, 57, 27,156,149, 55,120,240,224, 33, 19, 39, 78, 60,178,105,211,166, 41, 0,124, 94,
+125,115,218,100, 0,244,249,243,231,255,165, 80, 40,126,149,203,229,180,131, 34,153,228,202,196, 5,253, 85, 93, 18,113, 85, 29,
+ 38, 15, 64, 38, 7, 87,123, 0,172,241,237,162,239,164, 62,173,186, 43, 7,119,239, 4,119,145, 27, 8, 33, 48,153, 8, 46, 92,
+187,133,239,226,191,151, 73, 68,110,120,251,237,183,157, 34,239,132,245,243,164, 93, 59,166, 41, 47,100,181,151, 57,123,227, 12,
+225, 75,124, 2,160, 42,189,107, 33,254,134, 60, 2,108, 44,213, 62, 49, 31,227, 96,252,187,150,134, 84,223,117, 13,205,177,172,
+251,159, 66,161,176,166, 21, 16, 2,154,174,105,223, 38,147,201,114,255, 60,190, 27,107, 43, 26, 0,154, 53,169, 73,213,169,175,
+ 44,135,206,104, 4, 0, 84, 27,107,228,181, 27,246, 22, 58,116,237,201,138,248, 1,160, 71,191, 33, 56,165,220,107, 33,254,250,
+174,123,152,229,199,116, 26, 89, 0,134,123,120, 32, 89,165, 82, 50,196, 15, 0, 87, 15, 28,108,168,211,106, 16,223,108,252, 74,
+154, 81,252, 39, 10,114, 51,209,177, 77, 95,252,252,254,102,135,235,112,100,100,228, 75, 91,183,110,101,200,223, 8, 64, 11,192,
+ 29, 0,173,213,106, 5, 18,137, 4,145,145,145, 82, 91,158,128, 71,140,224,103,194,186,239, 75,222,188,202, 83, 85,112, 25, 3,
+162,166,111,186, 85,102,248, 23,128, 95, 31,183,142, 41, 42, 42,138, 56,187, 0, 79, 29, 98,116, 10,203,150, 45,147,166,167,167,
+ 43,215,175,255, 43, 49, 81,113,113, 49,178,178,178, 48,114,228,200,255, 73,165, 82,217,156, 57,115, 88,189, 95,133, 66,193,219,
+180,105,211,127, 1, 60, 55, 96,248,203,146, 77,155, 54, 5,191,250,230, 52, 47, 0, 38, 0,205,204,151, 61, 5,128, 55,120,240,
+224, 65,192,253, 75,157,215, 71,170,125, 98, 62, 70,122,194, 2, 82, 95,123,115,160,125,144,180,147,233,224,243, 5, 48,153,140,
+168,168,170,198,196,113, 47,145,170,170,170,198, 18, 54,113,229,123,225, 96, 31,182,150,253,181,242, 20,216, 87, 0, 22, 47, 89,
+ 42,149,190, 56, 94,217,170,137, 15,220,197, 2,208, 52, 13, 19, 13, 8,248, 20,252,125, 58,161,107,199,214,202,148,228,189,178,
+ 21, 43, 86, 72, 29, 85, 2,150, 46, 93, 42,237, 28,114, 92,217,163,211, 13,240,121, 38,229,210,101,203,100, 51,222,125,215, 33,
+ 25,170,210,187,144,248, 4,192,199,219, 11, 0, 44,159,182,174,107,218,170,173, 93,111,192,193,248,119,209, 39,230, 99,188,241,
+202, 88, 0,176,124,218,186,110,249,174,116,135,180,107, 62,159,143,150, 45, 91,130,207,231, 67,175,215, 67,165, 82,193,100, 50,
+161,172,172,204,169,151,235, 41,224,227,167, 37, 59, 33,242, 1,238,221, 4,254,172, 46, 64,209,221,108,108,136,159,231,144,213,
+223,163,223, 16,180,108, 94, 51, 68,210,210, 6,249,183,109,219,214, 50, 28, 0, 0,249,249,249, 46, 41, 63,150,201, 85,201,112,
+ 15, 15,124,241,238, 59, 0,128, 47,172,136,127, 99, 86, 86,237,206,196,129,108,173, 19,231, 13,148,150,245, 73, 81,126,220,250,
+ 53,232,232,161, 16,209, 4, 17, 47,153,240,243,183,219,100, 7,151,131,109,103, 46,152, 54,109,218,175, 26,141, 6,235,214,173,
+211, 78,154, 52, 73, 12,192, 19, 0,189,110,221, 58,253,164, 73,147, 4, 26,141, 6, 98,177, 88,217,216,142,110,248,240,225,210,
+ 3, 7, 14, 40,205, 11,182, 52, 26,158, 66,222,127,150,126,241,145,196,247,210,102, 72,174, 30,198,103,207,251,121,189,183,187,
+232,243, 42, 61,121,172, 20, 0,102, 9,222,178,178, 8,226,239,159,226,240,179, 63,251,236,179,210, 63,254,248,195,105,178, 89,
+188,120,177,116,251,246,237,202,170,170, 42,155,231,239,220,185,131,237,219,183, 43,223,124,243, 77,217,207, 63,255,156,106,167,
+190, 80,155, 54,109,218, 48, 96,248,203, 19,178,206,156, 16,180,108,222,212,248,234,155,211,106,245,187,135,247,254,130,238,221,
+187,119,218,180,105,211,136,238,221,187,239, 2,128, 99,199,142, 53,216, 62,216,180,183,154,246, 65, 1,118, 18,241,244,236,217,
+147,236, 75, 62,136, 51, 23, 46, 89,142,105,181, 58,124,179,116,117,245,244, 73,209, 28, 97, 63,193,184, 47, 8,112,209,162, 69,
+210, 1,195,198, 40, 59,181, 14,128,200,141, 7,154,166,113,247,238, 93,156,207, 60, 3,189,145, 6, 77, 19, 4,248,184, 99,216,
+136,145, 74,141,206,232,240, 31,138,220, 10, 17,210,250, 46,192,167,208,165, 99, 30, 68,130,123, 14, 91,254,214,228, 95, 23, 21,
+149, 85,184,155,119, 19, 18,159,128,122,189, 2, 13,145, 87, 93,172,223,250, 11,222, 25,221, 7,125, 98, 62, 70, 3, 90,246,125,
+ 16, 10,133,224,243,249,240,246,246, 70, 78, 78, 14,202,202,202,106, 20, 41, 39,201,191, 89,147, 96,120, 10,248, 24, 51,227, 75,
+140,152,216, 15,123, 46, 20,224,174, 6,141, 38,255,186,200,191,125, 23, 23, 79, 29, 71,144,159,119, 13,249, 11,248, 46, 41,191,
+ 23,198,189, 1, 0,240, 19,184, 57, 68,254, 0,240,127,203,150,227,255,150, 45,183,144,127,178, 74,133, 15,135,141,172, 57, 25,
+ 36,100,245,220,253,226,218, 73,167,126,240,156,242,205, 54,111,195,141,231, 9, 15,184,131, 7, 62, 90, 4,247,199,187, 95,204,
+ 86,206,221,221,137,149, 26,145,154,154,106, 0,128,245,235,215,171, 1,136,153,101,148,215,173, 91, 71, 3,112,183, 94, 86, 57,
+ 58, 58,218,169,113,185,248,248,120,169, 35,199, 89, 96, 64,239,158, 61,212,137,191,236,148,247,236, 22,202, 87, 93, 58,132,155,
+133, 85,184, 83,174, 6, 77,136, 83,129,192,132, 16, 82, 90, 58,148, 12, 26, 52,200,165,137,196,172,200, 31,254,254, 41, 78,201,
+ 72, 79, 79, 87, 2,160, 40,138,194,179,207, 62,235,112,153,165,164,164,220, 71,254,167, 78,157,194,196,137, 19, 45,251, 6,131,
+ 1, 87,174, 92, 81,198,199,199, 55,232,197,220,180,105,211,187, 3,134,191, 60,242,171,184, 89,130,196,196, 68,252,184,116,145,
+192,236, 49,178,144,127, 98, 98, 34,150, 45, 91,134,238,221,187,239,178,215,222,234,146,127,125,237,109, 68,127,179, 23,208,203,
+195,174,188,239,150,174,180,144,127, 97,113, 9, 10,139, 75, 80, 81, 85, 13, 55, 55,129,231,202,117,155,181,112,213,130, 8, 28,
+ 30, 42,194,194,194,238,219, 26, 84, 0, 86,172, 88, 65, 2,218, 62,141,182, 77,125,161, 53,152, 64, 81, 64,114,242,126,252,111,
+253, 58,156,203,204,196,135,179,103,130,207,231,129, 54,209,240,118, 23,161,237,211, 3,148, 75,150, 44, 97,221,192,150, 45, 91,
+ 38,237,218,241,150,210,219, 83,141,159,214, 23,130, 71, 17,244,233,126, 85,185,108,217, 50,135, 26,169, 45,242,103,136, 95, 83,
+ 81, 82, 75, 65,168,168,172,178, 43,207, 86, 99, 98, 26, 82,122,194,130, 90, 4,183,126,235, 47,172,238, 49, 36, 36, 4, 1, 1,
+ 1,168,172,172,132, 80, 40, 4,143,199,131, 70,163, 65, 89, 89, 25,248,252,154, 70,238,200, 98, 75, 59,126,221,137,153, 75, 14,
+ 96,231,210, 79,208,172, 73, 48,220, 61,252,145,103, 42,192,134,248,121,240, 52,119, 26,124,150,242,108,145, 63, 67,252, 21,183,
+175,163, 83,203, 38,168, 82,107, 33,114, 23, 1, 38,147,221,120, 0,123,229, 55,111,205, 30, 92, 60,125, 18,221,218,119, 65,133,
+201,190,210,200,144,255,213, 3, 7,241,127,203,150, 91,142, 39,171, 84, 72, 86,169,144, 35,255, 47, 14, 92, 58,135,174,125,218,
+ 3, 37,246,151,102, 30, 60,167,189,116,250,123, 67,148, 65, 30,157,161, 33, 85,128,174, 16, 66, 93, 41,116,166, 42,104,105, 13,
+104,161, 39, 90, 12,236,141,136,233,109,136, 61,107,142, 25,247,151,203,229,238,114,185, 28,168, 25, 2,128, 92, 46,135,121,223,
+108, 65,105,177,101,203, 22,135, 27,237,172, 89,179,164,179,103,207, 86,118,233,210,133, 80, 20,165, 4,128,215, 94,123,141,180,
+105,211,134,124,242,201, 39, 78, 45,205,236, 37,226,173, 91,254,241,155,146,225, 45,116,252, 19, 87,238, 98,207, 77, 30, 62,222,
+119, 79,247,223,212,234, 10,149, 1,111, 56, 35,179,172, 44,226, 65, 90,254,240,247, 79, 65, 76, 76,140,195, 67,132,214,132, 79,
+ 8,161,152,229,164,217,226,141, 55,222,144,222,187,199,206, 40,209,235,245, 56,127,254,252,225,134,234, 11, 0,105,203,230, 77,
+133, 81, 81, 81, 0,128,140,140, 12, 28,222,251,139, 56,255,246, 93,154, 33,127,243,179, 91,218,219,249,243,231,227, 27,211,222,
+190,153, 52, 18, 23,174,231,161,105,251,102,128, 74,205,250,217, 11,139, 75, 96, 48, 24,205, 10,142, 17, 6,131, 17,121,183,110,
+138, 27,249, 90, 41, 59,251, 28, 30, 33,106,185,162,116, 58, 29,122,118,234,164,116,151,184,129,166, 9, 76, 52,112,252,232, 49,
+252,247,139, 47, 65, 19,224, 90,118, 54,206,101,158, 69,183,110, 61,192,231, 83,120,170,125, 75,228,156,102,239, 5, 16, 10, 10,
+ 17,218,246, 54, 32,160,144,119,199, 0, 8, 40, 60,221,233, 22,210,207, 23, 58,253, 0,214,238,125, 91,158, 1, 77, 69, 73,173,
+217, 0,246, 96,237,222,183,165,105,167, 39, 44, 64,196,172,101, 54,163,216,173, 97, 52, 26,225,238,238, 14, 30,143, 7, 63, 63,
+ 63,168,213,106,168, 84, 53,203, 0, 7, 5, 5,161,164,164,196,161, 28,217,218, 50,160,143, 68,130, 15,151, 30, 69, 68, 15,224,
+214, 25,224, 79,243,185, 15,151, 30,197, 15,179,100, 48,209, 38,135,203,239,226,169,227,150,239, 67,194, 59, 65,224,197, 67,114,
+234, 37,244,236,212, 10,222,158, 34,172,223,158,130,222,178, 72,228,219,152, 5, 96,175,252,118, 93, 34,192, 29, 96,244, 16, 10,
+107,246,228, 32,192,175, 29,198,246,167, 88,149, 31,227,238, 79, 86,253,181,116, 50,249, 44, 30,104, 81, 1,106,234,167, 32,255,
+253, 2,224,105, 64,165,207,103, 58,149,122, 11, 51,100,156,167,178,141,111, 56, 42, 77,213,208,149,101, 99, 67,238, 38, 28, 27,
+ 93,134, 46, 83,100, 24, 54,195, 19, 18,191,167, 32, 22,248, 65, 48,186, 2, 83,140, 83,200,143,107,126,180,217, 73,201,229,114,
+194, 40,109, 60, 30, 15,132, 16,189, 89,137,214,242,120, 60, 53, 33,196, 31, 0,141, 70, 76,175,141,143,143, 79, 29, 62,124,184,
+172,164,164, 68,153,156,156, 92,163,248, 36, 39,163,115,231,206,232,212,169,147,140, 57,230, 8,170,116,244,123,147,255,239,135,
+221,223, 70, 54,229, 17,109, 5,166, 38,100, 25,140, 6,195, 50,157, 9,243, 1, 56,181, 24,197,203, 47,235, 31, 56,249, 39, 36,
+ 36,164, 58, 99,253, 91, 15,153, 80, 20,133, 62,125,250, 72,217,174, 42,105, 50,153, 28, 82, 24,110,220,184, 1,133, 66, 65,173,
+ 92,185,210,214,105, 49,128, 46, 0, 4,207, 71,142, 45,207,201,201,241,205,200,200, 64, 98, 98, 34,194,115,114,120, 25, 25, 25,
+ 0,128,240,240,112,188, 48,184, 55,188, 61, 69, 88,246,243,206,194,137, 19, 39,198,173, 92,185,114,150,163,237,237,206,175, 11,
+224,213, 85, 12,207,142, 51,177,109,193, 20,244,232,214, 20, 79,141,252,210,110,251,168,168,172,130, 88, 44, 2, 0,184,185, 9,
+160, 86,107, 93,205, 51, 28,233, 63, 2,176, 89, 12,168, 86, 71, 69,211, 52,220, 69, 66,232,141, 4, 52, 1,120, 20,240,233,231,
+ 95,194, 68, 3,213,213,213,184,123,247, 14,130,131,155,130, 16, 26, 70,163, 9, 98, 55, 1,248,110,236, 92,176,203,151, 47,151,
+118,108,155,175, 12,244,171,172,169, 14,230,141,162, 8,122,117,189,166,100,102, 5, 56, 2,198,186,103,220,253,117,201,159,141,
+245, 95, 87,139,102,136,127,249,174,244,251,200,159,173,245, 15,212, 4, 12,137, 68, 34,248,248,248, 88, 92,134, 76,224,159,143,
+143, 15,154, 54,109, 10,163,145,189,242,244,115,202, 17,248,180, 5,164,161, 53,251, 89,198, 26,247, 63, 80,115,236,147, 47,149,
+ 40,215, 59, 54, 36,147,127,187, 38, 88,177,117, 19,127,120,249,120, 64,224,205,135,182, 88, 3,240,120,104,214,166, 37,142,103,
+222,116,170,252,222,248,224, 43, 12,234,251, 60, 4,119,129,234, 96,192,157,199, 67,223,182,237, 32, 31, 29,204, 74, 78,221,177,
+254,141,175, 76,193,152,151, 7, 2, 29,180,192, 57, 1,224, 41, 0, 70,133,163,229,170, 53,236,188, 49, 45,252,161,215,151,130,
+210,149, 96, 67,238, 38,156,156,228,131, 65, 99, 38, 97, 64,147, 23,100, 23, 14, 24, 97,164, 85,112,211,171, 96,236, 68,163,232,
+ 30,187,160, 81,179,242,166,157, 52,105, 18, 15, 64, 25, 49,175, 16,101,222,111, 20,146,147,147, 83, 59,119,238, 44,115,119,119,
+ 71, 96, 96, 32,220,221,221,145,150,150, 70, 37, 39, 39,167, 58, 33,174,233,200,145, 35,215, 44, 95,253, 19,239,211,212,106,122,
+251,137,108,232,244, 6,149,214,132, 57,142,144,127, 93,151,127, 90, 90, 26,197,108,143, 11,249,219,114,247, 59,234, 5,168,174,
+174,182,124, 63,117,234,148,101, 3,128,217,179,103,215,218,183,186, 94, 84,143,184,230, 0,218,154,149, 66,247, 23,198,189,166,
+181,246, 4, 48,150,255,115,253,251, 91,183,183, 61,114,185, 92,235, 72,123,139, 29, 53, 8, 79,135,119,130, 87, 15, 47, 20, 28,
+202, 5,196, 34,140,155,241, 47,244,121,253, 7, 86,207,108, 52,154, 80,112,231,158,145,177,252, 25,228,221,186,217,216, 87, 75,
+234,217, 56, 60, 6, 10, 1,108, 89, 42,196,220,185,209, 4, 48,209, 53, 74, 0, 69, 1,191,236,216,142, 49, 99,199, 35, 48,168,
+137,165, 3, 36, 14,188, 75, 62,175, 16, 93, 59,228, 89,246,159,238,230,110,209, 13,123,117,201, 1,159,231,184, 23,160,174,187,
+223,214,121, 71,172,255,186,238,126, 91,231,173,231,178, 55,132,202,202, 74, 84, 85, 85, 65,167,211,129,166,105, 20, 21, 21, 89,
+220,255,106,181, 26,213,213,213, 14, 13, 1,236, 92,250, 9, 82, 47, 0, 21, 55, 1,131, 6,248, 97,174,204,226,254, 63,125, 6,
+ 56,123,231, 56,248, 14,150, 95,197,237,235,240,247,241, 64,128,191, 7,158, 10,237,140,156, 27, 69,200, 42, 40, 65,235, 0, 31,
+232,238, 21, 34,251, 90,118,173, 92, 0,108,202,175,159,244, 37, 12,144, 69, 99,231,238,109, 80,166,109,195,166,197, 31, 96,220,
+ 7,243,113,206, 0, 20,149, 20,178, 42, 63,235,177,254, 55,251, 61,139,152, 46,109,176,109,231, 97,156, 59,119, 19,139,207,103,
+ 96, 75,196,191,128,181, 39, 80, 80, 80,196,202,186,104,169, 21,193,164, 47,134, 94, 95, 19, 89, 29,220,162, 21, 58,117,238, 44,
+171,148,212,196, 98,104,104, 53,120, 58, 21, 36, 42, 62,238,221,105, 88, 1, 96,222,153, 86,171,133, 86,171, 21, 3,208, 3,240,
+210,106,181,222,117,167, 4, 54,194, 11, 32, 77, 75, 75, 83,118,238,220, 25,175,189,246,154,172,184,184, 24, 99,199,142,117,164,
+227, 28, 32, 20, 10,171, 61, 61, 61,141, 17, 17, 17,119,230,206,157,219, 60, 46, 46, 46,231,207, 51,231, 94,220,114, 81,119,197,
+ 64,195,225,245, 88, 31,132,203,223,149,228, 95,215,250,103, 20, 22,230,157,177,141, 5,112,115,251, 43, 70,101,241,226,197,150,
+205,214, 62, 96,153,225, 83,223,187, 17,154, 55, 30, 0, 65,197,237,235, 54,221,233, 76,123, 59,115,250,204,141,137, 19, 39,198,
+ 58,210,222, 6, 62,243, 20,134,246, 15,197, 87,159, 47,194,119, 75,146,240,159,141,135, 49,237,249,222,184,251, 91, 18, 42,202,
+ 42,217,180, 15, 42,106,244, 11, 48, 24,140,103, 12, 6,163,209, 90, 1, 0,128,249,159,206,107,140, 5,207, 89,254,143, 16,182,
+198,254,235, 42, 1,181, 20, 0, 30,143,135,138,106, 53,248, 60, 10, 70,163, 9, 52, 33, 48,210, 53, 65,164,153,103,207,224,249,
+ 33,195,107,220,100,132,128,207,227,163, 74,173,135, 81,175,179,111,253,175, 88, 33,109,215,226,142, 50,200,191,194,162,101,244,
+235,227,105,142,209,165, 64, 81, 4, 61, 59,103, 43,151,175, 88,193,218, 11,192, 88,247, 13, 5, 3, 58,101,189, 54, 16, 92,227,
+ 8,252,252,252, 80, 84, 84, 4,145, 72,132,170,170, 42, 4, 5, 5, 89,130, 2,181, 90, 45,202,203,203, 29, 82, 0, 98,191,218,
+130, 31,230,202,224,211, 22, 72,189, 0,188,183, 80, 9, 79, 1, 31, 99,223,255, 26,249,244, 93, 36, 44,254, 8,124, 30,123,121,
+140,245, 31, 30, 30,138,160,246,109,209, 36, 40, 16, 66, 30, 5, 35, 69, 80,164,210,160,172, 74,235, 84,249,125,183,224, 87,188,
+220,185, 29,188,189, 3,224, 30,212, 28,134,210, 50,156,217,179, 25,229,165,185, 78, 85,226,159, 22,188, 11,204, 26, 10,129, 81,
+143,182, 42,160,144, 95,137, 31,238,252, 9, 8,189, 89,203, 56,189,251,119, 89, 49, 79,131, 92,161, 26,189, 59,200,208,229, 95,
+158,200,241, 75, 85, 6, 5,157, 81,182,234,155,131, 10, 94, 21,116, 68, 3,245, 70, 26, 98, 79, 47, 54,150,191,117, 7,207,204,
+ 2, 16,186,170,225,238,223,191, 31, 0, 16, 19, 19, 35,139,143,143, 79, 29, 51,102,140,197, 98,100, 67,254, 65, 65, 65,251,214,
+172, 89,227,161, 80, 40,248,179,102,205,194,204,153, 51,201,137, 19, 39,250, 2, 72,214, 24,209, 25,192, 31,142,222,147, 92,238,
+ 87,175,219,223,217,128, 64, 87,146,127, 93,130,183, 86, 88, 8, 33,148, 57, 48,208,126,187,200,207, 63,193,124,223,180,105,147,
+101,171,123,140,129,191,191, 63,228,114,121,125,157, 96, 62,128,114, 0,188,252,219,119,113,242,228, 73,203,152,127,120,120, 56,
+128,154,229,183,183,238, 74, 66, 89,149, 86, 13, 96,190, 92, 46, 55, 57,210,222,126,219,249, 25,134,207,157,129, 23, 95, 28,130,
+ 64, 17, 31, 85, 20, 65,114, 86, 30, 78, 94, 40,112,136,168,167, 79,138,126, 38, 39, 59, 91,144,119,235, 38,152,205, 76,254,224,
+172,246,191, 39,241,215, 61,102, 11,181, 98, 0, 68, 34, 17,174, 93, 58, 39,107,219,220, 95, 41,113, 19,192,100,162, 65, 81, 20,
+ 40, 10,136,149,191, 3, 66,104,152,204,249, 0,212, 90, 45, 46,103,229, 64, 40,180, 27,213, 13,163,161, 20, 61,187,220,176,238,
+ 49,240,246,172, 27,216,177,177,163,165,106,245,238,118, 29,191,103,118,118,216,250,183, 69,252,154,138, 18,197, 84, 3, 55, 0,
+ 0, 32, 0, 73, 68, 65, 84, 0,112,202,250,183,213,208,210, 19, 22, 0, 0,107,235, 31,168,153,231,223,180,105, 83,232,116, 58,
+220,187,119, 15, 38,147, 9,129,129,129, 40, 41, 41, 65, 96, 96,160,185, 92,217, 19,118,209,221,108,124,242,165, 18, 21, 55,129,
+111, 63, 24,136,106,163, 9,179, 23, 38,226,251,185, 81,248, 96,241, 30, 8, 40, 10, 14,240, 63, 42,110, 95, 71,179, 64, 95,184,
+193, 13, 38, 80,184,115,227, 34,110, 21, 86, 32, 36,200, 31,191,157, 62,129,203,151,224,176,245, 63,110,242,108,184,249, 3, 60,
+ 62,176, 46,233, 6,118,172,248, 16,147, 23, 40, 48,123, 84, 15,188, 51,164,141, 67,229,151,172, 82,225,187,209, 19,128,114, 49,
+ 64,185, 1,223, 45,194,248, 63,143,226,192,144,233,160,190,158, 1,234,247,143, 88, 91, 24,103,239, 4,224, 89, 77, 5,170, 37,
+124,168,197, 98,132,140,115,131,142,104, 80,193,115,131, 17,161, 32, 38, 53, 12,197,119,112,124,105, 5, 98, 38,134, 32, 85,169,
+124,232,141, 54, 54, 54,150, 0,192,234,213,171, 25, 87, 63, 53,107, 86,205, 48,240,198,141, 27,217,190,217,254,205,155, 55,223,
+255,245,215, 95,123, 92,187,118, 13,110,110,110,240,246,246,198,185,115,231, 12, 0,138, 26,115,127, 13,205,201,119,198, 59,224,
+ 74,242,175,107,253,215, 16,243,253,211, 7,205,211, 3, 83,237,220,215,181,173, 91,183,246, 99, 59, 60, 39, 22,139, 39,215,175,
+ 52,201,171, 6, 15, 30,124, 3, 64,120,214,153, 19,176, 30,243,127,123,242, 4,236,111,223, 30,137,137,137,200,200,200,192,190,
+246,237,221, 39, 78,156,248,243,145, 35, 71, 88,183,183, 87,134, 62, 11, 31,218, 15,106,184, 97, 71,252, 12,172,216,115, 22, 31,
+190, 48, 0,147, 22,111,194,248,249, 27, 28,181,192,169,249,159,206,179,149, 8,136, 88, 41, 1,156, 69,255,132,161,150, 7,224,
+237,183,223,166,202,239,100,227,122, 94, 9, 4,110,124, 24, 77, 52, 12, 70, 19, 78,159,206,192,255,254,247, 51,244, 38, 2,131,
+137,134, 80,192, 67, 97, 89, 53, 10, 46,159,148,205,156, 57,179,193, 6,181, 98,197, 10,105,231,144, 91,127, 89,255,230,122,181,
+ 99, 99,104, 77,125,226, 17,128, 71,192,227,209,232,219,227,178,114, 5, 11, 47,128, 45,235,223,122, 22,128,135,127, 83,135,200,
+223,150,245,111, 29, 85, 27, 49,107,153, 67,228, 85,211, 41,150,161,186,186, 26,110,110,110, 22,235,159,166,105,203,167,163, 10,
+192,134,248,121, 56, 93,112, 4,158, 77,107,130,254,188, 4,124, 20,221,205,134,183,200, 13,229,165,249,224,243, 40, 8,120,236,
+134,159, 25,235,191,149,191, 23, 46,229,220,128, 81,175,135, 72, 32, 68,117,181, 22,191, 41, 79,160,183, 44,210, 33,242,103,202,
+239,165,119,191, 64,194, 15,223, 67, 77, 3,173, 66, 90,226,194,197,223, 49,123, 84, 15,167,202, 15, 0,102,135,244,198,238,107,
+135,129, 10, 35, 32, 14,196,193,244, 75,160,190,158,193,116, 76,172, 11,239,200,162,156,212,227, 7,211, 1,125, 21,170,169, 42,
+148,241,170, 81, 33, 48,192, 96,170,132, 72,171,134,248,246, 13,108,137,187,134,182, 97,161,168, 47, 0,176, 46, 36, 18,137, 53,
+ 9, 64, 44, 22,219, 60,199, 22,107,214,172,193,154, 53,107, 26,213,152,189,188,188,222,203,206,206,246,240,246,246,134, 68, 34,
+129,191,191, 63,138,138,138, 64, 81,148,218,149,157, 6, 99,241, 71, 69, 69, 17,160, 38, 32,208,145,160, 64, 87,147,255,179,207,
+ 62, 43,181, 23, 80,203, 54, 22,192,195,195, 35, 86, 32, 16, 92,175,123,124,241,226,197,181, 44,127, 0,104,211,166, 13,134, 14,
+ 29,186,206,158,253,147,127,251,110,173,104,255, 79,254,111, 22, 68, 2, 33,130,131,131,193,196, 4,152,207,123, 56,210,222,166,
+ 72,159,198,204, 69,223,163,234, 94, 33,130,188,155,224,226,165, 92, 76, 90,188,201,225,246, 81,135,240,169, 58,191,183,150,195,
+121, 2,254, 6, 56,123,246,108,131,201,128,234,245, 0, 0,192,156, 57,115, 82,191, 93, 68,201, 8, 25,173,108,219, 60, 0, 94,
+238, 34,116,233, 22,134, 46, 93,123, 64,192, 3,170, 53, 38,228,222, 41, 69,122,234, 94,153,167,135,187,221, 63, 80,169,213, 8,
+109,115, 7, 90,157,216,156,181,165,166, 26, 73,196, 90, 16, 2,148,150,139, 0, 10,240,242, 48,162,123,232, 77, 28, 61,101, 63,
+139,157,181,245,111,109,241, 75,124, 2,224, 70, 12,128,241,175,254,206, 36,176,127,143,214,214,191,181,197,207, 28,203,190,120,
+198,114, 45,155, 44,123,214, 74, 0, 0, 52,109, 90,163,140,148,150,150,194,219,219,219,226,254,119, 68, 1, 96,148, 0,224,107,
+ 76,143, 26, 12,252,112, 20, 43,254, 29,137,241, 31,124,143, 77, 11,222,129,128,162, 32, 20,177,155,177,195, 88,255,151,114, 11,
+209,161, 85, 32,214,254,184, 5,109,219,182,133, 79,243, 16,244,104, 30, 2,131,238, 47,247,191, 27, 11,153,140,245,255,229,228,
+ 33,120,239,211,117,104,213,158,106, 84,249, 49,214,255,176,157, 63,225, 64, 76, 52,168,150,125, 1,212,100, 5, 4,128, 27, 42,
+149, 69, 73,204, 2,187, 4, 62,203, 39, 93,167, 6,207, 33,210,144,177, 85,202,182, 29,187,161, 82, 2,220,192, 45, 84,221, 44,
+ 66,209,124, 19,170,203, 90,226,202,241, 44,214, 47,132,166,105, 74, 34,145, 16,141, 70, 3, 43,203,147, 72, 36, 18,208, 52, 77,
+ 61,138,206,178,170,170,234,219,119,222,121,103,244,154, 53,107,196, 62, 62, 62, 80, 42,149, 88,178,100, 73,165, 94,175,127,193,
+149,255,195, 88,252,204,116, 57, 71, 3, 1, 19, 19, 19, 41,115,146,159, 70,147, 63, 0, 88, 17,187,221, 50,183,151, 97, 80, 46,
+151,235, 21, 10, 69,223,109,219,182,157, 83,169, 84,205, 12,134,154,105,166,117,201,191, 75,151, 46,232,219,183,239, 72,185, 92,
+110,239, 63, 5, 21,183,175,227,171,207, 62,193, 47,187,247, 97,248,128, 94, 56,148,242,123,141, 1,211, 60, 4, 62,205, 67, 16,
+158,147,131, 23,198,189, 86,156, 91,162, 30, 6, 96, 59, 91,235,127,230,234,221,136,123,107, 24,154, 55,149, 90,148,139,186,229,
+208,200,108,138,156, 39,224, 9, 82, 10, 88, 41, 0, 0,240,225,156, 15, 82,191,253,150,150,221,104,249, 20,218,119,236,172,244,
+246,144,128, 38,128, 70,167, 71, 78, 78, 14,138,114,206,202,188, 60, 61, 48,125,250,116,187, 13, 87, 34, 22, 99,219,254,193, 50,
+ 38, 2,190, 65,119, 4,143, 7, 15, 15,246,214, 19, 51, 5,208,195,191, 41,104,147,161,134,252,205, 48, 80,110,118, 83,236,214,
+ 5, 51,165, 38, 98,214,178, 90,164,229, 12,249, 91, 43, 1,214,137,127, 74, 75, 75,237,191, 0, 59, 74,192, 6,171, 89,194,107,
+230,191,253,215,142,161, 26,158, 44,229,180,242,247,194,182, 83,103,113,225,202, 85,244,150, 69,214, 34,125, 71,200,159,193, 75,
+239,126,129, 29,189, 60,240,238,152, 78, 46, 41,191,217, 33,189,241,193,174,109,160,190,250, 20,251,130,159,197,146,234, 11,181,
+206,143,245,241,197,130,138,114,135,136,227,200,162,156, 84, 63, 65, 4,242,203,174,163,168,228, 14,238,101,121,130,111,242, 70,
+255,167, 7, 98,203,241, 45,143,180, 83,115, 81,182,191, 83, 63,255,252,115, 4, 69, 81, 7,191,255,254,123,241,203, 47,191, 92,
+169, 86,171,135,193,137, 49,255,134,224,138, 41,128,114,185,159, 75,200,223,134,149,106, 79,249, 96,113,111,242, 98,133, 66, 17,
+ 82, 85, 85,245, 85, 70, 70,198,172,130,130, 2,168, 84, 42, 8,133, 66, 52,107,214, 12, 65, 65, 65, 47, 43, 20,138,223, 54,108,
+ 96,181, 36,192,101, 0,225,173,252,189,240,220,115,207,225,236,181, 2, 4,182,235, 90,171,189,189, 48,238, 53, 53,128,165, 95,
+197,205,218,206,246, 57,166, 72,159, 70, 68,202, 31,136,249,244,127, 24, 52,104, 16,130,131,131,109, 42, 90, 46,124,237,148, 19,
+228, 79, 26, 56,206, 41, 17,143,128,244, 89,165, 2, 6,128, 15, 63,252, 48,117,249,242,229,210,211,169, 89, 50,160, 38,146,150,
+ 16, 2,145, 72,132,143, 62,156,195,186,209,190,235, 96,154, 95,182, 96, 92,253,124,163, 26, 48,170, 45, 17,240, 12,241, 59, 58,
+ 23,139,113,245,103, 95, 60,131,236,139,103, 16, 20, 20,132,162,162, 34,167,136,223, 39,168, 57,244, 44,130, 35,217, 34,230,139,
+ 13, 56,113,212,117,197,120,243,230, 77,203,106,127, 6,157,246, 62,242,119,132,248, 25,252,171,151,135,203,202, 15, 0,168,248,
+143, 44,196,207,144,255, 13,149, 74, 54,214,199, 23,201, 64,234,130,138,114,167,158,253,215, 5, 7,173, 58, 30, 13, 0, 96,203,
+ 69,246, 9,123, 8, 33,148, 72, 36,178,120, 1,152,239, 0, 32, 18,137, 40, 91,223, 31, 50,142,253,244,211, 79,131,182,111,223,
+ 62,187,178,178, 50, 30, 64,186,171,255,192, 21, 83,255, 92, 76, 78, 46,135, 92, 46,215, 0,152,109,222, 26,245, 62,206,159, 63,
+223, 31, 64,187,192,118, 93,213, 6,157,214,221,220,222, 42, 1, 84, 0,184,220, 58,192,253, 21,185, 92,238, 80,133,142,248,100,
+205,195, 34,126,167, 20, 45, 39,175,231,224, 2,132,133,133,177, 34,127,187, 6,104, 99, 87,234,123, 16, 96,198,246, 25,226, 71,
+ 35,137,159, 25,155,174, 40,204, 71, 69, 97, 62,130,130,130, 26,101,241, 3,128,209, 68, 59,236,125,104, 8,133,165, 21, 78,223,
+ 75, 93, 48, 99,251,174, 34,254, 7, 80,126, 20, 0, 12,247,240, 32,214, 86,127, 79,129, 91,163,136,255, 31,134, 63, 43, 43, 43,
+163,185, 98,120,244, 56,114,228,136, 66,161, 80,252, 47,183, 68,173, 54,232,180,214,227,145,222,173, 3,220,253,156, 88,253,143,
+ 2,106,134, 50,254,110, 74, 21,135,135,171, 4,176,170, 76,206,174, 35,204,129, 3, 7, 14, 28, 56,112,248,251,130,199, 21, 1,
+ 7, 14, 28, 56,112,224,192, 41, 0, 28, 56,112,224,192,129, 3, 7, 78, 1,224,192,129, 3, 7, 14, 28, 56,112, 10, 0, 7, 14,
+ 28, 56,112,224,192,225,137, 64,173, 89, 0,103,207,158,117, 58,138,212, 86, 48, 33, 39,143,147,231, 42,121,230,181,213,121, 0,
+104, 91,201, 87,184,242,171, 95, 94, 88, 88, 24, 83,118,204, 92,110,114,246,236, 89,154, 43, 63, 78,222,223, 73, 94,120,120,184,
+ 32, 35, 35,195, 8, 0,125,250,244, 33, 29, 59,118, 68, 66, 66, 2,197,149,159,109,121, 14, 43, 0, 79, 8, 26,149,100, 34, 42,
+ 42, 74, 10,192, 58,101,168, 44, 49, 49, 49,149,211, 21, 31, 13,190,249,230,155,215,207,159, 63,223,227,228,201,147, 31,136, 68,
+ 34,168,213,234,143, 20, 10,197, 34, 22, 25,216, 56,252,213,177, 16, 0, 38,174, 36, 30,111, 68, 70, 70, 74,247,238,221,155,234,
+228,111,101, 73, 73, 73,135, 93,148, 80, 10,145,145,145,175, 36, 37, 37,109, 89,181,106,149, 63,128, 42, 0,166, 71,221,230, 24,
+242,143,137,137, 33, 27, 55,110, 68,239,222,189,185, 74,211, 72, 60, 81, 67, 0,102,242,110,212,239,183,109,219, 86, 55, 95,184,
+178, 49,114,163,162,162,164,230, 57,187, 36, 42, 42,138, 56, 42,139, 56, 8, 91,243,131, 27, 41, 79,250, 40,222,165, 66,161,160,
+102,204,152,177,232,226,197,139, 63,180,105,211,230, 3,177, 88, 12,157, 78, 7, 0,223,236,216,177,131, 30, 51,102,140,236, 17,
+ 53, 25,226,248,246, 48,229,213,187, 6,187,245, 90,236, 78,173,207, 30, 21, 21, 37, 37,132, 16,242, 31,219,178,153,115,246,234,
+160, 45,220,188,121,147,220,188,121,211,101, 4, 83, 90, 58,180,214,122, 5,174, 38,106,138,162, 28,146, 75,211,132,152, 76,132,
+208,180,237, 45, 50, 50, 82,154,148,148,228,212, 42, 84,171, 87,175,126,126,223,190,125,135, 7, 15, 30, 12,138,162,200,230,205,
+155,135, 58,122,111,117,183,125,251,246,109,121,181,159, 16,242,105,242,210,235,158, 57,219,167, 78,141,165,153,115,246,228,169,
+ 84, 42,162, 82,169, 26,172,135,204, 53,206,190,159, 43,167,100, 72, 89,157,137,240,240,112,206, 16, 96,111, 8,220,151, 32, 72,
+ 96,167,193,219,204,155,109, 47,159,246, 35, 68,163,150,113,219,182,109,155,114,194,132, 9, 0,106,146,106, 88, 85, 78,165, 51,
+ 94, 5, 70,161, 96,114,254,155,211,144, 42,163,162,162, 28,243, 42, 36,250, 59,240,175,246,219,190,106,212,219,236,197, 57,190,
+174, 77,125, 13,146,117,249, 41, 20, 10,170,162,162, 98,107,183,110,221,198, 1,224, 17, 66, 32,145, 72, 80, 88, 88,136,242,242,
+114,248,248,248,160,176,176,240,240,152, 49, 99,100, 59,119,238, 76,117,240,157, 16, 38, 29, 44, 69, 81, 24, 55,110, 28,134, 14,
+ 29, 42,155, 54,109, 26,107, 57,187,118,253,106,249, 62,122,244,203,118,247,237, 65,115,226,221,191,138,187,223,178, 90,251,117,
+143, 73,250,217, 95, 84,137, 89, 78,216, 26,105,105,105,152, 63,127,254,125,239, 98,224,192,129,228,232,209,163,172,234,114, 98,
+ 98,162, 18,159, 82,204,254,253,137,103, 62,165, 26,221, 25, 63,198,125, 75, 45, 75, 91,161, 80,200, 98, 99, 99, 49,104,208, 32,
+114,236,216, 49, 86,191, 61, 81, 79, 78,198,157,137, 31, 32, 41, 41, 73,201, 44, 18, 54,104,208, 32, 82, 89, 89,217, 16,225, 75,
+ 99, 99, 99, 45,245,245,183,223,126,115,167, 40, 10,209,209,209,247, 0, 4, 79,156, 56,241,160, 66,161,224, 57, 98,177, 47, 58,
+184,200,242,253,110,242, 29, 80, 20,133, 77,239,187, 3,160,240,237,107,223,188, 20, 24, 24, 8, 0,216,188,126, 19,235,178, 10,
+ 15, 15, 71,251,246,237, 93, 82,238,225,225,225,188,140,140, 12,186, 79,159, 62,100,227,198,141,184,151,213, 22, 40,246,227, 88,
+221, 1,242,119,212, 3, 64, 18, 19, 19,239,211,176,172, 58, 80,226, 68,227,118,169, 53, 89, 87, 94, 98, 98,162,245,130, 24, 14,
+131,162, 40, 42, 49, 49,145, 98, 58, 32,243,167,211,150, 38, 67,254,230,123,162,172,238,205, 97, 69,133,154, 80,102,217,216, 28,
+183, 7,207, 61, 43, 45, 27,155,227,142,144, 63, 33, 4,204,234,108,132, 56, 86, 77, 20, 10, 5,175,172,172,236,127, 62, 62, 62,
+227, 0,240, 38, 79,158,140,152,152, 24, 8,133, 66, 72, 36, 18,136,197, 98, 80, 20, 5, 62,159,143,138,138, 10,214,229, 24, 17,
+ 17, 33, 5, 64,182,111,223, 14,230,157, 16, 66,176, 99,199, 14, 76,155, 54, 77,105, 62,255,216,193,150, 66,240, 40, 60,107,137,
+137,137, 74, 0,212, 43, 87, 38, 96,194,101,155,109,140, 76,184, 28, 37,163, 62,119,170,221,145, 15, 63,252, 16,237,218,181,115,
+201,253, 82, 20, 69,228,114, 63, 4, 4, 28,114,105, 57,140, 24, 49, 98, 72, 74, 74,202, 97, 66, 8, 21, 27, 27,155,234, 8,249,
+215,135,157,137, 31, 32, 62, 62, 30, 52, 77,227,131, 15, 62, 96,165, 80, 88,147, 63, 0,236,219,183,111,247,160, 65,131, 0,192,
+ 47, 58, 58,218, 56,120,240, 96,200,229,114,218, 28, 55,195,198,203, 88,107,127,201,146, 37,120,229,185, 26,219,112,211,251, 18,
+188,218, 79,136,143,134,127,200,250,153, 60, 60, 60, 48,104,208, 32,100,100,100, 88,250,211,186, 27,115, 13, 91,101, 47, 35, 35,
+131, 6,106,150, 89, 7, 0,111,247, 98,142,213, 27, 73,254, 13, 42, 0, 12, 89,101,100,100, 88,210, 78, 90, 91, 79,142, 18,173,
+ 85, 39,226,234, 78,169,174, 50,224, 82,215,176,141, 33, 1,135, 97,173, 80,152,173,255, 39,177,158, 17,235,206,164,160,160,192,
+114, 34, 63, 63,159,181,194, 88, 81, 81,241,181, 90,173,126,141,199,227,241, 38, 78,156,136,138,138, 10,220,190,125, 27,110,110,
+110, 16, 8, 4, 16, 8, 4,112,115,115,131, 68, 34,129, 70,163, 1, 27, 23,226,170, 85,171,164, 7, 15, 30, 84, 82, 20,133,241,
+227,199,131, 16,194, 40,121,212,248,241,227, 1, 0, 41, 41, 41, 74,174,171,104,152,252,205,239, 87,102,173, 36, 51,239,222,218,
+171,229,140, 5,159,152,152, 72,153,223, 11, 86,173, 90,229, 18,101,108,222,188,121,140, 81,208,104,207,196,240,225,195, 35, 78,
+157, 58,149,210,182,109, 91,116,232,208,129,244,239,223,223,226, 57, 49,175,254,232, 20,249, 47, 94,188, 24, 20, 69,129,199,227,
+225,212,169, 83, 96,227,141,169,227,145,120,137,162, 40,188,250,234,171, 70,243, 33,125,116,116,116,165, 84, 42,197,180,105,211,
+232, 23, 95,124,209,238,179, 91,175, 74,122, 55,249, 14, 64, 1, 9,239,253,149,181,120,211,251,238,136,238, 47,194,220, 23, 62,
+ 98,125, 95,108, 44,127, 54,215,196,196,196,144,240,240,112,203,118,234,212, 41, 84,231,134, 3,122, 13, 40, 79, 35, 82,190,188,
+ 12,235,243,204,198,181,220,218,228, 31, 59,119,129,205,243,130,134, 26,100,120,120, 56,201,200,200, 0,227, 9, 96,136, 43, 60,
+ 60,220,161, 70,254,160,201,223,218,170,126,220, 3,246,172,135, 4,158, 56, 13,128, 16, 20, 20, 20,224,238,221,187,150, 99,117,
+247,237, 88,255,252,253,251,247,191, 24, 26, 26, 10, 62,159,143,236,236,108, 16, 66,112,245,234, 85,232,245,122, 80, 20, 5,129,
+ 64, 0,138,162, 96, 50,153,160, 86,171,177,115,231, 78,187,114, 15, 29, 58,164, 4,128,241,227,199,223, 87,111,153,161, 30,134,
+ 40,216,212,235,186,110,125,123,251,108,172,124, 6,245, 13, 7,176,113,253,215, 69, 90, 90, 26,204,150, 97,227, 20,224, 79, 41,
+ 80,159,215, 40,112,214,202, 43, 33, 4,248,148,194,132,203, 81, 78, 7,202, 82, 20, 69,204,239,197, 66, 70,230,247, 69, 53, 70,
+ 94,199,142, 29,239, 35, 55,103, 33, 18,137,200,197,139, 23, 81, 84, 84, 68, 21, 21, 21, 33, 44, 44,140,220,188,121, 19,124, 62,
+ 31, 70,163,209,169, 63, 24,220,159,207, 40, 15,152, 51,103, 14,150, 44, 89,130,163, 71,143,130,162, 40,140, 26, 61, 21,183,110,
+178, 91,192,113,223,190,125,191,154,223,177, 22, 0,109,222, 16, 29, 29, 93, 14,192, 55, 41, 41, 9,145,145,145, 82,107,133,188,
+ 33,212, 88,255,247,175, 99, 82, 51, 28, 0,108,222,116,198, 33,121,141,197,149, 43, 87,112,234,212,169, 90,199, 76,229, 55, 96,
+ 52,208, 0, 85, 5,223, 23, 12, 56, 85,103,177,107, 46, 56,144, 29,249, 55,232, 1, 48, 91,255,148,181, 39,128,177,252, 51, 50,
+ 50, 26, 67,254,246, 2,148,156,146,103,229,153,144,194,137, 0,167, 7, 96, 57, 17,171,206,199,114, 63,204, 49, 87, 5, 39,145,
+109,126,150,205, 21,168, 30, 57,221,178, 57, 96,249, 19,166,179,109,217,178, 37,122,247,238,109,105,132,204,126,221,107,235,129,
+175,191,191,127, 55,157, 78,135,210,210, 82,156, 56,113, 2,233,233,233, 40, 42, 42,130, 70,163, 1, 51, 70, 74, 8,129,193, 96,
+128, 78,167, 99, 53,196,192,212,141,250,200, 61, 49, 49,145,162, 40, 10,108, 61, 51,187,118,253,106,217,216,236,219,131,230,196,
+187,181,136,158,217,172,247,173,175, 97,139, 65,131, 6, 33, 45, 45,173,113, 21,194,106,204, 31, 53,195, 88, 50, 51, 57, 83,204,
+ 57, 52, 50,246,198,250,189, 48, 94, 0, 87,193, 21, 94,128, 22, 45, 90, 32, 63, 63,159,170,171,236, 58, 75,254, 59, 19, 63,176,
+212, 97, 6, 3, 6, 12, 0, 0, 28, 57,206,126,178, 70,100,100,228,112,243,216,255, 37, 0,106,115,127,206,108, 22,173,155,109,
+112, 97,237,177,127, 27,202,149,131,242, 92,129,140,140, 12,170,119,239,222,168,186, 52, 2,101, 39,154,161,252,152, 4,164,172,
+ 28,168, 6,120,106, 35, 42,143,242,160,249, 67,136,242, 19, 77,176,127, 83, 4,122,247,238,237, 16, 63,253,211, 33, 96,211, 56,
+ 25, 79,128,163,150,255,220,185,115,201,194,133, 11, 93,118,179,246,228,153, 59, 41,151, 85, 78,182, 99,104, 13,145,142,149,172,
+106,185, 92,238, 89,223,121,103, 97, 61,246,239, 10, 37,192,122,236,159,173, 18, 16, 19, 19, 3, 15, 15, 15,120,122,122,194,203,
+203, 11, 62, 62, 62,180,159,159, 31, 47, 41, 41, 9,175,191,254,186,229, 58,177, 88,140, 97,195,134,161, 1, 37, 32, 64,175,215,
+163,180,180, 20, 90,173, 22, 62, 62, 62, 16,137, 68, 48, 26,141, 32,132,192,100, 50, 65,175,215,195, 96, 48,192,100, 50, 57, 20,
+ 95, 96, 14, 90,171,247,188,181, 21,250, 40, 97, 47, 32,208, 81, 52, 86, 9,160, 62,175,127,184,111,194,229, 40, 51,185, 58, 41,
+187,142,245,111,117, 28,227,199,143,119, 56, 24,176,174,245,111, 45,207, 89,132,135,135, 19,147,201,132,176,176, 48,114,246,236,
+ 89, 42, 44, 44,140, 24, 12, 6, 84, 84, 84, 52,134,212,106, 58, 95,129, 0,179,102,205,194,169, 83,167,240,215,184, 63,251, 58,
+189,127,255,254,253, 3, 7, 14, 4, 0, 47, 51,233,171, 1, 96,203,150, 45, 77,142, 28, 57,226,109,110, 31,148,249,211,174,224,
+ 37,223, 47,193,171,125,239,183,254, 99,126, 80, 99,203, 9, 3, 8, 33,232, 57,177, 39,206,108, 58, 67, 61, 76,227, 42, 35, 35,
+131,146,253, 43,156,236, 95,210, 6,130,234, 74,192, 88,243,215, 52, 0,161, 0, 40,184,235,139,195,185,225,166,213,155,139,248,
+ 25, 25, 25, 84,120,120,184,152,137, 21,224,172,255, 5, 13, 94,103,119, 26, 96, 84, 84, 20, 97, 42,172,117, 60, 0, 27, 44, 92,
+184,144,177, 24, 92, 2, 22,242,156, 30, 95, 55, 79,209,171,181,165,164,164,208,204,172,128,198, 90,236,177,177,177,158, 79,114,
+133, 91,189,122, 53, 22, 47, 94, 92,171, 94, 49,228, 63,122,244,104,140, 30, 61,186,198,194, 57,114,164, 33, 49,254, 57, 57, 57,
+ 90,147,201,132,178,178, 50, 20, 23, 23,163,172,172, 12,106,181, 26,106,181, 26,213,213,213,168,172,172, 68, 69, 69, 5, 52, 26,
+ 13,116, 58, 29,216, 52,116,138,162,176,125,251,118,135, 20,182,191, 51,210,210,210,106,109,214,152, 53,107,150,212,122,159,205,
+152,179,141, 49,255, 90,150,123, 99,162,246,109,253,150, 16, 66,109,223,190,221,165,177, 0,219,183,111,119,184, 13,247,234,213,
+139,152, 76, 38, 75,130,150,176,176, 48, 66,211, 52,238,221,187, 7,149, 74,229,212, 51,255,123,238, 96, 28, 57,114, 4,244, 86,
+ 95, 16, 66, 16, 31, 31,111,121, 71,105, 39,104,176, 29,249,136,140,140,124, 25, 0,162,163,163, 11,204, 10,128,110,243,230,132,
+ 38,211,167, 79,111,114,228,200, 17,140, 24, 49, 34,194,145,156, 0,119,147,239,128, 2,133, 4, 43,235,127,226,247,106,240, 95,
+173,192,230, 19,122,204,156, 57, 19, 11,247,127,243,208,235,114,120,120, 56,159, 81, 2, 94,152,105, 4,209,248, 0,149, 0, 42,
+ 1,126, 21, 80,121, 15,216,119,166, 25,172,200, 95,144,145,145,161,229,200,223, 62,249,219,245, 0,212, 29,247,183,142, 7, 96,
+235,102, 73, 76, 76, 76, 53, 7, 8, 41,235,120,146,156,237, 48,238,147,199, 12, 11,152,199, 33, 93,226,254, 25, 58,116,232,133,
+148,148,148,110,143,227, 11,102,172,126, 87,185,253, 25,171,223, 1,183,127, 45, 36, 36, 36, 88,190,255,247,191,255,197,207, 63,
+255, 12, 0,122, 0, 66,134,248, 1, 96,216,176, 97,246, 20, 0, 77,104,104, 40,212,106, 53,244,122, 61,138,138,138, 32, 18,137,
+ 32, 16, 8, 44, 30, 0,149, 74, 5,181, 90, 13,157, 78,135,138,138, 10,140, 27, 55, 78,182, 99,199,142, 6,239,143,177, 50,237,
+ 76,107,197,248,241,227,237, 42, 10, 53, 10,205,131,139, 1,112,230,124, 93, 88, 77,247,187, 15,241,241,241,202, 89,179,102,201,
+226,227,227, 83, 31,105, 29,174,199,250,183,134, 35,177, 0,245, 89,255,206,162, 87,175, 94,228,244,233,211, 84, 88, 88,216,103,
+ 76,213, 54,153, 76,159,122,120,120,160,184,184,216,169, 62,230,147,143, 7, 35, 53, 53, 21,212,246, 0, 0,192,129, 79,188, 48,
+236,203, 42, 12, 26, 52, 8, 95, 45, 60, 2, 66, 8,107,111,197,190,125,251,118, 14, 30, 60, 24, 0,138,182,108,217,212,226,200,
+145,163,190,132, 34,120,113,196,139,163,247,238,221,187,123,239,222,189, 14,121, 57,151, 44, 89,130, 87,251,185,213,182,248, 65,
+ 48,107,230, 44, 4, 15,107,138, 71, 21,183,148,145,145, 81, 75,195, 39, 85,128, 72, 15,208,132,130,209, 68, 32, 34, 64,176,132,
+103,125,189, 17, 28,106,140,178,133, 31,215,171, 32,132,133,133, 53,172, 0, 88, 71,252,155,201,223, 18, 44,197,120, 2,216,106,
+254, 54, 72,187, 81,176, 33,207,229, 99, 82,177,177,177,221, 82, 82, 82, 92,217,225, 61,169,245,140, 66, 77, 20,184,197,146,126,
+243,205, 55, 1, 64,104, 85,151, 44,231,204,157, 86,125,184,216,183,111,223,215, 83, 83, 83, 19, 77, 38, 19, 42, 43, 43, 97, 48,
+ 24, 44,227,254, 90,173,214, 50,197,144, 9, 12,220,177, 99, 71, 42,139,250, 66,193, 60, 5,176,110,189,141,138,138, 34, 12,233,
+ 15, 29, 58, 84,198, 70, 1,120, 80,121, 0,172,199,254,173,201,191,238,176, 0,139,247,209, 16, 72,124,124,188,242,149, 87, 94,
+193,214,173, 91,157,245,150, 73,173, 61, 39,204, 62, 19, 48, 56,225,114, 20,185,118,237, 90,189,191,103, 18,254,236,223,191,191,
+ 94,143,221,141, 27, 55, 88,123,102, 74, 75,135, 18, 0,136,136,200, 65, 78, 78,142,205,232,242,146,146, 33, 0,202, 0,216,239,
+183,186,116,233, 66, 78,159, 62, 77,153, 59,203,207, 0,128,199,227,125,122,235,214, 45,148,149,149, 57,213,144,121, 60,170, 70,
+ 97,103,200,255,156, 17, 63, 43,245, 0,128,175, 22, 30,113,184,143, 96,218,196,244,233,211,195, 8, 33,136, 28, 25, 57,110,207,
+238, 61,191,176, 37,126,107, 81, 47,143,121,233, 18, 69, 81, 93, 8, 1,248,175, 86,128, 16,130, 89,179,103,161,233,176,102,141,
+204,171, 90, 51,173,151,169,119,141,201, 36, 24, 30, 30, 78,182,125,220, 28,158, 37, 55,112,189,178, 37,218,137,138, 0,143, 96,
+ 8, 84,247,224,173, 42, 1,208,196,226, 49,168,171, 52,112,112,194, 3, 96, 61,221,175,206, 52, 54,146,152,152,232,176,203,212,
+138,180, 93,114,227,214,242,152,249,255, 79,232,244,186,191, 5,234,148,125,173, 41, 98,245,156,187,175, 51,144,203,229, 70,133,
+ 66,177, 99,240,224,193, 51,146,146,146,150, 26,141, 70,148,151,151, 91, 98, 0, 0,160,168,168, 8,229,229,229, 32,132,192,145,
+250, 20, 17, 17, 33, 59,120,240,160, 50, 49, 49,177,150,245,201,252, 62, 34, 34,194,161,100, 64, 15, 2,154, 19,239, 58, 67,248,
+247, 17,188,157, 46,155,162, 40,138, 56, 67,254,102, 79, 91,170,173,182, 8, 0, 86, 65,129,172, 48,109,218, 52, 37,139,255, 36,
+ 14,204, 21,175,245, 89,155,136,216, 37,199,107,215,174, 29,185,116,233, 18,227,242,255, 12,192,167, 58,157, 14,215,175, 95, 71,
+ 69, 69,133,179, 84, 72,232,173,126, 56,112,174,198, 56, 93,167,212, 99,203, 9, 61, 8, 33, 56,122,210,249,145,197,180,180, 52,
+140, 24, 49, 66,182,119,239,222,212, 61,187,247, 56, 43,134, 71,211,180, 27, 0,108, 61,105,192,204,153, 51,209,116,120, 51,246,
+234,164, 13,168, 84, 42, 0, 64, 78, 78, 14, 89,189,122,181, 69, 33,179,142, 37, 89,183,110,157,117,255,192,234, 95,218,240, 84,
+ 64, 80, 24, 94, 95, 83, 1, 32,184,166, 12,222, 9, 68,107, 65, 30,190, 28, 90,136,245, 29, 95, 37, 91,182,108,249,199, 7, 0,
+ 50,214,189, 45,203,191,238,249,134,134, 0, 40,243, 16,192,125,211,166, 28, 25, 2,176,217, 81,184,142,116,172,229,185,116,254,
+ 63, 51,246,239, 44,236, 41, 36,142, 42, 44,245,185,251,157, 29, 6,168,207,221,239,228, 48,128,117, 80, 16,229,192, 57,216, 80,
+ 2, 8,128,101, 10,133, 98, 85, 66, 66,130, 65, 40, 20, 66,167,211,193,104, 52,130,166,105,248,250,250,162,172,172, 12,142,102,
+ 83, 60,120,240, 96, 42,106,230,253,147,237,219,183,195,172, 8, 88,166, 6, 30, 60,120,240, 31,209, 57,188,242,202, 43, 68,165,
+ 82, 97,207,158, 61,142,214,103,169,157,242, 38, 19, 46, 71,201,216,120,227, 62,252,240,195,251,140,139,186,248,232,163,143, 8,
+219, 32, 79,185,220,207,174, 60,185,220,143,149, 48,137, 68,194,116,146,132, 16, 2,181, 90,141,219,183,111, 59, 61,230,111,141,
+225, 95, 86,213,218,111, 12,249,155, 76, 38, 10, 0,156,176,248,235,130,222,245,219,238,142,214,153, 0, 93,133,134, 20, 50, 43,
+ 5,128,149,245, 47, 31, 31,114,251,167, 44, 52, 87,108,191, 94, 43,202,127,208,242,112,114,120,218, 83,184,118, 79,130,134,188,
+ 78, 28, 28,244, 0,152, 95, 28,229,200,241, 71,108,129,166, 62,102,247, 67, 57, 96, 49,219, 81, 68,134,186,236,190, 38, 76,152,
+ 32,115, 34,189,111,131, 22,154, 13, 11,180, 33,235,148, 85,208,152, 92, 46, 55, 2,160,198,141, 27, 39,205,205,205, 85,106, 52,
+ 26,152, 76, 38,116,233,210, 69,214,187,119,111,167,223,247,246,237,219,173,167,156, 57,229, 53,122,208, 49, 0,246,246,217,232,
+139,230,232,240,218,132,115,244,168,195,110,127,243, 92,127, 50,225,242,253, 10, 28, 33,132, 48, 57, 2,172, 20, 50, 75,192,156,
+179,109, 3, 0,182,109,219, 70,185,170,173,177,189, 6, 0, 74, 75, 75,209,174, 93, 59, 82, 89, 89,137, 54,109,218, 32, 51, 51,
+211, 37,125, 29,239,149, 50, 80, 20,133,209, 47,197, 50,110, 24, 44, 90, 56,205,242,221,209,140,153,174,130, 92, 46,167, 87, 29,
+ 89,229, 82,153,147, 38, 77, 50,123, 93, 20,158, 0,140,230,141,200,229,114,218,234, 26,135, 30, 88,177,253,122,115,107,238, 97,
+ 92,253, 25, 25, 25,148,252,208,171,132, 35,255, 7,160, 0,252,141,208,232, 70,250,184,230, 31,119,245,125, 61, 0, 47,204, 3,
+ 45, 55,243, 24,191,229, 63, 46, 95,190,252,136,223, 8, 77, 61,222,242,106,202,202,209,140,114,245,226,211, 90,235, 88, 16, 91,
+231,204,150,119,234,147,208,145,220,189,123,215,242, 62,114,114,114, 92,246, 78, 20,138, 85, 68, 46,159, 70,253,246,171,130,213,
+ 15,156, 93,222,213, 25,152,167,245,185,188, 79,104, 72,185,118,176,223,240, 64, 77, 76,145,193,202, 8,181,140,243,115,110,127,
+176,173, 83,247, 87,204,135, 89,209, 56,112,224,192,129, 3, 7, 14,143, 7,120, 92, 17,112,224,192,129, 3, 7, 14,156, 2,192,
+129, 3, 7, 14, 28, 56,112,224, 20, 0, 14, 28, 56,112,224,192,129, 3,167, 0,112,224,192,129, 3, 7, 14, 28,158, 8,212,154,
+ 5,192,228,188,118, 6,182,130, 9, 57,121,156, 60, 78,222,195,147, 23, 23, 23, 87, 91,187,231,241, 44,217,229,172,167,154, 49,
+217, 20,173,167,158,217, 74, 31,236,233,233, 9,177, 88,108,249, 61,143,199, 3,159,207,191, 79, 30,179, 48, 19, 77,215,204,242,
+170,111,177, 28,238,253,214, 15,133, 98,181,148, 47, 16,129,208, 70, 76,157,250, 86,170, 51,242, 86,173, 90, 37,203,204,204, 20,
+132,133,133,165,212,205,186,231,164, 60,105,102,102, 38, 86,174, 92,153,202,181,183,191,159, 60,135, 21,128,127, 34, 2, 3,223,
+170, 85,112,197,197,107,169,199, 74,222, 91,129, 4, 0,138,215, 22, 83,214,223, 27, 33,178,145,201, 61, 31,184,188,127, 44,214,
+ 44, 93, 44, 45,186,112, 2,131,252,138,148, 45,140,121,200, 34,237,112, 74,229, 47,243, 14,125, 22, 51,102,207, 73,181,247,251,
+ 99,199,142, 97,192,128, 1, 22,226,103, 8,155,162,168,251, 8,155,166,105,203,118,235,214, 45,155,242, 78,159, 62,141,240,240,
+112, 72, 36, 18, 8, 4, 2,240,249,252, 90, 50, 25,210, 55,153, 76,150, 77,167,211, 33, 35, 35, 3, 29, 58,116,120,226,222,143,
+ 66,161,160,228,114, 57, 89,181,106,149,244,234,213,171,184,118,237,154,210,215,215, 23, 27, 55,110,108, 84,253, 95,189,122,141,
+ 84, 36,246,135,175,223, 83, 74, 85,117,129,108,245,234, 31,165, 43, 86, 56,150,251, 97,229,202,149,210,196,196,196,195, 89, 89,
+ 89,216,179,103, 15, 66, 67, 67,241,193, 7, 31,240,173,231,222, 59, 33, 79,153,115, 61, 27, 29, 66,218, 67, 40, 18, 97,230,204,
+ 89,207,199,198,198, 42,185,150,250,132,122, 0,254, 78,136,136,136,176,171,241, 28, 60,120,208,110,195,100, 8,186, 46,113, 59,
+ 11, 87,203,123, 0,160, 28, 36,109,187,169,101, 93, 44,143,205,239,235,254,255,223,155, 88, 86,173,146, 94, 58,118, 0,185, 91,
+190, 85,170,213, 58, 24,158,229, 65,210,146, 66,199,220,115,120,198,139, 40,203,138,254, 68,243, 85,255,145,141,155,246,121,131,
+ 74,192,165, 75,151,192,231,243, 49,112,224, 64, 8, 4, 2,203,198, 40, 4,140,213,111, 52, 26, 97, 50,153, 96, 48, 24,112,235,
+214, 45, 28, 62,124,216,166, 60,181, 90,141, 51,103,206,160,111,223,190, 16, 10,133,112,115,115,171, 37,147,166,105, 24,141, 70,
+ 24,141, 70, 24, 12, 6,104, 52, 26,156, 57,115, 6,213,213,213,143, 3, 89,243,204,117,131, 7,192,216,152, 60,244, 10,133,130,
+138,139,139,163,227,226,226, 16, 16, 16,128,127,255,251,223, 24, 63,126, 60,170,170,170, 16, 16, 16,224, 84, 6,210,128,128, 0,
+203,253,204,155,247, 49, 54,108,202,128, 68,210, 4,124,190, 80, 89, 93,149,231,176,204,244,244,116, 84, 87, 87,163,111,223,190,
+183,134, 14, 29,218,172,164,164, 4, 7, 14, 28, 48, 77,157, 58, 21,107,214,172,105,176,141,232,110,102,223, 87, 54,231,175, 92,
+ 65,170,151, 59,102,199,127,158,215,179, 87,183, 86,119,242, 11,113, 32, 41,245,240,230,205, 91,134, 70, 71,191,122,136,163,206,
+199, 31, 76,234,223, 58,158, 2, 86, 10, 64,221,212,173,246,246, 31, 58,249,191,253,246,219, 13, 94, 83, 86, 86, 6, 0,132,141,
+ 18,192,144,117, 99,173,245, 7, 33,207,218,242,119,129,245,239, 40,105,179, 37,107, 87,203,179,190,214,250, 19, 0, 80, 90, 90,
+147, 25,209,223, 63,229,137,104,168, 55,255, 72, 65,135, 60,165, 50, 79, 77, 99,108, 7, 62,158, 10, 50,130,246, 39,112,243,231,
+163,170, 68, 8, 73,149, 6,157, 51,151, 41, 55,196,199,201, 94,159, 53,191, 94, 37,128,162, 40, 92,190,124, 25, 66,161, 16,207,
+ 63,255,188,133,180,221,220,220,192,227,241, 64, 8,129,193, 96,128,209,104,132, 78,167, 67, 94, 94, 30,148, 74,101,189, 75, 42,
+243,120, 60, 24, 12, 6,100,102,102, 98,224,192,129,144, 72, 36, 16,137, 68, 22,121,140, 2,160,211,233, 80, 93, 93,141,243,231,
+207, 67,171,213, 90,134, 9,216, 32, 58, 58, 90,202,231,243,149, 85, 85, 85, 16, 10,133, 40, 44, 44,124,119,236,216,177, 85, 98,
+177,120,131, 51,164, 29, 29, 29, 61,129,207,231,111, 77, 74, 74, 98,228,101,141, 29, 59,246,170, 66,161, 24, 47,151,203,245,206,
+ 88,194,113,113,113,202,249,243,231, 23,194,188,226, 76, 92, 92, 28, 46, 93,186,132, 38, 77,154, 32, 44, 44, 12,235,215,175,119,
+152,252,127,154, 60, 25, 47,246,236, 9, 0,104, 58, 99, 6, 36,238,193,168,174,204, 69,101,197,117, 89,108,236,148,212,250,242,
+185,215,135,167,159,126, 26,133,133,133, 56,118,236, 88, 27, 30,143,135,243,231,207,195,223,223, 31,105,105,105,120,227,141, 55,
+ 72,102,102,102,131,191, 47,249,122,118,173,125, 79,189, 1,205,141, 90,204,252,240,211, 86,241,139,254,139,111, 23,173, 64, 11,
+158, 9, 43, 22, 45, 78,121,227,141, 55, 96, 79, 30,135,199,143,252,153,227,108,215, 2,184, 47,255,183,189,253,135, 9, 87,174,
+212,247,119,128,181, 18,240,144, 60, 1,142, 90,234,148, 29,235,220, 25,121,182, 62,159,168,196, 85,223, 47,252, 74, 26,154,249,
+147,178,144,111, 66, 7, 31,160, 77,107, 2,254,211, 66, 8,218,183,135, 80,167,133,238,120, 30,116, 21, 2,240,105, 55,104, 83,
+ 54, 40,215, 44, 95, 36,155,250,142,237,225, 0,198, 61,159,157,157, 13, 63, 63, 63,200,100, 50,136,197, 98, 8,133, 66, 8, 4,
+ 2,139,213,175,213,106,113,251,246,109, 28, 57,114, 4, 60, 30, 15, 60, 30, 15, 13,201, 51,153, 76,184,120,241, 34, 6, 12, 24,
+ 0,111,111,111,136,197, 98,240,249,124, 24,141, 70,232,245,122, 84, 86, 86,226,207, 63,255,132, 78,167,131, 64, 32,176,196, 2,
+216,195,192,129, 3,165, 87,174, 92, 81,222,184,113, 3,149,149,149, 16, 10,133,104,218,180,233,178,163, 71,143,162, 95,191,126,
+ 2,133, 66,241,179, 35, 74,192,192,129, 3,199, 92,185,114,101,107, 29,121,161, 71,143, 30, 13,237,215,175,223,102,179, 18,192,
+ 74,222,202,149, 43,165,122,189, 30,119,239,222,101, 92,222,150, 66,154, 63,127,126, 65, 92, 92, 92,139,241,227,199, 63,255,254,
+251,239, 59,212,255,173,249,241,103,233,199,115,231,212, 58,118,119,233, 82, 52,125,185, 37,190,253,246,123,217,228,201,175, 57,
+213,159, 30, 59,118, 76,249,199, 31,127,224,227,143, 63,174,228,243,249,222, 98,177, 24,253,250,245,131, 82,169, 68, 82, 82, 18,
+ 90,180,104,225, 64,203,163,176, 49,251, 14,118, 92, 43,192,174,223,214,131,207,167, 48,123,198,235,116,143,166,129,188,213, 51,
+ 63,197, 26, 71,229,113,120, 36,228, 95, 87,137,180,165, 20, 56, 61, 11,224, 81, 47,111,219,190,125,123,153,189,237, 97, 91,235,
+ 15, 66,158, 11,173,126,182,164,237, 12, 89,195,218, 58,103, 44,116,179, 28,226,164,188,122, 59,106,127,255, 20,167,172,255,229,
+203,151, 75,167, 76,153, 66,234, 59, 86,247, 92,125,176,190,126,249,242,229,210,186,231,234, 30,107,176,188, 46,158, 86,222, 46,
+168, 68, 19, 47, 1,218,123, 17, 8, 2,105, 8,158,123, 1, 30, 61, 54, 64,210,235, 59,136,124, 36, 16, 86,107,160, 86,155,208,
+154,175, 70, 90, 66,253,169,100,121, 60, 30, 4, 2, 1,220,220,220,112,237,218, 53,156, 63,127, 30,222,222,222, 8, 8, 8, 64,
+ 64, 64, 0, 2, 3, 3,225, 32,132,148, 37, 0, 0, 32, 0, 73, 68, 65, 84,235,235,139,138,138, 10,164,165,165,129,207,231, 91,
+198,246,109,129, 57, 47, 20, 10, 97, 50,153,144,149,149, 5,119,119,119, 4, 6, 6,162, 73,147, 38, 8, 10, 10,130,167,167, 39,
+178,178,178, 96, 48, 24, 44, 67, 4,245, 41, 20,117, 45,255,123,247,238, 41,175, 95,191,142,118,237,218, 97,248,240,225,232,211,
+167, 15,212,106, 53, 14, 31, 62,140,204,204,204,181, 90,173,246, 53, 7, 44,127,217,189,194,162, 95,114,238, 84,192,171, 67, 95,
+132, 14,127, 11, 45,250,140, 70,153,142,135,131, 41,135,144,153,153, 57, 86,171,213, 78,101, 75,254,149,149,149, 56,119,238,156,
+242,216,177, 99,120,250,233,167, 17, 23, 23, 23, 8,128, 54,123, 0, 90, 0,128, 88, 44,102, 77,214,107,126,252, 89,186, 49, 97,
+183,212, 63,160,155, 50, 97,203, 57, 76,254,233, 39, 36,157, 57,131,164, 51,103,208,116,198, 12, 0,128,193,160, 58,226, 76,155,
+123,233,165,151,200,174, 93,187, 48,110,220,184, 91, 94, 94, 94, 60,119,119,247,140,244,244,116, 28, 59,118, 12,197,197,197, 8,
+ 13, 13,117, 76, 41, 61,115, 13,139,126,191,128, 53,139,230,157, 19,240, 53,224,153,170,240,205,146,159,120, 91,211, 50,112,155,
+ 39,192, 83, 79, 61,197,177,236, 19, 2,129,179, 4,255,168, 22,175,120, 96, 22,246, 63, 91, 17,120, 32,227,234,141,116,213, 83,
+118,142, 59,164, 84, 44, 90,180, 72,122,232,208, 33,101,118,118,118,189,199,210,211,211, 89,201, 98,174, 75, 79, 79, 71,105,105,
+169,114,209,162, 69,178, 57,115,106,172,114, 91,199, 26,130,183,182, 4, 73,185, 90,180, 40,227,163,167, 55,133,160, 34,160,131,
+192, 7, 60, 42, 0, 68,123, 15,170,123, 20, 46,230,210,184,171,210, 66,192,227,161,187,191, 72, 89,223,115, 91, 43, 0, 34,145,
+ 8,215,175, 95, 71,139, 22, 45, 16, 17, 17, 1, 62,159, 15,154,166, 81, 82, 82,130, 99,199,142,193,205,205, 13, 66,161, 16,122,
+189,190, 94, 5,128,241, 14, 48, 74, 0, 33, 4, 57, 57, 57,232,208,161, 3,124,124,124, 80, 93, 93,141, 51,103,206,192,100, 50,
+ 65, 36, 18, 65,167,211, 65,167,211,213,219,119, 48, 65,116, 0, 80, 84, 84,164,204,207,207, 71,143, 30, 61, 32,149, 74,209,178,
+101, 75,153, 74,165, 66, 80, 80,144, 50, 37, 37, 5, 39, 79,158,132,175,175,111, 95,133, 66,177, 73, 46,151,219, 93,223,189,168,
+168,232,240,189,210, 10,248,135,246, 69,251,129,175,192,183,101, 40,116,170,114,228,254,177, 23,215, 14,173,103,228,177,122,191,
+230,216, 7,229,237,219,183, 17, 28, 28, 12,177, 88, 44, 59,119,238,156, 50, 46, 46,142,103,246, 0, 0,192,149,184,184, 56,154,
+ 77, 29,252,113,237,122,169,175,223, 83, 74, 95,255,167,192,227,185,193, 96, 80, 97,237,207, 74, 76,126, 83,198,120, 20, 48,117,
+234, 84, 4, 5, 5,209,142,182,189,215, 95,127,157, 36, 36, 36, 96,224,192,129,232,213,171, 87, 27, 0,198, 67,135, 14,133,223,
+188,121, 19, 18,137, 4, 18,137, 4,145,145,145,207,111,219,182,237, 48, 27,121,155,174,230,225,187, 63,175,224,199, 5,115, 75,
+ 91, 62,213,230,105, 85,117, 25,126,219,247, 39,206,157,191, 10, 95, 66, 67,120,247, 30, 34,223,141, 25,186,117,235,182,127,150,
+ 11,246,111, 4, 91,195, 71,245,121, 5,234, 83,213,169,241,227,199, 91, 91,208, 84, 84, 84, 84, 67,251,127, 91, 20, 23,175,165,
+172,183,199, 77, 30,240, 64,220,255, 13, 89,237,141,186,103,103,173,115, 71, 60, 0,142, 34, 58, 58, 90,186,123,247,238, 90,228,
+111,235,152, 51,200,206,206,198,238,221,187,149,209,209,209,210,134,142,213, 75, 92,197,121, 56,113, 71, 3,181,137,198,209, 60,
+ 26,119,141, 2,152,116, 25, 40,187,244, 54,214,207,136,197,158, 3, 21, 56, 95, 66,112,182,200,136,139, 37, 70,148,220,190,219,
+160, 87,206, 90, 9, 16,139,197,184,117,235, 22,174, 92,185, 2,160, 38, 46,230,247,223,127,175, 53,150,223,208,120, 61, 69, 81,
+ 22, 47, 0, 35,143, 16,130,188,188, 60,180,110,221, 26,183,111,223, 6, 77,211, 16,139,197, 22, 89, 13, 13, 41, 88, 35, 55, 55,
+ 23, 90,173, 22,225,225,225,104,217,178,165,140,207,231,195,219,219, 27,207, 62,251,172,204,211,211, 19,185,185,185,168,172,172,
+ 60,207,182, 30,228,230,230,130,230, 9,209, 34,108, 40,124, 91,134,130,199,119,131,196, 59, 8,173,159,141,132,208,195,143,145,
+119,211,158,156, 85,171, 86, 73,203,203,203,149, 5, 5, 5,104,213,170, 21,100, 50,153,108,195,134, 13,169, 37, 37, 37, 20, 0,
+244,237,219,215,104,190, 52,212,199,199, 7, 10,133,194,110,192,131, 88, 28,128,128,160, 30, 48, 25,117, 40,188,147,142,187, 5,
+199,134, 20, 23,157,153,103,150, 7, 0,184,119,247, 46,204,242,220,216,214, 61,185, 92, 62, 62, 33, 33, 1, 49, 49, 49,152, 56,
+113, 34, 0,208, 7, 14, 28, 16,236,222,189, 27,147, 39, 79, 30,118,250,244,105,234,248,241,227, 84, 92, 92, 28,171,200,253,172,
+ 74, 53,230, 30, 57,139,175, 63,136,197,192,145, 67,253, 77,196,136,109,191, 28,193, 15,203, 54, 96,223,172, 55,176,166, 71,107,
+180,246, 17, 96,222,188, 56, 46, 8,240,111,130,179,103,207,214, 75,254, 13,122, 0,234,142,237,219,219,127, 18,241, 0,166,224,
+ 57,133, 47,159,249, 82, 54,109,218,180,191, 67,121,215, 26, 82,120,192, 65,122,172,222, 67,100,100,164,244,218,181,107, 74,189,
+ 94,223,224,177,198,160,172,172, 12, 42,149, 74, 25, 25, 25, 41,203,203,203,187,239,216,222,189,123,235,125,119,153,165, 26, 84,
+232,105,100, 22, 25,113,187,220,136,224,223, 5,120,122, 91, 54,110,221,188,136,171,127,232, 97, 20,240,161,167, 1,173,158,160,
+140,208, 8,106, 96, 89,123,102,186, 31, 51,118,207, 68,236,223,187,119, 15,109,218,180,193,205,155, 55, 45, 46,127,129, 64, 96,
+185,222,209,225, 60,235, 28, 2,204,231, 3, 26, 18, 44,135,107, 99, 62,236,146, 53, 77,211, 80,169, 84, 53,157,163, 64, 32,123,
+251,237,183,107,189,187,170,170, 42,193,174, 93,187, 48,122,244,104,222,220,185,115,239, 45, 92,184,208,104,175, 46, 82, 84,141,
+ 66,164, 81,223, 67,117, 85,158,108,202,148, 55, 82, 21, 10, 69, 26,128,175,171,170,170,176,107,215, 46,139,226,216,161, 67, 7,
+ 61,155,186,189, 96,193,130,209,223,126,251,109, 98,100,100, 36, 6, 12, 24, 0, 0,244,241,227,199,121,191,254,250, 43,164, 82,
+233,200,229,203,151, 31,116,164, 96,238,168,117,120, 61,233,119,204,156, 16,137,241,175,143,131, 90, 91,137,157,187, 82,177,100,
+197, 38,252,111,216, 51,104, 95,152,207,177,233, 19,160, 12,176,245, 0,184, 26,164, 78, 67,182,183,207,193, 10, 15,154,252, 93,
+104,181,215,231, 81,112,118,252,191,161,122,193,170,190,236,221,187, 55,181, 99,199,142, 50, 63, 63,191, 6,143, 53, 6,126,126,
+126,232,216,177, 99, 45,162,183,117,204, 22, 52, 38,111, 24, 40,224, 84,177, 14,133, 38, 19, 14,229,104,177, 45, 81,139,195,249,
+ 65,200, 22,250, 32,191,194,128,188, 42, 26, 42, 35,160, 54, 18,136, 2,154,218, 37,102,102,126,191,201,100,130,209,104, 68, 64,
+ 64, 0, 60, 61, 61,209,166, 77, 27, 24, 12, 6,203,113, 91, 9,129,234,202, 99,230,247, 27,141, 70,104, 52, 26, 16, 66,208,170,
+ 85, 43, 20, 20, 20,160, 89,179,102, 16, 8, 4,208,233,116,208,235,245,150,255,101, 51, 60,216,186,117,107,136,197, 98,100,100,
+100, 32, 63, 63, 95,105, 50,153, 80, 89, 89, 73,253,241,199, 31,202,234,234,106,180,110,221, 26,222,222,222, 47,176,237,163, 90,
+183,110, 13, 30,173, 71,193,153, 20,148,231,103,129, 54, 25,160,169, 44, 66,238, 31,123,161, 87,149, 49,242,218,178, 81,110, 24,
+ 4, 4, 4, 40, 87,174, 92,105,241,226,148,148,148, 80, 23, 47, 94,132,153,180,105, 0,193,182, 18, 30,213,133,209,168,129,209,
+ 80, 13,137, 71, 83,136, 37,254, 80, 40, 86, 75,229,114,185,113,254,252,249, 1, 86,242,176,102,205, 26, 84, 84, 84, 48, 83, 24,
+239,195,252,249,243, 73,255,254,253, 73,175, 94,189,200,231,159,127,254,219,232,209,163, 49,114,228, 72, 0,192,233,211,167, 43,
+119,239,222,141,241,227,199,143, 62,116,232,208, 94, 54,101, 54,127,254,124, 50, 96,192, 0,242,234,219,239,226,249,237, 71, 48,
+231, 95, 99,241,222, 71,211,161,213, 87,227,198,245, 60, 40, 20,219,240,235,168,126,144,182,106,226,116,219, 24, 49, 98, 4,215,
+175, 63, 66,132,133,133,213, 34,253,186,129,128, 15, 53, 21,112, 84, 84,148,212,145,253,135,102,233,215, 51,103,191,174,181,207,
+214,250,175, 79,222, 91,129,129,228,173,192,191,220,249,117,247,237,121, 34, 92, 37,175, 30, 75,218, 25,162,126, 96,168,163, 68,
+ 56,237, 1, 0,128,205,155, 55,167,142, 26, 53, 74,102,157,156,198,214, 49,103,208,161, 67, 7,140, 26, 53, 74,182,121,243,230,
+212,134,142,213,251,251,142, 29,208,209,131, 15, 47, 10, 48, 16,130,203,101,122, 36,100,235,176,249,196,109,252,121,189, 20,183,
+ 53, 64,137,214,132,235,213, 4,119,116, 4,213,122,131,172, 33,242, 98,166,230,233,245,122,104, 52, 26, 52,107,214, 12,221,186,
+117, 51, 43,122,254,232,211,167,143,133,176, 25,210,174,143,176, 25, 66, 55, 24, 12,208,235,245,160, 40, 10, 33, 33, 33, 40, 47,
+ 47, 71, 94, 94, 30, 74, 75, 75,209,182,109, 91,240,120, 60,232,245,122,232,116, 58,203,111,236, 33, 40, 40, 72,214,178,101, 75,
+ 92,188,120, 17,251,247,239,199,158, 61,123,148,123,246,236, 57,124,244,232, 81,240,249,124, 60,247,220,115,104,223,190,189, 6,
+230,192, 59, 22,242, 70, 7,251,251,160, 36,231, 44,174, 30,252, 25, 23,247,174,196,229,189, 10,220, 58,249, 43, 68, 60,154,145,
+ 87, 96, 79,206, 59,239,188,147, 26, 28, 28, 44,243,246,246, 70,102,102, 38,242,243,243,149,241,241,241, 82,107, 69,192,236, 9,
+224, 37, 36, 36,160,107,215,174,118,239, 77,175,171, 64, 69,121, 54,220,220, 60,224,235,223, 73,233,225,217, 2, 63,253,180, 81,
+ 74, 81,188,190,204, 53, 94,229, 41, 80,254,239, 61, 68,116,170,174,183,110,239,221,187, 23, 18,137, 4, 93,187,118, 69,219,182,
+109,153,225, 3, 99, 89, 89, 89,245,246,237,219,125,195,194,194, 70,111,221,186,117, 55,219,186,155,148,180, 23,222,222,158, 24,
+ 52,248, 89,117, 88,175,167, 49,230,237,201, 80, 83, 70, 20, 21,150, 98,218,140, 47,176,176,119, 7,244,106,226,188,146, 60, 98,
+196, 8,242,205, 55,223,112, 74,192, 99,162, 8,216,194, 99,179, 22,192,163,158, 85,224, 12, 1, 59,138,181,197, 53, 10,132, 53,
+ 81, 51,199, 30, 7,121,143,171, 71,161,142, 39,128, 56,226, 1, 96, 48,103,206,156,212, 33, 67,134,200,250,244,233, 83,239, 49,
+235,115, 13,193,250,250, 33, 67,134,212, 10,246,179,117,172, 65,235, 80,228, 33,235,222, 44, 16,253, 3, 68,120,198, 79,136,230,
+ 98, 30, 68,132, 64,172, 51,162,181,167, 0,101,132,224, 66,181, 17, 89, 42, 35, 90, 52, 9, 64,219,103, 6,215, 43,139,177,250,
+153,169,126,173, 91,183, 70,143, 30, 61, 80, 86, 86,134,242,242,114,148,151,151,195,203,203, 11,125,251,246,133, 94,175,183,228,
+ 4,168,143,176, 25,101,194, 96, 48,128,162, 40,132,134,134, 66,163,209,160,168,168, 8,133,133,133, 40, 42, 42,130, 74,165, 66,
+104,104, 40, 4, 2,129, 69, 94,125,121, 5,234, 42,101,193,193,193,178,144,144, 16,220,184,113, 3,201,201,201, 72, 79, 79,135,
+187,187, 59,158,127,254,121,244,232,209, 99,175, 88, 44,158,205,118,218,222,230,205,155,119, 7, 55, 9,122, 45,164,153, 47,170,
+175,255,129,172,228,181, 40, 72,255, 13,126, 34, 19,134, 14,121, 30, 61,122,244,152,244,254,251,239,239, 98, 35,203,219,219, 27,
+189,122,245, 2, 33, 4, 39, 78,156, 64, 70, 70,134,178,160,160, 64,249,245,215, 95, 75,227,226,226,100, 76,230,196,222,189,123,
+ 35, 45, 45,205,174,188,169, 83, 39,167, 86,148,101,203, 74,139,206, 67, 36,246, 71,211,230,207, 41,131,154,246, 81,122,121,183,
+221,251,237,162, 31, 70, 49,242, 54,191,239,142, 45,199,117,168, 79,233,201,202,202, 66, 96, 96, 32, 6, 12, 24, 64, 63,243,204,
+ 51, 80,171,213, 80,169, 84, 88,182,108,153,103,167, 78,157, 94, 86, 42,149,187, 29,105, 19, 87,175,102,161, 77,235,150,120,245,
+213,209,238,159,252,123, 38, 74,170, 42, 80, 92, 82,140,216,247,190,192, 23, 99,134, 96, 72,235,224, 70,145,255,146, 37, 75,208,
+173, 91, 55, 44, 93,186,148, 83, 2, 30, 34,172,199,253,237,225,161,101, 2,116,229,172, 2,115,114, 31,151,100, 2,180,135,186,
+137,120, 92,161, 4,184,146,172, 93, 45,207, 21,175, 26, 46, 72, 15, 92, 71,129,160,234,241, 88, 56,132,119,222,121, 39,181,238,
+239,172,143,253,248,227,143,172,100, 50,215,217,186,158,173, 12, 6,235, 54,111, 77,157,251,250, 4, 24,211,147,112,179, 2,240,
+164,220,208,198,147,135, 2, 19, 5,190, 72,128,180, 66, 19,180, 52, 16, 36,226, 35,164,247, 32,188,191,104, 77,106, 67, 10,128,
+193, 96, 0,159,207, 71,187,118,237,208,171, 87, 47, 84, 86, 86, 66,171,213, 90,230,231,235,245,122,248,251,251, 99,192,128, 1,
+216,189,123,183,101, 72,192, 22, 76, 38,147, 37,139, 96,231,206,157, 97,118,211, 67,171,213, 90,218, 51,227, 73,232,220,185, 51,
+ 74, 75, 75, 81, 93, 93, 93,111, 91,174, 75,230, 71,143, 30, 77,141,142,142,126,190,107,215,174,135,173, 18, 1,149, 15, 28, 56,
+240,176, 88, 44,142,145,203,229, 90, 71,202,242,232,209,163, 9,209,209,209,149, 93,187,118,221,101, 37,175,120,224,192,129,203,
+222,127,255,125,214,217,122,166, 79,159,158,186,114,229, 74,217,240,225,195,113,227,198, 13,229,149, 43, 87,144,155,155, 11, 47,
+ 47, 47,165,175,175, 47, 34, 34, 34,240,227,143, 63,162,119,239,222,172,239,237,173,183, 94, 79,253,241,199,117, 50,173,182, 20,
+190,126,161, 74, 79,175, 86,240,242,110, 13, 85, 85,193,238, 5, 11,215, 34,250,213,161,216,252,190,187,165,156,108, 89,108, 47,
+190,248, 34,146,146,146,144,159,159,207, 43, 45, 45,133, 86,171, 69, 90, 90,154,192,172,116, 86, 30, 63,126,220,161,246, 16, 25,
+249, 34,118,238,220,141,202,242, 18,228,223,190,131,247,223,249,151,254,195,143,231, 11,199, 60,223, 15, 3,116,149,128,155,115,
+244, 48, 98,196, 8,242,217,103,159, 89,210, 65,135,132,132,224,155,111,190, 1, 0,178,111,223, 62, 46,109,248, 35, 82, 10, 30,
+165, 2, 64,141, 31, 63,222,218,133, 70,213,113,247, 83,142,186,255, 93, 65,238, 22,146, 47, 94, 11,123,217,246, 28, 9,254, 43,
+ 46, 94, 11,107, 87,188, 53, 49,215,117,217,179, 33,237,226,181,197, 46,149,247, 55,192, 63,170,147,104,219, 79, 38, 59,167, 51,
+ 42,139, 14, 31,130,155, 81,131,115, 85, 4, 41, 85, 70, 8, 41, 10, 1,132, 64,214,204, 23,126, 77,131,100, 45,159,149, 2,235,
+182,218,245, 0,180,109,219, 22,125,250,244,129, 70,163,129,193, 96,128, 80, 40,180, 16, 54, 99,165, 7, 5, 5,161,127,255,254,
+ 72, 78, 78,110,208, 3, 32, 16, 8,208,163, 71, 15, 80, 20, 5,181, 90,109,241, 46, 48, 74, 59,147, 93,144,166,105,116,239,222,
+ 29,191,255,254, 59, 28, 9,174,220,188,121,179, 18, 0,165, 80, 40, 40, 0,158,168,201,182,151, 43,151,203, 13,206,148,229,230,
+205,155,119,155,229,121, 2,240, 7, 80, 42,151,203, 29,206, 77, 60,125,250,244, 84, 0, 88,190,124,185,204,205,205, 13, 57, 57,
+ 57,240,247,247, 87, 2, 64, 65, 65, 1, 70,140, 24,129,197,139, 23, 59, 36,115,202,148, 73,169, 10,197,106,169, 94, 95, 33,147,
+ 84,222, 84,122,251,134,192,221,179, 57,220, 61,155,227,192,161,123,160,134, 52,108,113,175, 95,191,158,154, 58,117, 42, 41, 45,
+ 45,197,139, 47,190,168, 15, 8, 8, 16,210, 52,141,220,220, 92,135, 61, 98, 0,176,110,221,122, 74, 46,143, 37,222,151, 50,240,
+206, 59,111,161,101,104, 71,225, 55, 51,223,162,215,173, 88,207, 91,198,215, 58, 85,151, 71,140, 24, 65,230,206,157, 11, 95, 95,
+ 95,220,190,125, 27, 18,137, 4, 52, 77,195,195,195, 3, 95,125,245, 21,167, 4, 60, 4,132,133,133,213,235, 5, 96,155, 10,216,
+229,120,204,103, 21, 80,197,107,139,109,158,112,210,250,167,214, 22,223, 47,175,174,165,206,184,238, 89,144,182,171,229,113,120,
+140, 96, 38, 27,234,149,200, 17, 82, 31,163, 78,201,191,149,131, 14,134, 59,240, 10, 8, 70,191,238,157, 16,208, 34, 80,246,209,
+202, 77,169, 91,210,167,219,245,162,181,107,215, 14, 3, 6, 12,176,140,199,243,249,124,232,116, 58, 75,234, 94,235, 97,130, 86,
+173, 90,161,127,255,254, 72, 77,181,221,244, 36, 18, 9,194,194,194, 32, 16, 8,160,215,235, 45,191,179,158, 58,104,189, 16, 16,
+143,199, 67,207,158, 61,145,145,145,225,112, 25,152,189, 3, 85,230,173,209, 48,147,126,163, 23, 37, 48,123,136, 44,237,112,229,
+202,149, 82,181, 90, 13,157, 78,135, 78,157, 58, 33, 62, 62, 94,233,216,125,197,166, 2,128, 66,177, 90,166,209, 20, 65, 36,242,
+131,155,208, 75,201,227, 9,176, 49, 97,175,236,181,152,200, 6,229,173, 89,179,134, 82, 40, 20,212,119,223,125, 71,107, 52, 26,
+ 0, 64,104,104,168, 67,233,151,173,161, 80,172,166,126,252,113,205,136,201,159,125,151, 84, 35,143,240, 66, 67,159, 66,232,203,
+ 47,191,246,206, 59,239, 36, 56, 35,115,225,194,133, 92,163,126, 76,148,128,134,200,255,161, 42, 0,127, 87,184,114,218, 95, 93,
+ 98,110, 44, 81,187, 80,158,171, 21, 6, 78, 1,113, 2, 91,247,238, 75,173, 85,118,149,185, 56,122, 35,151,245,239,163,162,162,
+224,231,231,103,137,240,167,105,218,226,194,103, 60, 0, 76,208, 31,179, 34, 96, 72, 72, 8, 40,138,194,150, 45, 91,238,147,183,
+100,201, 18, 36, 38, 38, 90,174, 53,153, 76,118,151, 3, 22, 10,133,232,221,187, 55,216, 68,199,255,141,149,181, 70,215,117, 70,
+ 17,168, 33,245,181,168, 9,199,162,149,108,228,153,149, 37, 10, 0, 86,174, 92, 73,166, 79,159, 78, 29, 58,228,252,212,252, 41,
+ 83,166,238, 51,123, 77,120, 52, 77,155,120, 60,158,196,209,225, 23, 6,156,117,255,120, 41, 1,118, 59,106,103,215, 17,230,192,
+129, 3, 7, 14, 28, 56,252,125,193,227,138,128, 3, 7, 14, 28, 56,112,224, 20, 0, 14, 28, 56,112,224,192,129, 3,167, 0,112,
+224,192,129, 3, 7, 14, 28, 56, 5,128, 3, 7, 14, 28, 56,112,224,240, 68,160,214, 44,128,179,103,207, 58, 29,193,105, 43,152,
+144,147,199,201,227,228, 61,145,242,200, 75, 47,203,241,219,175, 10, 40, 20, 10,158,173,108,125, 92,249,113,242, 90,183,110,109,
+185, 38, 55, 55,151,122,220,228, 61,233,239,195, 97, 5,128,105,220, 13, 92,239,204, 13,254,157,229, 57, 35,243,113,127,222, 90,
+ 80, 40, 20, 66, 0,222, 0,220,205,245,129, 6, 80,236, 76,242,148, 7, 12,226,170,103,174,167, 76, 31,201,244,165, 69,139, 22,
+ 73, 79,156, 56,161, 60,114,228, 8, 0, 96,240,224,193,232,215,175, 31,235, 84,194,143,226, 61,188,244,178, 28, 47,142,232,101,
+ 4,228, 2,185, 92, 78,131,155,246,201,161, 14, 90,183,110, 77, 70,141, 10,177,236,239,222, 13, 98,143,180,237,201,155, 55,111,
+160,101,255,235,175,143, 54, 74, 30,135,250, 21, 0,144,109,247, 47, 0, 65, 77, 40,107,204,255, 80, 78, 16,239, 67,147,103,235,
+121, 27,249,204,143,245,243, 50,196,127,241,220,209,159,183,109, 94, 54,164,105,139,144,224,138, 10, 3,124,124,220,112,183,224,
+ 58,221,181,107,143, 82,133, 66,209, 71, 46,151,223,112, 68,166,124, 82, 15,146,115, 61, 11,215,111,106,145,119,135,160, 85, 51,
+ 10, 33,109,197,104, 31, 18, 10,197,186,204,199,165,177,218, 82, 36,152,181, 6, 30,250, 61,158, 63,127, 94, 25, 22,182, 31,171,
+ 86,169,145,154, 10,124,250,233, 1,228,229,229, 41, 71,141, 26, 5,177, 88,140,219,183,111,203,198,140, 25, 3, 87, 40, 4,175,
+189,246, 26,169,168,168,144, 69, 68, 68,224,189,247,222, 75,117,162,206,240,228,114, 57, 94, 28,209,139,142,141,141, 21, 0,171,
+241,219,175,128, 66,161,160,216,230,236,231,240,207,129, 94, 63, 23,201,201,177, 24, 62,124, 53, 70,141, 90,136,221,187,107,218,
+158,179,196,125,245,234,108,252,242,203, 24,140, 29,187, 19,243,230,213, 40, 1,141,145,247,164,131, 75, 4,228, 8,195, 90,145,
+ 61, 69, 1,244, 86,191, 39,246, 89,151, 45, 93,252,250,158, 93, 63,197,117,232,208,177,211,216,151, 7,163, 85, 11,111,248,250,
+136, 80, 86,174, 69,193,157, 86,188,107, 57,101,129,123,118,253,164, 92,182,116,241,119,239,206,152,189,212,158,188,247,223,157,
+ 40,189,145,181, 71, 89,120, 59, 19,175, 68, 2,253,195,129,144, 54, 64,246, 77,130, 99,167, 52, 72, 82,102, 98,244, 48,111,210,
+ 46,116,164,236,251,101,155,156, 37, 50, 87, 90,254,148, 13,217,143, 68, 9, 40, 45, 45,197,123,239,169, 17, 20, 4, 68, 69, 1,
+ 11, 22, 84,227,204,153, 51, 48, 26,141, 16,139,197,104,210,164,137,114,207,158, 61,152, 58,117,170,108,205,154, 53, 14,149,221,
+244,233,211,165, 23, 46, 92, 64,112,112,176,114,251,246,237,212,198,141, 27, 1, 64,153,146,146,130,183,222,122, 11,107,215,174,
+117,244, 89,133, 0,144,180,239, 52, 15, 88, 77,215,124,222,159,227,159, 3,103,253, 3,192,184,113, 59,144,156, 92,243, 25, 27,
+123, 29,140, 71,192, 81,111, 0, 35,239,245,215, 55,224,151, 95,106, 62,199,140, 57, 10,198, 35,192,121, 3, 26, 38,126,235,227,
+117,149, 0, 46, 8,208,134, 23,224, 73, 38,127,133, 66, 33, 56,152,188,237, 19,217,160, 94,157,198, 70,134,162, 71,215, 38, 8,
+240,147,128, 2, 5,111, 79, 17, 66, 67,252, 17, 49,184, 45, 6, 15,232,217,230, 96,242,182, 79, 20, 10, 69, 83,123, 50,111,100,
+237, 81, 14, 12,175,196,182,101,192,228, 40,160,147,217,243,231,225, 14,116,238, 0,124, 62, 11,232,219,163, 18, 55,178,246, 40,
+ 27,243,138, 26,235,245,176,163, 72, 60,146, 14,196,223,223, 31,123,246, 72, 80, 84, 4, 36, 38, 2,101,101, 2,116,232,208, 1,
+ 35, 71,142,100,150,123, 69,106,106, 42, 50, 50, 50,148,139, 22, 45,146,178,149, 59,124,248,112,233,197,139, 23,149, 66,161, 80,
+ 89, 86, 86,219,147,165,209,104,176,118,237, 90,200,100, 50, 71,203,147, 6,128,223,126, 85, 32,105,223,105,222,111,191, 42, 26,
+245,236, 83,166, 76, 33,204,214,208, 49,150,245,130, 56,113,172, 65,172, 94,181, 74,186,122,214, 44,233,217,169, 83, 73,222,139,
+ 47,146,147,147, 38,145,229,239,189, 39, 93,189,106,149,180, 49,207,220,216, 58, 99, 75, 6,219, 99, 15, 90, 30,227,250, 31, 53,
+ 42, 4,177,177,201,181, 62, 25,140, 26, 21, 82,107, 60,223,158,188,121,243, 6, 98,222,188,129, 24, 51,230,151, 90,159, 12,230,
+205, 27,200, 90,222, 63, 9, 97, 97, 97,181, 54, 91,202, 1,167, 0, 60, 14, 44,240, 16,113,241,220,209, 5, 29, 58,116, 8,237,
+211,171, 89,237,138,192,163, 32, 20,242, 33, 17, 11,224,230,198, 67, 72, 59, 63,132,132,116,104,114,241,220,209, 61, 10,133,162,
+ 94, 79,145,124, 82, 15,194, 71, 37,102, 77, 6,180, 58,224, 70, 30, 80, 86, 1,148, 87, 2,155,118, 1, 51, 62, 3,226, 22, 1,
+253,122, 1, 60, 82, 9,249,164, 30, 92, 67,181, 66,247,238,221,101,191,253,214, 25, 77,154, 0, 19, 39, 10,208,180,233, 51, 24,
+ 60,120,176,108,207,158, 61,212,200,145, 35,101,195,135, 15, 71,112,112, 48, 78,159, 62,141,173, 91,183, 42,199,141, 27, 39,253,
+225,135, 31, 26, 36,160,129, 3, 7, 74,117, 58,157,210,205,205,173,193,255, 86, 42,149, 24, 50,100, 8, 27, 50, 35, 49, 49, 49,
+ 68, 46,151,235,205, 49, 35,176, 34,127, 10, 0, 98, 98, 98, 28, 86,208,210,211,211, 45, 91, 67,199,156,108,182, 84, 99,154,247,
+234, 85,171,164,237,175, 92, 81,142, 57,123, 86,217, 42, 43, 27,194,202, 74, 52,203,186, 2,233,239, 39,149, 65,153,153, 74,133,
+147, 74, 64,122,122, 58,166, 76,153, 66,102,204,152,225,180, 18,193,200, 96,115,140,173,188,186, 68,207,230,152, 61, 48,164,207,
+124,234, 71,117,104, 84, 91, 97, 72,159,249,188,218, 39,136,235, 64, 26, 32,126, 54,248,187, 42, 0,196,198,230, 50,193, 15,240,
+254,136,139,111,147, 56, 90, 22, 23, 47,101,142, 8, 13,241,183,144,190,173,101,154,197, 34, 1,140, 70, 26,161, 33,254,184,120,
+ 41, 51, 4,128, 79,125,242,114,174,103, 33,242,249,154,239,251,211,128,183, 62, 6, 86,109, 2,110,223, 3,174,100, 3,103, 46,
+ 18,164, 28, 7, 14,157, 0,134, 15,174,185,190, 17,186, 25,245, 0, 95,241, 35, 81, 76,230,204,153,147, 90, 93, 93, 19,111, 57,
+113,226, 68,156, 60,121,146, 82, 40, 20,169,204,185,210,210, 82, 89,231,206, 2, 76,157, 10,244,236,121, 10, 38,211, 21,101,126,
+126,126,189,158,148,233,211,167, 75, 41,138, 82,178, 93, 28,166,176,176,208,174, 87, 38, 38, 38, 6, 9, 9, 9, 0, 64,210,210,
+210,244, 86,239,130, 98,136, 63, 33, 33, 1, 49, 49, 49,143,178, 63,112,246,152, 77,232, 46, 92, 64,187, 63,254, 48, 47,130,164,
+135,145,166, 65, 27, 76,160, 13, 70, 4, 29, 77, 67, 37,203,245,214,235, 35,220, 63,255,252, 83,249,220,115,207, 61,112, 37,192,
+ 25,239, 66, 99,201, 95, 63,170,131,205, 45, 57, 54,217,169,123,186,218, 39,200,230,246,203,152, 95, 56,182,111, 36,108, 42, 0,
+212,132,178,251, 54,103, 9,135, 5, 33, 58, 42,143,106, 96,123, 44,148, 13,178,205,207,230,214, 8,229,229,190,235,237,252,135,
+ 77, 40, 20, 10, 65,211,230, 33, 93,154, 55,245, 4, 33, 64,218,137, 60,236, 63,148,131,253,135,114, 80, 88,172, 6, 33, 4,185,
+249,149,116,234,241, 92,100,223, 40, 67, 96,128, 4,205,155,119,240, 69,205, 18,173, 54,113,253,166, 22,253,195, 1,157, 1,216,
+119, 4, 80,158, 36, 88,186, 30,184,146, 3, 12, 25, 0,116, 10,161, 32,224,215, 44, 45,222, 55,172,230,122,150,207,234,204,119,
+182,150,162, 45,247,240, 35,115, 0,153,151,115,197,211, 79, 63, 45,171,123,142,207,231, 43,187,116, 41,196,167,159, 2,255,249,
+ 15, 65,243,230, 89,184,121,243,102,189,178,180, 90,173, 93,203,223, 26, 13,201, 98,144,144,144,192,144,189, 69, 17, 96, 54, 43,
+226,167,204,215, 61, 10,167, 93,221,246,207,246, 88,189,232, 88, 92,162,212, 27, 12,208, 27, 12,208,155,204, 43, 40,210, 52,104,
+147, 9, 38, 19,141,150,119,238, 52,102, 56, 11,106,181, 26, 42,149, 74, 57,101,202, 20, 50,117,234,212, 70,121, 19, 92,165, 4,
+184,202,242,103,136,126,220,142,191,190, 51,159,206,120, 1, 24,162,127,125,195, 95,223,153, 79,206, 11, 96, 31,214, 75, 3,179,
+ 90, 14,184,190, 89, 0,141,152, 29, 80, 95, 20,187, 51,209,237,164,129,255, 32, 14,252, 63,171,231,182,241, 91, 86,141,171,129,
+160, 66,103,228,213,251, 27,230,127, 40, 0,244, 54,187,177, 11,116, 77,180,191, 8, 0,144,119,187, 18, 26,141, 17, 0,208,161,
+189, 31,130, 2, 36,200,188, 88,200,187,122,173, 20, 98, 49, 31, 33,237,124, 81, 86,161, 7,128,122, 5,231,221, 33, 8,105, 83,
+243,255, 47, 12, 2,194,186, 80, 16, 9, 1,163, 17, 24, 54, 16,240,245, 2,114,114,129,225,131,128, 54, 45,107,174,127,196,168,
+ 79, 9,120, 34, 70,127, 10, 11, 11, 29,106,135, 85, 85,236, 87,223, 77, 72, 72,160, 98, 98, 98,136, 89, 9,176,246, 14, 60,242,
+178,107,223,190, 61,201,201,201,161,156, 61, 95, 23,110,215,179,161, 51,232, 65,241, 5, 48, 17, 2, 10,128,209, 68,195, 96,164,
+ 65, 76, 38, 80,215,174,186,228,190, 47, 92,184,128,192,192, 64,229, 55,223,124, 35,251,232,163,143, 82,157, 85, 2,234, 14,163,
+ 56, 74,220,174, 34,255,220,220, 92,170,117,235,214,100,220,142,251, 21,130,225,171,135, 67,184, 59, 27,187,119, 95,183, 68,238,
+219, 27,187,103,228,189,190,225,126,133, 96,236,206,177,120, 42,189, 8, 95,127,125,148,181,188,127, 34,249, 51,120,146,102, 1,
+ 52, 68,162, 14, 19,108, 35,167, 56,214, 47,247, 1,207, 38,160, 38,148, 57,250, 31,148,143,143, 27,202,202,181, 8,244,119, 71,
+212,232, 78, 48,154,104,136, 68,124,240,121, 60, 16, 66, 48,114, 88, 8, 34, 35, 66, 64, 81, 64, 73,153, 6, 62, 62,110, 0, 80,
+ 90,159,192, 86,205, 40, 92,191, 69,208, 41, 4,120,254,185,154,194,190,146, 13, 60,221, 9,240,243, 6, 70, 72, 1,154, 6, 4,
+124, 32,235, 70,205,245, 57,121,132,237,187,117,228,123, 99, 27,254, 35,153, 6,184,114,229, 74,233,162, 69,139,112,253,250,117,
+164,165,165, 41,191,253,246, 91,153,167,167,167,101,217, 89,147,201, 36,251,255,246,190, 60, 46,170,170,255,255,125, 7, 24, 6,
+ 24, 20, 92, 17,141, 4,151, 82,220,113, 65,205, 98,204,109, 68,192,141,236, 41,203, 53, 70,158, 50, 43, 23,212,210,172,167,126,
+ 10,143, 38, 79,150, 58,110, 73,223, 22,109, 68, 67,220, 48,106,232,209,212, 74,220,114, 41, 21, 76, 76, 68, 18,101, 27,102,152,
+229,158,223, 31, 51, 23, 47,195, 44,247,206, 12, 98, 61,247,253,122,241, 98,230,204,153,207,156,123,206,189,231,253,249,124,206,
+231,124,206,197,139,109,212,239,188,115, 19, 20, 69,161,180,180, 43,186,118,237,136,203,151,109, 47,165,208, 52,109,179,252,233,
+167,159,110,208, 63,132, 16,124,247,221,119,188,174,153,173, 4, 60, 76,228,239, 9, 37,129,141,187, 29,218, 67,252,235,111, 32,
+ 62,128,152, 38,160, 40,192, 96, 50, 66, 79, 76,168, 49, 26,161,237,252, 56,112,241, 87,183,219,222,163, 71, 15, 80, 20,229, 18,
+249, 3,192,192,129, 3,177,101,203, 22,170, 87,175, 94,196, 81,153, 51,108,217,178,133,178, 38,124, 91,101,124,144,148,115,159,
+248, 1, 64,156,125,181,222,231, 76,192, 96,118,118, 1, 39,121, 19,118,223, 39,126, 0,120,236,167, 63, 27,200, 91,178,100, 24,
+ 86,174, 60, 34, 48, 63, 7,242, 7,132, 32, 64, 91,238, 65,182,155,208,173,201,141, 16, 64, 52,229, 94,163, 53,154,124, 21,108,
+254, 13,238, 10,140,119,201,205,130, 59, 55,110,154,173,190, 15, 54,252,140, 51,231, 75, 97, 48,208,160,105, 98, 81, 90,168,186,
+216,128, 27, 55,171, 80,114,179,224, 26, 0,187,102,101,167,142, 18,252,144,111,126,221, 42, 10, 56,125, 1, 72,250, 7,208,249,
+ 81,179,219,255,189,143, 0,177, 15, 32, 18, 1, 63,228,155,235,187, 65,208,158,142,161,176, 30,239, 7,110, 61, 92,188,120, 17,
+ 18,137,185, 79,246,239,223,143,207, 63,255, 92,157,151,103,230,130,213,171, 87,199,180,104,209, 66,125,233,146, 17,155, 55, 3,
+167, 79,247,135,151,215,227,178, 14, 29, 58,200,236,201, 11, 8, 8,224,252,219, 70,163,241, 47,255,224,178,201, 63, 34, 34,130,
+216,251,227,171, 44, 20,180,110, 35,187,167,175, 69,165, 94, 15,173,222,128, 90,163, 17, 6, 98, 66,141,193,128, 42,189, 30,197,
+161,161, 50,119,218,237,239,239,143,128,128, 0,217,150, 45, 91, 40,190,219, 59,173,137,222, 89, 25, 31, 37, 96,224,192,129, 78,
+203,184,120, 1,236,145, 63,219,250,231, 35,207, 30,249,179,173,127, 1,252,200, 95, 80, 0, 30, 0, 26,123, 75, 33,249, 42, 24,
+ 4,156, 21, 13, 99,100,100,239,226,171,215,238,129,166, 9, 22,207,139,198,229,171,119,113,233,114, 25, 40, 10,245, 2, 2,105,
+154,224,234,181,123,136,140,236,125, 30,128, 93, 63,113, 68,167,174,216,255, 29, 96, 50, 1,164, 16, 80, 31, 7,178,191, 5,228,
+ 51, 0,217,115, 64,222, 9,115, 61,147, 9,216,255,157,185,126, 19,130,192,113, 46,128, 7,142,187,119,239,170,187,117,187,134,
+159,126, 2,142, 31, 55,161, 67,135,115, 56,125,250,180, 58, 46, 46,142,236,219,183, 79,157,147,147,131,219,183,111,163, 95,191,
+126,152, 50,101,138, 44, 51, 51, 51,207, 81, 18, 31, 66,136,204,158, 23,192, 26,140,226,193, 23,204, 18, 0,123, 41,160,169,192,
+182,232, 11, 11, 11, 41,123,127,182,234, 59, 66,112,223,190, 40, 27,246, 36,238,106,117,184,103,168,133,206,104, 68,181,193,132,
+ 10,189, 30, 85,195,159, 70,171,168, 40, 23,189,130, 20, 6, 14, 28,136,158, 61,123,202,142, 31, 63,158,231,142, 12, 54,209,219,
+ 42,115, 71, 9, 96,207, 5,182,202,184,192, 22,249, 51,150,186,117,166, 64, 46,176, 69,254,108,121,236,173,129, 2,249, 59, 39,
+127, 65, 1,248,171,187, 45,152, 32, 77,142,203, 0, 10,133,194, 20,217,107,216,240,130,130,171,191,254,152, 95, 12,154, 38,144,
+143,136,192,185, 11,165,120,255,131,227,120,111,205,177, 58,242,255, 49,191, 24, 5, 5, 87,175, 71,246, 26,246,138, 66,161, 48,
+216,147,169,220,126,150, 50,161, 25,214,110, 51,147,252,198,247,128, 79,119, 3,178,104,160,111,119, 32,239, 75,115,249,218,109,
+128, 9,205,220,201, 8,232,110,160, 39,113, 34,167, 73,214, 14, 53, 26, 13,122,246,212, 97,192, 0, 96,192, 0,160,127,127,130,
+194,194, 66,100,103,103,227,196, 9,179,246, 20, 19, 19,131,168,168, 40, 78,233,129, 51, 51, 51,243,184, 16,187,209,104, 68, 96,
+ 96, 32,111, 43,214, 18,245, 95, 23,241,207,188,119,213,130,101,254, 28,149,241, 81, 2, 60, 81, 15, 0, 20,201,201,121,250, 65,
+131,100,151, 70,141,148,149, 60,246, 24, 74,124,124, 80,242,248,227,184, 60,122,180,204, 52, 56, 90,166,176, 44,209,240,197,128,
+ 1, 3,224,142,213,207,150,225,172,140,107, 31,218,178,250, 7, 12, 24,224,180,204, 21, 48, 57, 2,238, 39, 5, 42,112,203,130,
+103,114, 4,176,146, 2, 9, 30, 1,142,228, 15, 8,153, 0, 27,213, 50,127, 24,127, 67,161, 80,148,125,180,238,131,244,156, 67,
+ 59, 23,254,113,171,170, 83,231,240, 96,196,142,234,132,224, 32, 9,238,149,235,112,250,151,219,184,122,237, 30, 10, 10,174, 30,
+ 27, 61,102,202,110, 0, 55,156,201, 12,239, 58, 78,118, 36,127,159,250, 88,126, 37, 98,135, 3,155, 87,154, 51, 1, 22, 92, 7,
+182,126,101,182,252, 77,104,134,240,174,227,100, 56,252,133, 39, 8,220,211,223,109,178, 93, 0,183,110,221,146, 5, 7,183, 82,
+159, 60,105,182,106, 46, 95,110,134, 1, 3,186,163,101,203,150,144, 72, 36,184,117,235,150,108,220,184,113,188, 82, 1,119,236,
+216, 81,246,219,111,191,169,237, 89,108, 70,163, 17,157, 59,119,198,214,173, 91,121,145,144,245,218, 63,235, 61,113, 37, 22,192,
+150,181,234,170, 5,235,140,220,249,144, 63, 91, 9,168,119, 95,156, 59,231,246,120,187,107,161,243,233, 55,174,191,229,105,121,
+142,200,159, 13,125, 92,103,128,227,250,191, 61,242,103, 67,216, 17, 96,223, 19, 96, 79, 49,240,182,103, 89,242, 41,231, 49, 1,
+123,202,234, 34, 46,126,246, 64,218,231,164,159, 60,210, 62,119, 2, 23, 95,153,251,134, 82,169, 84,238,184,112,238,200,250, 61,
+ 89,223, 71,132,180,239, 20,205, 58, 11,224, 68,100,100,239,159,198,197,207, 92,170, 80, 40, 52, 92,228, 89,210,251, 82,138,233,
+189,201,206,253,151,241,255, 62,182,115, 22,128,235,228,239, 17,135,201,195, 70,254, 0,240,236,179,207,226,236,217,179,152, 49,
+227, 36, 0,160,127,255,254,120,230,153,222,178,215, 95,127,189,142,156,127,248,225, 7, 94, 50, 55,108,216,144, 7,128,138,141,
+141,141,169,170,170, 82,123,121,121, 65, 36, 18,193,104, 52, 66, 44, 22, 67, 42,149,202,220, 37,127, 0, 30, 81, 2, 4,252, 61,
+ 81, 84, 84, 68,229, 36,229,144,208,185,161, 50,116,180, 93,167, 56, 41, 71,205,213, 90, 47, 42, 42,162,118, 79,216, 77,186,164,
+118,145,253, 18,100,187,206,149, 9, 71,212,130,245,207, 15,222, 60, 38, 74, 79, 79,188,141, 33,143,122,200,219,247, 48,200, 99,
+ 60, 1, 21, 74,165,114,106,100,175, 97, 76,198, 24, 41,128, 86, 0,110, 1,208, 90, 78,121,227, 5,107,247,126,225, 13,130,194,
+ 27, 90,224,200,217,166,238, 7,234, 65,247, 47, 87, 88,136,190,174, 13,231,207,159,247,152,236,253,251,247,231,121,234,250, 88,
+235,254,148, 85, 57, 5, 75, 62, 0, 1, 2,172, 73,187,104, 97,145,199,158,233,162,162, 34,170,232, 31, 69,120, 88,159,229,135,
+ 5, 92,179, 0, 2, 0,229,234, 57,194, 2, 4, 8, 16, 32, 64,128,128,191, 46,132, 32, 64, 1, 2, 4, 8, 16, 32, 64, 80, 0,
+ 4, 8, 16, 32, 64,128, 0, 1,130, 2, 32, 64,128, 0, 1, 2, 4, 8, 16, 20, 0, 1, 2, 4, 8, 16, 32, 64,192,223, 3,245,
+118, 1,156, 57,115,198,229, 40, 74, 91,193,132,130,188, 70,147,231,244, 16,155,166,148,151,152,152, 24, 3, 64,173, 82,169, 60,
+ 34,111,202,148, 41, 49, 52, 77,123, 76,158,112,255, 53,141,188,228,228,228, 41, 10,133,226,171,198,108,159, 82,169,244, 1, 32,
+177,220,211, 58, 0, 52, 0,162, 80, 40,136, 48, 30,130,188,255, 37,121,158,242, 0, 16, 14,127,124,224,105,121, 15, 12,228,110,
+ 26, 33,213,233,156,219,103, 33, 66,143, 93, 47, 75, 30,214,172, 89, 35,115,210, 96,229,235, 0, 0, 32, 0, 73, 68, 65, 84,208,
+159,188,229,157,255,184, 25,220,149,199, 96,252,128, 3,234,240,102,217, 0,128,168,168, 40,183,199,179,107,219,157,120,180,245,
+183,240,243,243,195,136, 17, 35, 30,154,251, 67,169, 84,182,166, 2,164,135,148, 74,101,107, 15,201, 11, 19,249,250,231,216,147,
+167, 84, 42,125,148, 74, 37,229, 68,134, 15,211, 54,137,196,255,144, 82,169,108,173, 84, 42,189,156,125,207,149,199,193,133,123,
+227,120, 99,141,197,166, 77,155,198,110,217,178,101,129,143,143,207, 30,177, 88,156, 47, 22,139,127, 5,160,244,242,242, 82, 81,
+ 20,181, 94,169, 84,182,106,132, 62, 16, 32,160, 1,106, 22, 45, 34, 30,126,208, 26,109,206,115,150, 9,144, 16, 98,255,183,121,
+230,134, 38, 22,129,158,146,199,203,130,245, 36, 38, 79,158, 76,174, 94,189,234,148, 92, 85, 42,149, 58, 37, 37, 5,109,218,180,
+177,153,114,117,254,252,249,156,207, 20,103,228,173, 89,179, 70, 54,127,254,124,245,137, 19, 39,212, 86,138,128, 75,242,232,139,
+203, 33,234,254, 46, 62,253, 78, 15, 0,160, 47, 46,191,175, 29,118,127,151, 87,191,124,249,239, 0, 66, 19, 96,199, 33,179, 44,
+249, 83, 62,136,236,124, 1,128, 89, 9,200,207,207,231, 53, 54,105, 31,203, 98,202,127, 47, 67,181, 62, 88,173,169, 13,128,124,
+116, 57,218,135, 80, 8, 15,159, 70, 42, 43,117,216,185,115,103,147, 78,232,201,243,230,189, 10,154, 30,149, 60,111,222,171, 0,
+150,185, 45,111,238,188,151, 8, 77,143, 76,158,107, 91,158,163,148,204,236, 58, 74,165,146,154, 59,119,222,171, 52,109, 26, 53,
+119,238,188, 87,245,122,221, 50, 27,138,130,200,149, 92, 15,110, 66,207,190,255,118,237,218,165,158, 56,113,162, 44, 51, 51, 51,
+207, 29,161, 91,182,108,145,123,123,123, 63,233,237,237,253,172,151,151, 87,176, 72, 36,146,166,166,166,138, 22, 46, 92, 56,211,
+100, 50,193,104,198,179, 38,147, 41, 78,169, 84,254, 96,241, 6,232, 45,243, 95,163, 47,131,198,199,199, 19,174,243, 93, 86, 86,
+ 22,175,123, 58, 33, 33,129,184,243,125, 1,158,135, 95, 90,154, 71,229,105, 23, 45, 2,220,144,201,100, 4,228,123, 28,176, 83,
+242,143,138,138, 66,126,126, 62, 31,114,118, 72,242, 28,229, 53,144,159,146,146,130,194,194, 66, 88, 92,196, 30, 59,214,149, 20,
+ 71, 17,248,117, 5, 21,252, 37, 5, 0, 84,139, 69,212,228,201,147,157,106, 99,108,178, 46, 45, 45, 85,219, 35,255,148,148, 20,
+164,166,166,242, 34,127,203,123, 68, 71, 71,203,162,163,163,221,146,199,144, 61,243,127,213,191, 80,143,252, 23, 77,146, 32, 45,
+ 83,199,169,175,118,164, 75, 73,143,112, 17, 52, 90,130, 55, 94,144,224,196, 5, 35,180, 26,130, 26, 61, 32,235,115, 1, 23, 46,
+155, 16, 21, 21, 69,184, 42, 1, 41,111, 61, 78, 10, 78, 87, 34,176,153, 24, 33,237,164,104,221,182, 51,174, 23,232,209,177,187,
+ 1, 62,146, 82,228,238,185,131, 49, 99,198,144, 67,135, 14, 53,213,132,231,219,162,101,203,121,159,157,248,137,146, 63,214,229,
+ 85, 0,239, 1,168,117, 71, 94,203, 22, 45,231,237,248,238, 4, 53,178,207, 99,110,201, 83, 40, 20,226,144,144,118,243, 14,171,
+143, 80,253,123, 71,218,148,213, 4,228, 15, 0,117,199, 15,170, 84, 42,117, 92, 92, 28, 50, 51, 51,213,182,158,215,159,127,254,
+153,188,243,206, 59,216,183,111,159,195,241,221,186,117,235,112,177, 88,220, 67, 44, 22,207, 21,139,197,254, 55,110,220, 64,151,
+ 46, 93,224,229,229,133,192,192, 64, 92,189,122, 21, 82,169,212,251,231,159,127, 14, 58,126,252,248,145,151, 95,126,185, 35,128,
+235, 0,196, 48, 47, 15,216,157,248,216,243, 31,123,222, 98,202, 41,138, 2,197,193,106,217,187,119,175, 93, 25,236,114, 71,243,
+173, 61,100,101,101,185,245,253, 70, 85,144,147,147, 99, 44, 89, 41,221,198,187,239,190, 75,104,154, 6, 68,229,208,215,234, 32,
+246,149, 0,116, 16, 68, 34, 17,150, 47, 95, 78, 29,183,226,153,100, 7,178, 46, 92,184, 64, 50, 51, 51, 97, 79,222,164, 73,147,
+ 16, 25, 25, 73,185,218, 62, 44, 79,199,138,119, 95, 35,236,246,185,115,237,254,105,105,188,191,111, 47, 13, 48, 87, 5,128, 19,
+249,115, 69, 74, 74,138,211, 58, 92,136,203, 30,249,175, 90,181, 10,139, 23, 47,182, 86, 58, 92,234,116,114, 50,138,160,101, 87,
+ 80,225, 95, 82,108,139,127,215,174, 93, 20, 0, 48,255,237,173,185, 88,147,181, 35,242,183,120, 6,156, 90,237, 42,149, 74,109,
+109,225, 51,101,236, 62,230, 43,207,145,133,191,104, 18,247,147,226, 50,211, 3, 72,151, 71, 69,240,243,165,240,104,168, 23,238,
+220,163, 97, 48,122,161,172,156,160,162,154,224,234, 31, 52, 32, 2, 90,249,159, 99,250,199,225,164,176,244,205,199, 98,186,118,
+138,192,241,146,219, 8, 15,107,141, 30,189, 34,224,229,219, 2,143,134,223,195, 61,173, 14,165, 37, 38,252,113, 91, 7,127,239,
+ 66, 78,242, 26, 9,207,191,176,112,161,184,176, 93, 40,124,163,250,139,116, 71,254,251, 60,128,109,124,133,176, 44,241,231,167,
+189,186, 64,252,135, 56, 4,210,174,253, 68,149,231,143,186, 36,143,105,219,203,243, 94, 23,195, 55, 16,225,143, 69,138,126,251,
+229,148, 59,178, 60, 9,154,101,253, 67, 34,145,200, 0,168,173,199,240,228,201,147,156,200, 31, 0,124,124,124,130, 36, 18,201,
+244, 59,119,238,248,119,237,218, 21,125,251,246,133,183,183, 55, 62,252,240, 67,152, 76, 38,244,236,217, 19,187,119,239,198,207,
+ 63,255,140,115,231,206,193,203,203,107,189, 82,169, 76,216,176, 97,131, 35,171,186,110,158,243,132,199, 82,169, 84,202, 66, 66,
+ 66,212,132, 16,135,223, 41, 41, 41,145, 41, 20, 10,190,247,143, 44, 36, 36, 68,237,234,247, 25,162,190,116,233,146,195,121,163,
+ 91,183,110, 50,190,100,126,233,210, 37,245,115,207, 61,135,230,205,155,203,220, 81, 4, 20,115,166,145,164,228, 81, 8, 8,240,
+107,240,153, 70,163,197,242,229,203, 49, 24,160,254,216,187,151,220,136,143,183, 63,183, 79,237,106, 30,204,149, 19,208,110,248,
+ 56, 72,250,245,135,169,107,100,189, 58,134, 29, 25, 8, 94, 57,225,126, 93, 0,218, 49,179, 49,100,245, 23, 14,219, 55,109,198,
+ 72,180,104,233,111, 46, 88,158,142,249, 11,102, 0, 0,238,150,213,224,102,113, 1, 81,110,204,112, 89, 9,168, 89,180,136,184,
+162, 4,184,170, 0, 16, 46,150,250,195,130,194,194, 66, 44, 94,188,216, 85, 5,194, 46, 38, 79,158, 76,168,208, 93,212,228,201,
+225, 68,181,105, 32,176,253, 9, 66, 73, 95,115, 58, 8,182,200,218,154,148, 29, 45, 11,216, 3, 91,161, 56,113,226,132, 58, 58,
+ 58,186,158,235,159,175,188, 47, 22, 74,237, 78,110,207,175,214,112,150,179, 97,195,134, 24, 95,175,133, 16,137, 0,127, 63,160,
+188,146, 70, 45, 33, 8,240,163,160,163, 1,109, 45, 65,135,214, 34,208, 70,224,202, 13, 19, 10, 11, 11,213,142,148,179,121,175,
+142,140, 9,127,212, 95, 45, 22, 19,188, 52,125, 16, 76, 38,130,146, 82, 61,138,110,150, 3, 62, 55,224, 23, 92,139, 91,165,191,
+ 67, 36,174,192,197,139,229,104, 30,236, 88, 94,227,153,255, 45,150, 63,251,226,139,190,111,209, 64,240,226, 55,165,183,207,158,
+ 89, 70, 87, 86,186, 66,178, 4, 0, 36,205, 91, 44,255,199,212, 23,125, 87, 95, 51,161,195,148, 20,233,111,133,231,150,153,106,
+234,203, 83, 42,149,148,117, 48,155, 45, 52,107, 30,180,252,249,169, 47,248,158, 43,186,135,248,231,146,164, 31,253,107,254, 50,
+109,141,198, 93, 5,128,235,121, 25,142,198,194,196, 60, 35,227,198,141, 3, 67,250, 90,173,182,110, 12, 25,203, 63, 59, 59,155,
+211,152,250,250,250, 14,209,104, 52,143,119,235,214, 13, 50,153, 12,243,231,207,199,172, 89,179,204,147,185,193,128,237,219,183,
+ 35, 63, 63, 31,167, 78,157,194,206,157, 59,161,213,106, 59,211, 52, 45,119, 98,177,123,244,126,218,191,127, 63,167,165, 57,138,
+162,120,223,203,108,217,174,124,223,242, 12,231, 61,247,220,115, 40, 46, 46,182,249,121,104,104, 40, 92, 37,240,226,226, 98, 20,
+ 23, 23,187,165, 8,156, 59,123, 25,255,151,177, 15,195,134, 13, 65,100,207,246,247, 45,249, 95,110,226,200,145, 99, 24, 60,120,
+ 48, 81, 45, 89,130, 27,241,241,240, 27, 58, 20, 90, 59,103,103, 80,159, 93,166, 0, 96,193,144, 30,164, 87,233, 33,188,240,221,
+ 62,152,186, 70, 66,187, 96, 5, 0,192,111,245, 10, 72, 47, 95,192,194, 66, 49, 86, 31, 59,127,191, 31, 63, 91,228, 48,200,142,
+105,223,136,145, 67, 27,180, 47,247,155, 31,112,238,236,101,183,238, 31, 87,150, 20,216,238,126, 71,222, 0,111,190, 22,187,167,
+137,214, 93, 88,220,254,174,207,106, 81, 32,104, 7, 80,251,204, 15, 14,213, 63,159,154, 60, 57,188,110,176,119,237,218, 69, 97,
+211, 64, 98,237, 9,224, 74,214,165,165,165,245,200,217, 21,178,230, 10,150,210,225,148, 36,184,184, 11, 89,238,127,155,149, 55,
+110,220, 72,254,188,240, 58,218,117,245,130, 70,123,191,138,214, 68,160,211, 3, 6, 75,153,193, 72, 64, 68,230,215,191,156,203,
+ 71, 98, 98, 98,204,149, 43, 87,108,254,102, 96, 96,133, 90,163, 21,161, 85,139, 32,148,223,173, 65,121, 69, 57, 78,156, 44,193,
+205,219, 4,226,128, 26,180,239, 92, 13,109,205, 29,116,233,101, 64,199,110,181,216,185, 57, 31, 19, 38, 76,136,185,118,237,218,
+ 3,185,223, 44, 22,251,136,113,147, 38,183, 45,110, 30,140, 2, 35,224, 55, 98, 20, 68,193, 45, 91,209,149,149,163, 0, 28,102,
+200, 26,128,143, 66,161,208, 59,155,247, 1,140,140,155, 48,169,237,159,162,230,184, 94,109, 64, 80,191, 17,240, 14, 12,110,101,
+170,185, 47, 15, 0,184,144, 63,128,209,227, 39, 76,108, 75,188,124, 81,161,169, 69,143,168,193,144, 54,107,222, 74, 91,163,169,
+ 39,171,169,192, 88,255, 20, 69, 97,220,184,113, 4, 0,246,237,219,135,196,196,196,152,148,148, 20, 53, 31,242, 87, 42,149,190,
+229,229,229,211, 12, 6,131,200,223,223, 31, 79, 62,249, 36, 86,175, 94, 13, 31, 31, 31, 40, 20, 10,100,100,100, 32, 63, 63, 31,
+ 39, 78,156,192,183,223,126,139, 95,126,249, 5,173, 90,181,106,101, 52, 26, 31,133, 29,247, 63,219, 5,234,108, 9, 64, 36, 18,
+113,106,103, 99, 46, 1,236,221,187,215, 35, 75, 0,205,155, 55,151, 21, 23, 23,171,237,125,230,238,184,187,162, 8, 92, 94,180,
+136,148,165,165, 1,199,143, 3,199,143,227,238,164,177, 88,211,187,107,157,203, 62,178,123,119, 60, 51, 37, 22, 29,239,221,193,
+141,248,120,180, 92,180, 8, 93,211,210, 26, 44, 7, 88, 67, 44,123, 2, 93,229, 49, 88,184,232, 61,252, 27, 23,176, 38,122, 56,
+122, 12, 24,132,206,119, 11,177, 61,168, 47, 10,155,223, 70, 70, 70, 6,153, 54,109, 26,167,241,149, 13,239,141, 23,166,141,195,
+ 79, 63,254,130, 67, 57,135,241, 54,128, 53,171, 63, 65,100,247,238,120, 97,218, 56,212,104,203, 48,103,206, 28,206,242,172,225,
+110, 12, 0, 95, 15,192, 95, 9,148, 29,114,226,221,209,147, 39, 79, 38,170,197,215, 0, 47, 49, 16,228, 3, 4,117, 4,181,203,
+ 34,140,227,218,127, 35,128,176,173,126, 0, 96, 91,254, 54, 38, 87, 68, 71, 71,203, 28, 4, 3,242,190,134,207, 23, 4,216,245,
+ 8, 4, 86,206,199,239,122,130,146, 59, 52, 0, 17,164,254,102, 23,167,193, 72,160,171, 5,116,122, 64, 87, 11,232, 13,128, 78,
+ 11,232,107,239,123, 73,108, 5,164,124,254,113, 0,201, 61, 81,133, 71,194,165, 32, 62,222,184,163,213, 66,253,253, 13, 92,188,
+122, 19,119,239, 86, 35, 50,202, 4,141,206, 8, 93,173, 9,218, 26, 26, 37, 69,128, 86, 3,236,217,179, 71,205,231, 0, 12,119,
+160, 80, 40,104,175,160,160,229, 51,150, 44,145,236,100, 81, 72,240,146, 55,165,119, 23, 47, 88,102, 42, 47, 63,204, 34,107, 61,
+151, 49,246,150, 6, 45,159,245,250, 98,201,193,155,166,186,194, 14,207, 46,150, 94,223,186,100,153,177,186,252, 48, 31, 47,128,
+191, 52,112,217,171,111, 44,144, 20, 20,223, 63, 45, 50,238,185, 36,233,142, 77,107,150,213, 84, 87, 29,118,243, 89,179,117, 47,
+241,121,214, 8, 99,253, 75, 36, 18,153, 74,165,202, 99,182,140,106,181, 90,117,255,254,253,249,200, 50, 2,232, 12,128,238,211,
+167, 15, 45,145, 72, 68, 25, 25, 25,152, 57,115, 38, 86,174, 92, 9, 66, 8,126,252,241, 71,124,255,253,247, 56,119,238, 28, 42,
+ 42, 42,208,165, 75, 23, 84, 86, 86,250,139, 68,162, 54,206,132,143, 31, 63,222, 46,161, 58, 91, 26,176,231,166,127, 88,151, 0,
+ 28,121, 1,220,177,254,221, 85, 4,238,149,151,215,189,110,243,230, 28,244,120, 51, 25,195,172,234, 92, 27, 51, 11, 29,254,123,
+ 18, 5, 11, 94,194,143,161,161, 0,128,193, 0,213,199,198, 92,151,158,158, 78, 58,116,104,134, 83,167,127, 66,100,191,110, 64,
+218, 91,120,125,235, 30, 76,239,116, 22,189,107,175, 98,225,109, 49,254,245,249, 82,172,124,127, 3,206,253,114, 20,233,233,233,
+228,181,215,236,123,125,217,242, 90,180,244,199,152,177,131, 48,102,236, 32,188, 67,167, 67, 95,187, 24,167, 79, 3,167, 79, 3,
+ 71,142,140,195, 71,235, 46,227,217,103, 47,145,176,176, 71,145,150,230,207,139,159,114,159,120, 11,139,176,194,225, 13,119,248,
+240,144,255, 25, 5,128, 36, 38, 38,202, 88,107,134,214, 74, 0,197,182, 54, 44, 46,121,151, 52, 47,134,244,119,237,218, 69,169,
+ 54, 13, 4,196, 98, 80,187,118, 61,208,139,101,162,254, 85, 42, 21,149,152,152, 72,156,121, 67,172, 99, 3,248, 16,186, 45, 56,
+170, 59,109,137, 6,161,109, 69,120, 46, 78, 12, 93, 45,208, 60,144,130,136,178, 88,253, 32,208,213, 0, 26, 61,129, 70, 75,160,
+209, 17,208, 4, 16, 57,136,185,158, 54, 79,131,158,189, 11, 17,242,248, 93,124,115,176, 20,119,239,234,208,103,112, 37,122,181,
+168, 6,124,106,161,171,161, 81,122,147, 64,163,161, 96, 52, 82,104,209,138, 2,168, 7, 30,203, 22,217,183,119,239,254,193, 97,
+ 97, 56,118,159,175, 33,125,110, 42,238,166,204,143, 2,208, 29,192, 69, 30, 10, 69,183, 1, 67,159,234,223, 50, 52, 12, 39,127,
+170,139,145, 67,107,217, 63,112,125,243,226, 6,242,156,120, 1,186,247,237,221,167,127,104,104, 7, 92, 60,117,223, 35, 50,244,
+233, 88,124,169, 92,205,187,109,141,169,208, 50,207,175,117,252, 70, 92, 92, 92,131,248, 35, 27,177, 0,204,160,119, 6,112,102,
+209,162, 69, 67,188,189,189,165,159,126,250, 41, 62,249,228, 19,204,152, 49, 3,171, 86,173, 2, 69, 81,248,253,247,223,161,213,
+106,145,146,146, 2,163,209,136, 57,115,230,208, 20, 69, 57,125, 0, 60, 25, 77,255,176, 47, 1, 56,242, 2,120,194,250,119, 21,
+ 25, 25, 25,120, 49,233, 25, 84,148,215, 2,239,111,132,230,200, 73, 4, 12,235, 95,247,121,233,251, 27,113,193,215, 23,212, 43,
+179,209, 99,202, 24, 28,223,126,208,161,188, 43, 87,206, 99,240, 80, 57,206, 95, 8,198,198,245, 42, 12, 27, 54, 4,255,250,120,
+ 41,222, 25,241, 60, 62, 3,240,248, 11, 51,177,113,189, 10, 98,113, 48, 18,198,247,199,167, 60,228,253,231,131,175, 48, 96, 92,
+ 79,188,215,115, 53,206,199, 74, 17, 28,183,187, 94,221, 86,254, 18,252,148,167, 70,216,139,211,121,247,195,209,163,222, 72, 75,
+243,115, 88,199, 85,251,231, 47,233, 1,176,177,142, 76, 57,168,199,221,196,233,111,142, 80,159, 60,185, 61, 1,174, 64,245,225,
+ 53,192,175,107,157, 39,128, 81, 10,184, 44, 3,120, 10,140, 53,159,152,152, 72,216,214, 63,227, 17, 96,191, 79, 76, 76, 4, 43,
+ 89, 14,225, 75,232,214, 96,237, 2,176, 41,207,104, 2, 52, 53, 4,181,122,115,176, 95,173,158,192,219,247,254,103,186, 26, 64,
+107, 32, 40,187, 75,240,231, 61,130, 83, 23,141,160,105, 32, 49, 49, 81,118,229,202,149, 6, 99, 99, 52, 2,197, 55,244,184, 81,
+112, 15, 71,143,223, 3, 33, 20, 46,254, 74, 99,220,115, 70,136,189, 9,254,188, 13, 28, 61, 12, 84, 86, 18, 16, 26,120, 98, 56,
+ 5,137, 4,144,203, 19,112,253,250,117, 78,215, 36, 31, 12,114,240,184,235,147,164, 72,218,108,201, 75,171, 82,125,178,136,168,
+ 94,135,180,242,245,133,207, 43,243,124,126, 95,151,190, 84, 95, 89, 57,149,171, 60, 47, 63,233,210,228,101,171,124, 14, 23,147,
+122,242, 90, 6,248,162,199,148,151,125, 46,126,245,225, 82,189,166,122, 42, 23, 15,128,196, 47, 96,233,226,229, 43,124,174,149,
+ 84,212,147,213, 44, 48, 0, 19,158,155,225,147,245,197,182,165, 26,141,102,106, 19, 63,190,212,190,125,251, 26,148,189,253,246,
+219,100,223,190,125,200,206,206,230, 60, 20, 0,206, 3, 56,179,102,205,154,222, 65, 65, 65, 82,198, 13,190,109,219, 54,204,156,
+ 57, 19,159,124,242, 73,157,165,190,102,205, 26,148,151,151,163,178,178,178,186,166,166,166,208,226, 65, 16, 59,250, 1,154,166,
+137,181,139,158,177,254,185,186,255, 25, 55, 61, 91,142,181,187,254, 97, 88, 2,176,229, 5,240,180,245,207,200,228,186, 4,112,
+113,240, 96, 80, 47, 77, 65, 16, 0, 50, 60, 10, 53,167,206, 67,243,254,198,251,253,150,244, 12,186,188,240, 12, 36, 18,243,245,
+ 95,184,224,120,107, 54,243,185,124,172, 89,137,200, 63,121, 14,159,253,223, 14,248, 15, 26,136, 26,131, 17,122,232,241,228, 83,
+125, 27,212,231, 34,239,134, 73,143,231,218,190, 12,250, 84, 45, 18,255, 61, 28,226,201, 39,208, 61,178, 59, 34,123,116,174,107,
+ 95,202,194,117, 72, 75,251, 39,231,251,230,106,229,213, 17, 23,113,241,155,248,102, 92, 60, 6,174, 37, 2,250, 75, 42, 0,249,
+249,249, 78,163,191, 45,159,115, 19,232, 27, 0, 85,199,255, 2, 31,135, 19,132, 7, 0,157,106, 65, 61,150, 77,225,195,168,186,
+181,127,119,150, 1,172,183, 2,218,219, 26,232,192,237, 90, 71,254,214, 1,128,140, 75,157, 41,115,226, 1,160,172, 45, 49,119,
+ 39,243, 39,158,138,143,185,121,235,160,154,110, 77, 67,228, 13,248, 88,230, 69, 3, 77, 96, 52, 2, 85, 85, 4,122, 3, 96, 52,
+152,149,130,132,241,102,239,141, 29,151, 61, 21, 61, 56, 62,166,246,206, 1,117,100, 36,141, 35,223,155, 64,137,128, 63, 75, 40,
+ 72,252,128,239, 15, 1,122, 45, 5,138, 0,189,250,249,160,184,136,198, 83, 79,197, 34, 43, 43,139,211,177,214,242,193, 32,105,
+ 47,155,175,223, 85, 37,128,208,166,209,166,150,173, 68, 7,233,251, 44,212, 22, 64, 8, 5,104,163,162,188,175, 25, 77,163,121,
+201, 35,244,104, 4,182, 16,169, 75, 76,117,242, 90, 75,128, 86, 18, 10,254, 61,163,188, 47,236,160, 71, 91,121, 12,136, 35, 89,
+ 1,129, 65,162,235,183,203, 45,196, 2, 4,250,249, 34,208, 95,140,126,125,250,122,239,249,140,140,110,226, 71,215,102,159, 51,
+ 81,255,236, 58,140,247,110,210,164, 73,178,204,204, 76,123,242,170, 1, 92, 59,125,250,116,245,176, 97,195, 90,131,181,167,127,
+219,182,109,117,132,104, 48, 24, 96, 50,153,112,229,202, 21,180,110,221,250, 14, 77,211,156,180,197,241,227,199,219,179,212, 93,
+114,211, 63,204, 75, 0,182,188, 0,158,180,254,249, 16, 63,131,118,161, 65,216,188,249, 59,196,199, 13, 70,219,168, 72, 32, 42,
+ 18,212, 75, 83,234, 43,189, 0,110,151,104,177, 55,251, 56,218,133, 6,113,151, 23,226,135,168,254, 93, 16,213,191, 75,131,122,
+124,229, 61, 57,177, 27,222,124,234, 67,208,231,205,228, 63,107,225, 52,151,228, 89, 99, 73,224,146,111, 86, 86,173, 28,217,152,
+ 15,164, 91, 10,128,101,207,254, 3,141,192,102,172, 92,149, 74,197, 88,188,148,141, 58,132, 33,127,150, 85,204, 11,236, 93, 0,
+ 76, 25, 95,203,223, 58, 0,208,130,186,178,249,243,231,171, 45,203, 25,156,228,177,201,223, 86, 76, 0, 95,121,206,144,150,169,
+131, 51,121, 89, 89, 89,121, 45,131, 40, 60, 29,237, 3, 26,128, 65, 79,195, 87,108,238,166, 42, 13, 65,173,129,192,104, 2,242,
+207,155, 96,162, 9,156,109,217,203,202,202,202,107,219,154,194, 83, 49, 94,152,240,188, 23,170,171, 8,170, 42, 0, 77, 21,133,
+240, 46, 4, 38, 3, 5,111,145, 4,229,119,105, 20,255,161,199,149, 95,185, 5,140,201, 7,131,164,207, 3,186,134, 1,235,222,
+ 0,230,126,224,154, 18, 64,106, 52, 19, 95,137,234,123, 32, 36,235,128, 52,120,232, 19,104, 11,160, 45, 5,152,142, 29, 69,238,
+180,169,213,134, 26,205, 4, 62,242,104, 93,205,132,151, 70,244, 63,216,237,157,175,165,109,122, 13, 65, 43, 95, 10,173, 37, 20,
+180,151,126,192,222,183,166, 87, 27,180, 53,156,229,213,234,180, 19,198, 62, 61,236,224,252,247,215, 75,187,247,142, 66,160,191,
+ 24,129,126,190, 40,184,120, 6,203, 83, 94,173,214,242,144,229, 42,153, 59,187, 92, 91,228,191, 98,197,138, 6,110,254, 93,187,
+118, 49,121, 2,242,236, 88,255,128, 57,198,226,204, 99,143, 61, 86,160,211,233,218,123,121,121, 73,252,253,205, 91,177, 50, 51,
+ 51, 49,105,210, 36,104,181, 90,232,116, 58,212,214,214, 66, 42,149,234, 76, 38, 83, 22, 33,164,132,163,117,237,145,185,237,175,
+178, 4,192,246, 2, 48,175,155,130,248, 25,132,135,135, 96,201,155, 73, 56,116,240, 71,124,189,231, 20,124,197,205,240, 71,241,
+253, 21,172, 14,161,221, 81,171,175, 68,191,168,199,177, 54, 61, 9, 43,223,223,192, 75, 94,155, 54,205,113,225,226,133,186,207,
+ 35,187, 71,162,180,180,130,151,188,216,121, 19, 48, 73, 52, 21,181,231,171, 17, 61,183, 7,232, 94, 18,108,222,188,179,174,125,
+ 21, 21, 21, 24,242, 68, 55, 78,242,172,161,162, 84,148, 10, 42, 52, 38, 92, 86, 0, 26,131,252,185,200,180, 16, 62,177,188, 6,
+ 0,194,222,150,152,159,159, 95,143,240,109, 41, 8, 13,253,176, 20, 32, 22, 1,126, 94,128,212, 27,168,173,130,106,165, 15,144,
+ 62,139,192,175, 5,224,215,130,247,218,191, 29,242,135, 13,178,230,244, 96, 88,147,191,117, 76, 0, 95,121, 60,200,223,169,188,
+178,114, 66,237,207, 51, 16,137, 4,160,105,160,231, 99, 94,247,199,227, 23, 19, 12, 38, 2, 19,237,133,137, 19, 39,114, 82, 78,
+110,255, 73,168,131,135, 76,196,104, 4,244, 6, 2,147, 17, 16, 81, 64, 76, 44, 80, 85, 78,225,215,179, 90,104,117, 34,196,199,
+ 77,196,238,221,187, 57,145,255,138, 89, 64,231, 14,230,247,157,218, 3,174,122, 2,148, 74,229, 9,133, 66, 33, 47, 73, 24,123,
+ 48,108,239, 1,105,216,208, 39, 96, 56,118, 20,187,227,198, 86,235,171,170,228, 0,142,242,236,234,163, 38,109,149,252,210,219,
+227, 15,134,254, 59, 75,218,126,192, 80,104, 46, 29,195,231,175, 36, 84,215,214,240,150,119, 84,167,173,145,175,121,243,159, 7,
+255,245,159,173,210,232,193, 67,112,245,194, 25,188,154, 52,181,186,166,186,218,149,182, 53, 42, 28, 36,251, 33,177,177,177, 92,
+118, 3,120, 5, 5, 5,157,209,106,181,159, 21, 22, 22,118,236,221,187,119,132,209,104,244,246,241,241, 65, 86, 86, 22, 70,142,
+ 28, 9,157, 78,135,154,154, 26, 92,185,114,165, 50, 56, 56,248, 59,173, 86,251, 41, 77,211, 26,112,204, 0,200, 14, 72,224,235,
+250,255,171, 45, 1,176,189, 0,158,144,227, 74,238, 0, 91, 24, 35, 31,132, 49,242, 65,150,119,238,235,176,245,229,141,119, 79,
+185, 11,218,133,218,179,213,152,182, 62, 22,255,250,110,169,219,109, 75,215,167,147, 96, 99, 48,166,249, 79,123, 32,134,181, 75,
+ 10, 64, 83, 88,254, 54,172, 15, 98,213, 30, 79, 89, 41,118, 61, 2, 92, 61, 0,158, 38,127, 70,217,177,114,239, 19,118, 25, 95,
+121,206, 98, 1,248,202,211,232, 8,165,209,129,136, 68,192,209,124,243, 90, 63, 19,240,103, 94,247,159,200, 75, 94, 85, 21,161,
+ 40,203, 50, 59, 37, 50,203,248,233,191,128,166,154, 6,161,129,248,248, 88,236,222,189,219,233,120,200, 7,131,164, 76, 5,130,
+164, 64,241, 29,192,207, 23,160, 9, 16, 32, 1,222, 87,184,166, 4, 0, 56, 74, 87, 85,201,243,227,199, 30,108,190,226, 93,105,
+222,138,229,213,181,174,145,127, 61, 37, 32,111, 81,194, 65,191, 87,222,150,230,124,244,142, 43,228, 95, 39,203,104,208,143, 93,
+254,218, 75, 7,230,206, 79,145,174, 95,155, 90, 93, 83, 93, 45, 87, 42,149,103,217,238, 97,165, 82,233,173, 80, 40,140,124, 29,
+ 32,158,244, 10,216, 34,127,138,162, 72,108,108, 44, 0, 96,220,184,113,132,162, 40, 71,138,128, 84,175,215, 87,139, 68,162,220,
+208,208,208, 14, 85, 85, 85, 47,159, 60,121,178, 93,223,190,125,105,163,209, 88, 83, 81, 81,113,251,236,217,179,191,135,135,135,
+ 23,180,108,217,178, 80,171,213,102, 26,141,198,219, 73, 73, 73,154, 62,125,250,112, 82, 0,152,164, 64,238, 64,169, 84,114, 38,
+ 84, 87,150, 0,220,249,190, 61, 47,128, 39,230, 76,119,229,232,180, 94, 30,173,239,105,121,229,247, 68, 72, 53, 42, 16,113, 60,
+ 4, 83, 62,118,174,152,148,223,115,126,203, 61, 72,242,183,171, 0,112,216,235,207,171,129, 60,114, 7,240,145, 75,177,162,252,
+ 93, 38, 47, 42, 31,212,228,240, 49, 4,151, 1, 52,200,215, 80, 97,249,227,183,199,220,114,189,106, 79,145,171, 85,191, 16, 38,
+207,128, 37, 64,144, 98,121, 67, 92,146,247,249,130, 0,182, 82,224,138,188, 58,185,147, 38,221, 31, 19, 38,224, 79,165, 82,229,
+185, 34,143,208,245,199,184,186, 18,136,141,141,197,254,253,251, 41,198,170,226, 52, 30,159,121,238,129, 97,229,227, 63,106,168,
+170,146,127,191,226,237,140,218,170,170,105, 30,176,174,143,234,107,170,228,135,215,191,147,161,171,169,154,174, 84, 42,143,185,
+ 58,153, 27,141,198, 35, 70, 99,181,124,125,122, 90, 70,117,117,245, 52, 0, 71,173,101,185, 64,254,158, 64,189, 25,213,154,252,
+153,184, 29,118,144, 96, 92, 92,156, 35,121, 69,122,189,222,151, 16, 82, 69,211,180, 82,175,215,255, 24, 22, 22,214,170,188,188,
+156, 90,182,108, 89,101, 69, 69, 69, 89,251,246,237,171,170,171,171, 53,122,189,190,210, 96, 48,212,206,158, 61, 91,203,211,194,
+166, 60,112,207,228, 53, 86,135, 54,166,236,166,198, 7, 31,124, 76, 1, 32,207, 60, 59, 18,145, 61,194,237,214,187,112,254, 26,
+190,218,241, 13, 83,255,129,201, 91,191,126,125,157, 60,135, 6,243,201, 66,124,181,227, 27,166,190, 67, 60, 72,242,183,167, 0,
+120,186, 1,141,118, 65, 22, 18,165,108, 89,203,124,224,225,168,126, 46,217, 2,221,250, 1, 62,135,254,120,194, 27,224,194,152,
+216,125,239,174,188,253,251,247,243, 26, 43,119, 34,254,185,144,182,174,170,178,147, 39,229,105,171,171, 58,121,200,146, 59, 90,
+ 93, 85,213,233, 33,123,150, 41, 0,216,180,105, 19, 17,137, 68, 96,254,216, 46,108,185, 92, 14,154,166, 65,211, 52,146,146,146,
+ 40, 39,187, 2, 40,163,209,232, 79, 8, 49,209, 52, 93,107, 48, 24,254,235,229,229, 69,137, 68, 34, 95, 0,190, 52, 77,195,100,
+ 50,121, 25,141, 70,177,209,104,108, 55,123,246,236, 75,172,239, 54,250, 33, 64, 2, 60,163, 4, 12, 28, 56,140, 28, 58,176, 7,
+ 69,165,149, 8, 9,174,169,251,172,228,158, 63,194,218, 52,195,227,143, 63,238,148,172, 27, 75,222,250,245,235,169, 39,159,124,
+146,172, 75,223,143,171,127,220,105, 32,175,115,135, 86,136,136,136,224, 68,254,141, 5, 71, 57, 82, 40, 87,207, 17, 22, 32, 64,
+128,128,135, 0, 53, 44, 66,167, 89,134,141, 55,171,252, 22,128,230, 48, 7,141, 11,196, 47, 64,128, 3, 15,128, 0, 1, 2, 4,
+252, 85, 32,177, 40, 1, 52,139,248, 69,184,127,242,160, 55,128,118,150,215,180,208, 93, 2, 4, 8, 10,128, 0, 1, 2,254, 30,
+ 16, 1,144,178,222, 51,196, 47,102,145, 62,109,169, 39, 88,255, 2, 4, 8, 10,128, 0, 1, 2,254, 71,230, 52,129,244, 5, 8,
+112,160, 61, 11, 16, 32, 64,128, 0, 1, 2,254,151,181,229, 51,103,206,176, 15,210, 33, 86, 73,116, 8,234, 31,180, 83,164, 82,
+169,194,152,247,182,130, 9,217,242,248,226,239, 40,207,198,182, 69, 74,232, 63, 97, 60,254, 42,242,194,194,194,234,234, 20, 21,
+ 21, 81,124,229, 37, 39, 39, 67,161, 80, 80,194,253,231,154, 76,225,249, 21,228,241,145,199, 91, 1,224,137,214, 28,235,145,196,
+196, 68,222,153,165,236,157, 23,143,134,201, 72,108,157, 6,104,171,206, 3, 7, 67, 48,150,189,240,106,149, 74, 85,151,173,139,
+111, 62,241,198, 66, 92, 92, 92, 76,118,118,118, 29, 9,198,198,198,202,246,239,223,159,247,119,212,118,109,141,199,165, 75,230,
+157, 97,221,186,117,107,234,230,145,132,241, 10,100,125,173,180,121,207, 38,140, 87, 16,203,103,118,111,156,132,241, 14, 79, 10,
+ 68,214,215, 74,151,111,186,176,176, 48, 18, 23,119,127, 87, 97,118, 54,136, 51, 37,192, 25, 86,175, 89, 29,179,247,240, 94, 68,
+ 68, 70,168, 65, 1,151, 78, 95,148, 13,238, 51, 4,233, 31,164,243,186,255,166, 77,155,214,224,186, 51, 50, 50, 40, 8, 16, 32,
+160,209, 20, 0, 49,215,138,209,209,209,188,133, 59, 80, 0,108,146,168,245, 65, 27, 60,136,214, 21,205,137,203,228, 66, 84, 42,
+ 21, 82, 82, 82,144,154,154,170,118,144,166,147,203,239,215,171,211, 62,252, 17, 0,192,109,157, 14, 70,109,173,185,176,188,146,
+ 33, 57,110,233,143,235, 38,242,236,122, 57, 5, 44,185,197,121,157,241, 46,162,204,217,245,152,255,128,211,215, 77, 49, 57,215,
+ 27, 15,134,248,221, 24, 15, 79, 94, 3, 73, 24,175,192, 88,121, 63, 29,160,144, 88,136,222,165,223, 96, 41, 16, 30,135, 94,159,
+130,156,156, 36,140, 30,189, 9,113,113,169,200,206, 54,247,149, 43,138,192, 11,175,190, 64,202, 91,220,197, 90,229,106, 4,251,
+ 7,131, 54,154,160, 35,181,234, 67, 63, 30, 30, 61,197,244, 12, 25, 18, 49, 84, 54,111,222, 60,167,138,192,180,105,211, 72,114,
+114,178,205, 62, 21,148, 0, 1, 15, 2,241,241,241,117,115,198,172, 89,179,176,117,235,214,122,220, 51,115,230,204,122,135, 83,
+ 57, 75, 46,229, 76, 30,215,163,170,207,156, 57, 99,237, 37,240,168, 2,192, 43,126,192,214, 41,118,158,192, 70,165, 50,102,142,
+155, 73, 83,248,228,208,230,104,185,147,148,148, 20,172, 90,181, 10, 0,234,254,219,254,105,194,207, 27, 16,212, 12,231, 10,119,
+192, 15, 29, 96,194, 15, 40,221,114, 10,103, 11,202, 48,113,213, 39, 77,246, 0,156,251,229, 60,122,245,236, 1,154, 0,231,207,
+155, 95, 3,247, 95,179,203,105,194,121, 76, 8,199,241,160,184,142,199,244,233,211, 1,160,238,191, 77, 98,167, 40,192,241, 79,
+147,167,159, 62,136,111,191,149,123, 84, 9, 24, 43,239, 87,147,148,148,228, 15,108, 66,214,215,174, 17,187, 59, 22,190, 51,235,
+ 31, 0, 38, 77,202, 68, 78,142,249,127, 82, 82, 1, 24,143, 0, 31,111,192,198,141, 27, 99,212,191,125,167,126, 41,121, 38,250,
+183,238, 11,191,230,205, 65,244, 70,208,196, 4, 47,111, 49, 58,143,232,156,243,107,212,111, 88,181, 41, 85,189,118,237, 90,217,
+235,175,191,238, 84, 9,184,115,231, 78,189,247,177,195, 2, 48,104,222, 15,208,233,166,212, 27,200,157, 59,119,186,220, 63,114,
+185,156, 28, 60,120,208, 99,253,235,105,121,141,137,228,228,228, 24,119,211,250, 38, 39, 39,199, 0,174,167, 7, 86, 42,149,189,
+222,120,227,141, 91, 26,141, 38, 12,192, 40,152, 15,225,236, 6,224, 12,204,135, 66, 1,192,231, 0,126,125,208,253,195, 62,235,
+ 97,214,172, 89,200,206,206,174,199, 41, 51,103,206, 4,159,204,165,206,228,213, 61,239, 89, 89, 36, 33, 33,129,226, 66,254, 76,
+153,181, 18, 80, 79, 1, 72, 73, 73, 33,133,133,133, 0,128,136,136, 8,176, 15,155, 81,169, 84,245,222, 91,127,238,200, 98, 47,
+ 45, 45, 85,171, 84, 42,206,158, 0,235,179,238, 29,145,240, 28, 75, 42, 76,107, 30,224,235, 98,223,180,105,147,211, 58,185,185,
+185,156,184, 43, 49, 49,209, 46,233, 47, 94,188, 24,169,169,169, 96, 43, 8, 92,208, 62,252, 17,220,188, 87,129,221,115, 38,161,
+ 37, 53, 20, 5,155, 23, 32, 98, 66, 4,190,105, 98,242, 7, 80, 71,248, 0,208,163, 71,143,122,229,140,103,128, 93,238,105,203,
+222, 9, 17,147,196,196, 68,187,164,191,125,251,118,164,166,166, 66, 62,180, 47, 14,254,112, 26, 8, 12, 0, 42,171, 31,120, 31,
+ 30, 56,120,202, 31,216,132, 3, 7, 79,121, 68,222,237,127,183,116,168,197,180, 93, 88,198,233, 1, 97,187,254,147,146,114, 16,
+ 23,215,169,238, 63,131,184,184, 78,156,149,128,205, 95,110,198,202,143,223,195,176, 46, 49, 48,213,214,194,104, 50,130,242,166,
+ 0,120,129,128,198,237, 63,139,209,173,245,227, 88, 58,103, 41,222, 75,123,143,147, 55,202,122,178,139, 13,221,110,147,240,167,
+ 76,153, 66, 92, 81, 2,228,114, 57, 57,176,236, 32,198,194, 51,164, 45,151,203, 73, 90, 90, 26, 0, 60,212, 74, 64,114,114,114,
+ 76, 69, 69, 5,227, 45,115,171,157, 21, 21, 21,204,156,238,146, 28,133, 66, 81, 8, 96, 58,128,211, 0, 62, 5, 48, 18,192, 24,
+ 0,255,100, 41, 0,119,154,162,159,216,199, 61, 3,192,215, 95, 55,212,224,191,254,250,107, 16, 66, 48,126,252,120,138,175,188,
+141, 27, 55, 14,183,204,115, 4, 0, 21, 18, 18, 98,151,248,173,145,148, 98,230,152, 77,169,139,109,126, 94, 79, 1, 72, 77, 77,
+117, 24, 4,200,126,111,253,185,163, 32, 4, 70,169,152, 63,127,190, 58, 37, 37, 5,214, 7,229, 88, 31,158,163, 82,169, 28,165,
+ 47,164, 56,148, 53,233, 67,245,213, 87, 95,217, 37,126,139,162, 85, 71,254,139, 23, 47,230, 36,243,143,194, 34,104,246, 44,135,
+116,230,127,208, 62,252, 17,180,109,233,135,194, 61,133,102,242, 15,106,102, 94, 2,240,241,226,221,214,184,184, 56, 25,123, 25,
+192,242,158,151, 12,154, 0, 97, 1,192, 71, 83,129,217,219,129,214,254,192,165,114,219,229, 23,238,241,107,159, 61, 69,142,143,
+215,230,221,119,223,181, 75,252, 0,144, 54,125, 28,214, 29, 58,129,144,136,118, 40,185,126,219,169,245, 15, 0, 28,189, 0,156,
+189, 4,102, 11, 95, 97,211,210,231,178,254,111, 11,105, 95,120, 54,201, 39, 67,250,204,127,125, 92,103,136,179,175,114,254,126,
+141,182, 6, 67,167, 12, 81, 71,183, 27,132, 90,141, 6,222,190,190,240,246,190, 63, 5, 21, 94,189,138,189, 89, 89, 55,103,206,
+152,222,190,163,111, 24,250, 62,213,103,132, 84, 23, 24,179,109,243, 54, 94, 86,227,251, 7,166,227,251,239,191, 7, 80,191,109,
+ 59,119,238,164,248, 42, 1, 12,249,163,227, 90, 28, 88,246,186,219, 74,128, 92, 46, 39,233,233,233,232,218,181, 43,214,173, 91,
+135,185,115,231, 62,116, 74,128, 21,241,123, 68, 30, 35,203, 13,111,130, 12,192, 83, 0,182, 3,168, 6, 16, 2,224, 55, 0,215,
+113, 63,247, 67,147,192,250,184,103,182,219,222,218,133,159,144,144, 64,156,185,240, 15, 28, 56, 80,111,201,120,239,222,189,106,
+182,213,207, 85, 33,102,200,159,121,189, 41,117,113, 3, 47,192, 3,201, 3,192, 90,123, 69, 97, 97, 33,218,180,105,211, 64, 65,
+ 96,202, 74, 75, 75,185,230,185,119, 22, 12,200,121,194,124,230,153,103, 26,237,218,217, 4,102,203,234,183,144,144,173,182,215,
+131, 22, 69,168,158, 48, 8, 36,112, 1, 48, 98, 25,170,241, 37,176,229,148, 69, 51, 91, 0,159, 23,215,193,104,228,159,232, 44,
+ 59, 59, 59,143,221, 79,124,201, 31, 0, 74,183, 1,239,108, 4, 30,233, 0,220,222, 39, 70,198, 86, 61,166,239,176, 95,206,203,
+188, 39,158, 37, 49,118,176,223,173,175, 87, 33, 48, 82, 2,105,151,215,240,213,170,217,232,221, 35, 4,143,141,123,143,211,120,
+112,105, 58,143,165, 2, 10, 0,177, 34,127,138, 33,126, 87,214,245,185, 90,248, 92,160,143,235,108,179, 60,199,202, 19,224, 12,
+183, 74,111, 97, 84,226, 40, 4, 54, 11,134,137, 50,226,200,247,255, 69, 85,117, 53,226,226,227,241,103,105, 41,118,101,238,198,
+172, 25,211,219,251, 74,124, 33, 34, 62, 24,221,111,116,238,111,234,117, 46, 41,244,247,238,221,115,251,186,217,228, 15,192,109,
+ 37, 64, 46,151,147, 21, 43, 86,160,115,103,115,127,118,234,212, 9, 15,147, 39,192,211,196,111,195,250,103, 94,187,114,173,221,
+ 45,207,164, 15, 0,127, 0,145, 0, 46, 2,104, 15,160, 18, 64,185, 7,158, 89,151, 96,125,220,243,172, 89,179,234,202, 24, 23,
+ 62, 51,151,113,241, 76,219, 91, 46, 96,147, 63, 23, 69,128, 11, 30, 88, 34,160, 54,109,218,200, 18, 19, 19, 27, 44, 5, 88,206,
+182, 7, 0,222, 49, 2,246,130, 1, 29, 89,142,246, 20,148,198, 0, 99,221,219,115,247,115,181,254, 1,224,208,146, 21,136, 91,
+249, 1,140, 35,134,194, 27,128,244,248, 85,124, 83, 80, 6, 0, 48,142,152, 11,195, 47,173, 64,181,254, 39,111,146,226,225,101,
+177,139,178,241, 95, 98,238,140, 27,184, 60,103, 17, 52,223,234, 17,210,202,113,185, 39, 60, 0,174, 40, 7,219,183,111, 55,107,
+195,113, 79,226, 68,113, 41, 2,123, 7,226,102, 78, 1, 32,241,197,164,185, 47,162, 69,135,113, 77, 57,255,218,139,250,247, 11,
+ 27,123,178, 0, 0, 9, 37, 73, 68, 65, 84,136, 87,203,209, 14, 1,103,177, 3, 57, 73, 57, 24,189,105, 52, 38,101, 2, 73, 57,
+230,215, 57, 73, 57,188,189, 0,213,186, 42,180,242,107, 9,163,174, 6, 68, 68, 48, 96,224, 64,236,217,179, 71,151,254,193, 7,
+ 18,154, 16, 60, 63,245,121,180,104,217, 2, 53,213,213, 48,154,140, 8,244,105, 6,131,200,224,210,245,150,151,151,215,219, 29,
+192, 55, 32,176, 1,249, 51,112, 81, 9,144,203,229, 36, 37, 37, 5, 3, 7, 14,172, 87,222,163, 71, 15,188,255,254,251, 77,170,
+ 4, 52, 22,241, 91, 91,255, 0, 80, 92, 92,236,170, 23,224, 71,152,215,251, 43, 97,118,253,143, 2,112, 5, 64, 47, 0, 89, 0,
+ 62, 1,224,240,102, 81, 42,149, 34,133, 66,225,241,116,208,108,151, 61, 43, 80,175,238,115,246,146, 64, 73, 73, 73,140,179,131,
+190, 8, 33, 20, 67,240,108, 87,127, 66, 66,130,205,114, 79, 42, 0,196,138, 20, 9,207,207, 29, 34, 34, 34,162,142,244,163,163,
+163,101, 76,108, 0,227, 29,136,136,136, 80, 51,203, 5, 77, 53,241,122, 18,206,214,250, 89,214,191, 83, 76,220,152, 9, 18, 31,
+142,219,131,251,161, 37,134,194,111,210, 58, 24,111,253, 9, 4, 53,131,119,217,151,216,151,158, 15,120,121,185,114,237,110,107,
+146,103,223,248, 7,250,247, 1, 34,230,158, 71,164,116, 6,126,123, 52, 17,248,104,145,221,242,166,242, 0,164,166,166, 98,216,
+128,199, 48, 98,104, 87,196,245, 92,132, 53,233, 27,112, 49,255, 38,230, 12,239,143,146,172, 3,168,184, 87,233,169,251,193,214,
+ 82,129, 83,130,102, 19,190, 39,201,223,142, 76, 78, 40, 42, 42,162,194,194,194,200,164,204,250, 10, 1, 0,140,222, 52, 26,226,
+236,171,200,206, 46,168,219, 9,192,206, 21, 96,235,118,163,105, 26, 38, 26, 32,180, 17,190,126, 18, 76,125,225, 5,201, 59,111,
+191,141,182,109,219,210,237, 67, 66, 68, 58, 77, 53, 76, 4, 32,180, 9, 52,237,124,174,206,200,200,160, 70,142, 28, 73,202,202,
+202, 80, 89, 89, 89, 79,113,180,218, 29,192,121, 87,128, 92, 46, 39,107,102, 95, 0, 36,157,129,146,143, 27, 86,144,116,198,154,
+217, 23, 0,142, 74,128, 92, 46, 39, 9, 9, 9,178, 30, 61,122,168,203,202,202, 26,124, 30, 22, 22,134,132,132, 4, 25, 30,242,
+152, 0,119,173,127, 55,189, 0,108,133,161, 29,128,179, 0, 38, 0,224,124,148,105, 99,144, 63,224,120, 9,192,134, 49,147,231,
+236,218,227,227,227, 9,243,253,248,248,120, 98, 45,111,235,214,173,136,143,143, 39,124,119, 5,112, 81, 0,248, 36, 2,178,245,
+185, 77, 36, 38, 38,218,244, 2, 48,100,223,166, 77, 27, 89, 74, 74,138,154, 89,147, 77, 76, 76,116, 24, 84,232,200, 58,116, 97,
+127,125,163,108, 3,100,172,123, 71,193,128,124, 80,240,239, 36,248, 76, 90, 7,109,241,101,120, 31, 95, 7, 67,230, 92, 80, 99,
+ 87, 99,239, 63, 39,227,250,222,107,136, 75,251, 20,240,110,154,204,206,139, 84, 64, 78,218, 30, 68, 94, 31, 13,220,209, 96,225,
+200, 69, 14,203, 61,225, 1,112,213,250,207,218,179, 2, 94,237,187, 67,138,174, 40,250,126, 19,170, 40,130,159, 46,223,192,136,
+243, 55, 57, 53,231,219,111,229,118,201, 30, 0, 44,159,219,172,199,149,252,237,220,163,110, 17,131, 39,118, 8, 36,229,220, 39,
+126, 0, 13, 44,127, 38, 96, 48, 59,187,192,230,247, 3,253, 2, 81, 92, 81,140,129, 29, 7, 65, 91,171, 3,180, 58, 24,245, 6,
+ 44, 77, 73, 1, 37,130,168, 70, 83, 13,154, 54,193,104, 34,240,245,246,193,159,213,127,194,199,228,124,183,241, 55,223,124, 83,
+119,109,211,166, 77, 35,204,124,195,222, 29,112,235,214, 45,206,215,105, 38, 97,179, 18,208, 45,188,225,239, 95,186,166,199,252,
+ 45,145,224, 74,214,150,122,100,224,192,129, 8, 11, 11,107,240,249,249,243,231,145,149,149,165,110, 42,242,183, 88,227, 20,227,
+ 9, 40, 46, 46,110, 20,235,223, 3, 94, 0, 6,163, 44, 68, 90,251, 48, 40, 57,142,150, 0,216,229,124,151, 0, 60,181,164,192,
+ 71, 1,104, 20, 48,150, 63, 0, 68, 71, 71,203, 84, 42,149,154,113,253,219, 81, 14,100, 87,174, 92,113, 22, 11, 64,113, 44,243,
+168,149,201,181,195, 25,235,223, 22,241, 51,138, 14,159,246,158, 45, 40,131,225,151,119,112, 27, 63, 32,100,236,106,160,162, 18,
+ 5,155, 22,160, 83,242, 90,148,124,178, 0,240,241, 6, 68, 77,147,217,185, 72, 3,116,107, 51,129,115,121, 83,120, 0, 82, 83,
+ 83,171,167,140, 24,116,171, 57, 29,252, 72, 13,124, 36,153,107,231, 98,253,190, 51, 88, 56,230, 9, 76,255,224, 11, 76,254,127,
+255,215,168,222, 32, 71,151,152,245,181, 18,150, 36, 64,148,187,202,169, 59,174,126, 71, 94,128,164,156, 28, 98,139,252,217,214,
+191, 51,132,182, 9,197,161, 35, 57, 24,242,200, 16,248, 7, 72, 65,211, 4, 34, 98, 4, 77, 81, 32,132,192, 68, 0, 35, 77, 96,
+ 52, 26,161,173,208, 96,255,207,251, 33, 54,137,121,111, 29,182,222, 21,240,230,220,161,136, 13, 45, 4,117,152,187, 12,123, 74,
+ 0, 95,242,183, 86, 2,210,210,210,208,174, 93,187,251,138,125, 65, 1, 82, 83, 83,241, 48, 88,254,158, 86, 4,108, 89,255,110,
+122, 1, 0, 32, 6,192,163, 0,222, 66, 19, 7,255, 49, 80, 42,149,245,238,209,146,146, 18, 40,149, 74, 71,158, 8,167,242,216,
+ 75, 10, 37, 37, 37, 49, 74,165,146, 2, 64, 74, 74, 74,168,141, 27, 55, 18,150,247,150, 82,184,177, 13,254,129, 40, 0,214, 81,
+255,150,100, 53, 13,148, 3,246,107, 55, 45,120,222, 55,150, 7,183, 1,218,180,254, 93, 37,126, 6, 19, 87,125,130,221, 0,198,
+172,140, 5, 81, 45, 0,245,204, 26,156, 45, 40, 3,213, 34, 24, 87,255,168, 52, 91,255,252,151, 0, 60, 2,123,251,253,221,201,
+ 3,192, 69,225,226,170, 28,108,223,190, 93, 15,160,106,118, 76,175,202,215, 86,255, 71,191,100,105,138,174,117,179, 54,101, 23,
+ 46, 22,181,157,126,241, 11, 41,154,120,215,136, 3,114,102, 47,209,240,220, 81,224,121,216, 34,127,198,242, 7,224, 52, 32,112,
+222,188,121,212,144,167,135,196,171,135,230,101, 37,246,156,140, 74, 93, 37, 40, 17, 96, 78, 41, 66,195,100, 34,160,141, 70, 4,
+248, 6,226, 88,197,105, 92, 57,126, 21,187,148,187,242,220,110,120,193, 75, 0,248,111, 3,172,167, 4,180, 43,194,165, 91, 97,
+ 46,145,191,181, 18,176,110,221, 58, 4, 5, 5,161,172,172, 12, 43, 86,172,192,195,230,246,247,132, 34, 96,207,250,119,209, 11,
+208, 22,230,168,127, 17,128,190, 0,230, 3, 40,120, 88,250, 75, 97,217,138,238, 41, 88, 47, 41,236,221,187,247,251,198,106,251,
+ 3,201, 3, 96,207, 35,176,102,205, 26,153,181,162,144,152,152,168,230,123, 17,108, 34,120, 24, 82,236,178,173,127,235,237,127,
+150,254,101,247, 43,231, 6, 51, 74,192,132,149,219, 64, 50,129, 86,211,149,200,123,109, 50,158, 72,253, 28,240,241, 65,128, 68,
+220, 36,215,203,222,227,111,235,181,139,121, 0,140, 0, 68,150,177, 21,185, 57, 30,183,167,140, 24, 84,252,218,166,236,240,165,
+179, 70, 53, 11, 13,137,209, 3, 56,151,152,152,216, 28,230,163,100, 93, 26, 15,230,150,251,246, 91, 57, 19,241,239,138,114, 71,
+ 57,179,224,249, 16,122, 99, 37, 3,178, 7,107,210,103, 60, 2, 45, 90,180,176,169,157, 29,251,246,216,222,176,199, 31,129,105,
+138,241,220, 83,143, 60,213,171,101, 96, 75,232, 12, 58, 16, 66, 32,246, 22,163, 92, 91,131, 19,127,124,139,237,159,101, 64,214,
+ 93, 38,219,133, 93,110,183,241,253, 3,211,145,145,145,129, 43, 87,248,231, 0,184,175, 4,192, 45,242,103,203,155, 59,119, 46,
+ 73, 75, 75,195,162, 69,139,240, 48,175,249,179, 21,129,188,188, 60,151,190,235,168, 14, 15,153, 9, 48,239,247,215, 1,120, 3,
+192,207, 0, 76,248,155,194,122, 9,128, 47,250,244,233,131, 51,103,206, 96, 83,234,226, 6,121, 0, 28, 38, 2,106,172, 60, 0,
+182, 60, 2,246,136,222, 69, 47,128, 91,104,172,109,128,204, 0, 42,149, 74,228,230,230,210,133,133,133,108, 34,147,169, 84, 42,
+222,154,227,196, 85,159, 0,172,196, 63, 79, 45,221, 88,247, 90,211, 52,247,171,211,187,148, 38, 46,245, 93, 58,128,187, 48,111,
+255,153,234,102, 27, 75,102,199,244,170, 29,153,251, 99,179,231,223,254, 20, 74,165, 82,156,155,155,219, 14,245,211, 89,187, 52,
+ 30,141,237, 9,112,150,223,223,233,204,217, 8, 75, 2,246,200, 95, 31,215, 25,200,118,110,152,237,248,120, 39, 21,224, 37, 37,
+199,195, 78, 96,232,160,161,104, 31,216, 30,160, 9,254,212,149,225,216,169, 99, 40,185, 80,130,225,221,134,203, 94,125,245,213,
+ 38, 31, 15,182, 18,224, 41,178,102, 60, 1,127,149,128, 63,119,179, 0,122, 0,155, 44,127,255, 19,176, 94, 82,112,199,197,111,
+ 47, 1,144, 77, 5,160,177, 48,127,254,124,155,100,111,117, 18, 27, 27,106, 7,137,128,236, 18,173,171,104,140,109,128,169,169,
+169, 80, 42,149,198,220,220, 92,111,203,210, 1, 67,254,195, 29, 92,183, 77, 88, 14, 83, 82, 55,194,208, 16, 7,229, 84, 19,221,
+252,190,150,251,114,153,165,200,164, 80, 40, 94,112, 83,172,239,200,183, 54,231, 43,149,202, 39,115,115,115,145,155,155,171, 3,
+ 32,177,252,121,130,248, 41,119, 82, 3, 59, 35,249,132,241,138,122,227,197,151,184, 61,177, 36, 80, 84, 84, 68,229, 36,229,144,
+208,185,161, 50,116,180, 93,167, 56, 41, 71,205, 53, 30, 96,235,135, 91,169,181,107,215,198,124,178,242, 19,132,117,126, 84, 13,
+ 0,191,157,255, 85, 54,110,100, 28,210, 55,164,231,237,192, 14,151,218,153,145,145, 65,141, 26, 53,170,193,174, 0,131,193,224,
+214,245,123,154,172,255,110,209,254, 15, 1,105, 82, 10,133,130,252, 29,174,197, 19, 75, 10,140, 23,192,186,140,179, 2,224,204,
+ 18,231, 97,169,187,122,163,147, 70,150,239,169,239,219,148,151,152,152, 72,114,115,115,189,217,253,197,246,176,240, 84, 80,242,
+ 26,137,144, 31,198, 73, 40, 16, 64,181, 57, 33, 63, 69, 1,240,131,147,253,189, 28,199,227,247,220,220, 92,102, 27, 80,101, 68,
+ 68, 68,235,212,212, 84,223,135,161, 47, 27,211,109,239, 73,217, 69, 69, 69, 84,209,194, 34,143,245, 1, 43,207,127,221,247,142,
+125,119,220,237,118, 30, 62,124, 88, 32,215,191, 57,217,179, 57, 76,161, 80, 24, 60, 73,254, 74,165, 50, 72,161, 80,148,255,213,
+251,137,139, 17, 77,185,122,142,176, 0, 1, 2, 4, 8, 16, 32,224,175, 11,145,208, 5, 2, 4, 8, 16, 32, 64,128,160, 0, 8,
+ 16, 32, 64,128, 0, 1, 2,254, 7,240,255, 1, 81,145,236,175,225,165,221,240, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
0};
diff --git a/source/blender/src/drawtext.c b/source/blender/src/drawtext.c
index 71f0bbef7ca..0797a425f2a 100644
--- a/source/blender/src/drawtext.c
+++ b/source/blender/src/drawtext.c
@@ -31,6 +31,8 @@
#include <math.h>
#include <string.h>
#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -60,6 +62,7 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_node.h"
+#include "BKE_suggestions.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -74,32 +77,86 @@
#include "BIF_space.h"
#include "BIF_mywindow.h"
#include "BIF_resources.h"
+#include "BIF_mainqueue.h"
#include "BSE_filesel.h"
#include "BPY_extern.h"
+#include "BPY_menus.h"
#include "mydevice.h"
#include "blendef.h"
#include "winlay.h"
-#define TEXTXLOC 38
+/***********************/ /*
+
+Notes on word-wrap
+--
+All word-wrap functions follow the algorithm below to maintain consistency.
+ line The line to wrap (tabs converted to spaces)
+ view_width The maximum number of characters displayable in the region
+ This equals region_width/font_width for the region
+ wrap_chars Characters that allow wrapping. This equals [' ', '\t', '-']
+
+def wrap(line, view_width, wrap_chars):
+ draw_start = 0
+ draw_end = view_width
+ pos = 0
+ for c in line:
+ if pos-draw_start >= view_width:
+ print line[draw_start:draw_end]
+ draw_start = draw_end
+ draw_end += view_width
+ elif c in wrap_chars:
+ draw_end = pos+1
+ pos += 1
+ print line[draw_start:]
+
+*/ /***********************/
+
+#define TEXTXLOC 38
+
+#define SUGG_LIST_SIZE 7
+#define SUGG_LIST_WIDTH 20
+#define DOC_WIDTH 40
+#define DOC_HEIGHT 10
+
+#define TOOL_SUGG_LIST 0x01
+#define TOOL_DOCUMENT 0x02
+
+#define TMARK_GRP_CUSTOM 0x00010000 /* Lower 2 bytes used for Python groups */
+#define TMARK_GRP_FINDALL 0x00020000
/* forward declarations */
void drawtextspace(ScrArea *sa, void *spacedata);
void winqreadtextspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt);
void txt_copy_selectbuffer (Text *text);
-void do_brackets();
+void draw_brackets(SpaceText *st);
-void get_selection_buffer(Text *text);
-int check_bracket(char *string);
-static int check_delim(char *string);
-static int check_numbers(char *string);
+static void get_selection_buffer(Text *text);
+static int check_bracket(char ch);
+static int check_delim(char ch);
+static int check_digit(char ch);
static int check_builtinfuncs(char *string);
static int check_specialvars(char *string);
+static int check_identifier(char ch);
+static int check_whitespace(char ch);
-static void *last_txt_find_string= NULL;
+static int get_wrap_width(SpaceText *st);
+static int get_wrap_points(SpaceText *st, char *line);
+static void get_suggest_prefix(Text *text, int offset);
+static void confirm_suggestion(Text *text, int skipleft);
+
+#define TXT_MAXFINDSTR 255
+static int g_find_flags= TXT_FIND_WRAP;
+static char *g_find_str= NULL;
+static char *g_replace_str= NULL;
+
+static int doc_scroll= 0;
+static double last_check_time= 0;
+static int jump_to= 0;
+static double last_jump= 0;
static BMF_Font *spacetext_get_font(SpaceText *st) {
static BMF_Font *scr12= NULL;
@@ -160,7 +217,8 @@ static void temp_char_write(char c, int accum) {
void free_txt_data(void) {
txt_free_cut_buffer();
- if (last_txt_find_string) MEM_freeN(last_txt_find_string);
+ if (g_find_str) MEM_freeN(g_find_str);
+ if (g_replace_str) MEM_freeN(g_replace_str);
if (temp_char_buf) MEM_freeN(temp_char_buf);
if (temp_char_accum) MEM_freeN(temp_char_accum);
}
@@ -184,352 +242,277 @@ static int render_string (SpaceText *st, char *in) {
return r;
}
-void get_format_string(SpaceText *st)
+static int find_builtinfunc(char *string)
{
- Text *text = st->text;
- TextLine *tmp;
- char *in_line;
- char format[2000], check[200], other[2];
- unsigned char c;
- int spot, letter, tabs, mem_amount;
- size_t a, b, len;
-
- if(!text) return;
- tmp = text->lines.first;
-
- while(tmp) {
- in_line = tmp->line;
-
- len = strlen(in_line);
- /* weak code... but we dont want crashes (ton) */
- if(len>2000-1) {
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format= NULL;
+ int a, i;
+ char builtinfuncs[][11] = {"and", "as", "assert", "break", "class", "continue", "def",
+ "del", "elif", "else", "except", "exec", "finally",
+ "for", "from", "global", "if", "import", "in",
+ "is", "lambda", "not", "or", "pass", "print",
+ "raise", "return", "try", "while", "yield"};
+ for (a=0; a<30; a++) {
+ i = 0;
+ while (1) {
+ if (builtinfuncs[a][i]=='\0') {
+ if (check_identifier(string[i]))
+ i = -1;
+ break;
+ } else if (string[i]!=builtinfuncs[a][i]) {
+ i = -1;
+ break;
+ }
+ i++;
}
+ if (i>0) break;
+ }
+ return i;
+}
+
+static int find_specialvar(char *string)
+{
+ int i = 0;
+ if (string[0]=='d' && string[1]=='e' && string[2]=='f')
+ i = 3;
+ else if (string[0]=='c' && string[1]=='l' && string[2]=='a' && string[3]=='s' && string[4]=='s')
+ i = 5;
+ if (i==0 || check_identifier(string[i]))
+ return -1;
+ return i;
+}
+
+static void print_format(SpaceText *st, TextLine *line) {
+ int i, a;
+ char *s, *f;
+ s = line->line;
+ f = line->format;
+ for (a=0; *s; s++) {
+ if (*s == '\t') {
+ for (i=st->tabnumber-(a%st->tabnumber); i>0; i--)
+ printf(" "), f++, a++;
+ } else
+ printf("%c", *s), f++, a++;
+ }
+ printf("\n%s [%#x]\n", line->format, (int) (f[strlen(f)+1]));
+}
+
+/* Ensures the format string for the given line is long enough, reallocating as needed */
+static int check_format_len(TextLine *line, unsigned int len) {
+ if (line->format) {
+ if (strlen(line->format) < len) {
+ MEM_freeN(line->format);
+ line->format = MEM_mallocN(len+2, "SyntaxFormat");
+ if (!line->format) return 0;
+ }
+ } else {
+ line->format = MEM_mallocN(len+2, "SyntaxFormat");
+ if (!line->format) return 0;
+ }
+ return 1;
+}
+
+/* Formats the specified line and if allowed and needed will move on to the
+ * next line. The format string contains the following characters:
+ * '_' Whitespace
+ * '#' Comment text
+ * '!' Punctuation and other symbols
+ * 'n' Numerals
+ * 'l' String letters
+ * 'v' Special variables (class, def)
+ * 'b' Built-in names (print, for, etc.)
+ * 'q' Other text (identifiers, etc.)
+ * It is terminated with a null-terminator '\0' followed by a continuation
+ * flag indicating whether the line is part of a multi-line string.
+ */
+void txt_format_line(SpaceText *st, TextLine *line, int do_next) {
+ char *str, *fmt, orig, cont, find, prev = ' ';
+ int len, i;
+
+ /* Get continuation from previous line */
+ if (line->prev && (fmt=line->prev->format)) {
+ cont = fmt[strlen(fmt)+1]; /* Just after the null-terminator */
+ } else cont = 0;
+
+ /* Get original continuation from this line */
+ if (fmt=line->format) {
+ orig = fmt[strlen(fmt)+1]; /* Just after the null-terminator */
+ } else orig = 0xFF;
+
+ render_string(st, line->line);
+ str = temp_char_buf;
+ len = strlen(str);
+ if (!check_format_len(line, len)) return;
+ fmt = line->format;
+
+ while (*str) {
+ /* Handle escape sequences by skipping both \ and next char */
+ if (*str == '\\') {
+ *fmt = prev; fmt++; str++;
+ if (*str == '\0') break;
+ *fmt = prev; fmt++; str++;
+ continue;
+ }
+ /* Handle continuations */
+ else if (cont) {
+ /* Triple strings ("""...""" or '''...''') */
+ if (cont & TXT_TRISTR) {
+ find = (cont & TXT_DBLQUOTSTR) ? '"' : '\'';
+ if (*str==find && *(str+1)==find && *(str+2)==find) {
+ *fmt = 'l'; fmt++; str++;
+ *fmt = 'l'; fmt++; str++;
+ cont = 0;
+ }
+ /* Handle other strings */
+ } else {
+ find = (cont & TXT_DBLQUOTSTR) ? '"' : '\'';
+ if (*str == find) cont = 0;
+ }
+ *fmt = 'l';
+ }
+ /* Not in a string... */
else {
-
- spot = 0;
- tabs = 0;
- //see how many tabs we have
- for(a = 0; a <len; a++) {
- c = (unsigned char) in_line[a];
- if(c == '\t') {
- tabs++;
+ /* Deal with comments first */
+ if (prev == '#' || *str == '#')
+ *fmt = '#';
+ /* Strings */
+ else if (*str == '"' || *str == '\'') {
+ find = *str;
+ cont = (*str== '"') ? TXT_DBLQUOTSTR : TXT_SNGQUOTSTR;
+ if (*(str+1) == find && *(str+2) == find) {
+ *fmt = 'l'; fmt++; str++;
+ *fmt = 'l'; fmt++; str++;
+ cont |= TXT_TRISTR;
}
+ *fmt = 'l';
}
- //calculate the amount of MEM_mallocN we neen
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len; // +2 for good measure
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
-
- for (a = 0; a < len; a++) {
- c = (unsigned char) in_line[a];
+ /* Whitespace (all ws. has been converted to spaces) */
+ else if (*str == ' ')
+ *fmt = '_';
+ /* Numbers (digits not part of an identifier and periods followed by digits) */
+ else if ((prev != 'q' && check_digit(*str)) || (*str == '.' && check_digit(*(str+1))))
+ *fmt = 'n';
+ /* Punctuation */
+ else if (check_delim(*str))
+ *fmt = '!';
+ /* Identifiers and other text (no previous ws. or delims. so text continues) */
+ else if (prev == 'q')
+ *fmt = 'q';
+ /* Not ws, a digit, punct, or continuing text. Must be new, check for special words */
+ else {
+ /* Special vars(v) or built-in keywords(b) */
+ if ((i=find_specialvar(str)) != -1)
+ prev = 'v';
+ else if ((i=find_builtinfunc(str)) != -1)
+ prev = 'b';
+ if (i>0) {
+ while (i>1) {
+ *fmt = prev; *fmt++; *str++;
+ i--;
+ }
+ *fmt = prev;
+ } else
+ *fmt = 'q';
+ }
+ }
+ prev = *fmt;
+ fmt++;
+ str++;
+ }
- check[0] = c;
- check[1] = '\0';
+ /* Terminate and add continuation char */
+ *fmt = '\0'; fmt++;
+ *fmt = cont;
- if (check_delim(check))
- {
- switch (c) {
- case '\"':
- if(in_line[a] == '\"' && in_line[a+1] == '\"' && in_line[a+2] == '\"') {
- format[spot] = format[spot+1] = format[spot+2] = 'l';
- spot +=3;
- a += 3;
- while(in_line[a] != '\"' || in_line[a-1] != '\"' || in_line[a-2] != '\"') {
- c = (unsigned char) in_line[a];
- if(a >= len) {
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
- if(!(tmp= tmp->next)) {
- return;
- } else {
- in_line = tmp->line;
- len = strlen(in_line);
- tabs = 0;
- for(b = 0; b <len; b++) {
- c = (unsigned char) in_line[b];
- if(c == '\t') {
- tabs++;
- }
- }
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len;
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
- a = 0; spot = 0;
- }
- } else {
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- a++;
- } else {
- format[spot] = ' ';
- a++; spot++;
- }
- } else {
- format[spot] = 'l';
- a++; spot++;
- }
- }
- }
- format[spot] = 'l';
- spot++;
- } else {
- format[spot] = 'l';
- a++; spot++;
- while(in_line[a] != '\"') {
- c = (unsigned char) in_line[a];
- if(a >= len) {
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
- if(!(tmp= tmp->next)) {
- return;
- } else {
- in_line = tmp->line;
- len = strlen(in_line);
- for(b = 0; b <len; b++) {
- c = (unsigned char) in_line[b];
- if(c == '\t') {
- tabs++;
- }
- }
- //calculate the amount of MEM_mallocN we neen
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len;
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
- a = 0; spot = 0;
- }
- }
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- a++;
- } else {
- format[spot] = ' ';
- a++; spot++;
- }
- } else {
- format[spot] = 'l';
- a++; spot++;
- }
- }
- format[spot] = 'l';
- spot++;
- }
- break;
- case '\'':
- if(in_line[a] == '\'' && in_line[a+1] == '\'' && in_line[a+2] == '\'') {
- format[spot] = format[spot+1] = format[spot+2] = 'l';
- spot +=3;
- a += 3;
- while(in_line[a] != '\'' || in_line[a-1] != '\'' || in_line[a-2] != '\'') {
- c = (unsigned char) in_line[a];
- if(a >= len) {
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
- if(!(tmp= tmp->next)) {
- return;
- } else {
- in_line = tmp->line;
- len = strlen(in_line);
- tabs = 0;
- for(b = 0; b <len; b++) {
- c = (unsigned char) in_line[b];
- if(c == '\t') {
- tabs++;
- }
- }
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len;
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
- a = 0; spot = 0;
- }
- } else {
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- a++;
- } else {
- format[spot] = ' ';
- a++; spot++;
- }
- } else {
- format[spot] = 'l';
- a++; spot++;
- }
- }
- }
- format[spot] = 'l';
- spot++;
- } else {
- format[spot] = 'l';
- a++; spot++;
- while(in_line[a] != '\'') {
- c = (unsigned char) in_line[a];
- if(a >= len) {
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
- if(!(tmp= tmp->next)) {
- return;
- } else {
- in_line = tmp->line;
- len = strlen(in_line);
- for(b = 0; b <len; b++) {
- c = (unsigned char) in_line[b];
- if(c == '\t') {
- tabs++;
- }
- }
- //calculate the amount of MEM_mallocN we neen
- mem_amount = (((tabs*st->tabnumber)-tabs)+2)+len;
- if (tmp->format) MEM_freeN(tmp->format);
- tmp->format = MEM_mallocN(mem_amount, "Syntax_format");
- a = 0; spot = 0;
- }
- }
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- a++;
- } else {
- format[spot] = ' ';
- a++; spot++;
- }
- } else {
- format[spot] = 'l';
- a++; spot++;
- }
- }
- format[spot] = 'l';
- spot++;
- }
- break;
- case '#':
- while(a<len) {
- c = (unsigned char) in_line[a];
- if(c == '\t' || c == ' ') {
- if(c == '\t') {
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = '#';
- spot++;
- }
- a++;
- } else {
- format[spot] = '#';
- a++; spot++;
- }
- } else {
- format[spot] = '#';
- a++; spot++;
- }
- }
- break;
- case ' ':
- format[spot] = ' ';
- spot++;
- break;
- case '\t':
- for(b = st->tabnumber-(spot%st->tabnumber); b > 0; b--) {
- format[spot] = ' ';
- spot++;
- }
- break;
- default:
- format[spot] = 'q';
- spot++;
-
- break;
- }
- } else if (check_numbers(check)) {
- while (a < len) {
- c = (unsigned char) in_line[a];
- other[0] = c;
- other[1] = '\0';
- if (check_delim(other) && c != '.') {
- a--; break;
- } else {
- format[spot] = 'n';
- a++; spot++;
- }
- }
- } else {
- letter = 0;
- while (a < len) {
- c = (unsigned char) in_line[a];
- other[0] = c;
- other[1] = '\0';
- if (check_delim(other)) {
- a--;
- break;
- } else {
- check[letter] = (unsigned char) in_line[a];
- letter++;
- a++;
- }
- }
- check[letter] = '\0';
- if (check_builtinfuncs(check)) {
- for (b = 0; b < strlen(check); b++) {
- format[spot] = 'b';
- spot++;
- }
- } else if (check_specialvars(check)) { /*If TRUE then color and color next word*/
- for (b = 0; b < strlen(check); b++) {
- format[spot] = 'b';
- spot++;
- }
- a++;
- format[spot] = 'q';
- spot++; a++;
- letter = 0;
- while (a < len) {
- c = (unsigned char) in_line[a];
- other[0] = c;
- other[1] = '\0';
- if (check_delim(other)) {
- a--;
- break;
- } else {
- check[letter] = (unsigned char) in_line[a];
- letter++;
- a++;
- }
- }
- check[letter] = '\0';
- for (b = 0; b < strlen(check); b++) {
- format[spot] = 'v';
- spot++;
- }
- }else {
- for (b = 0; b < strlen(check); b++) {
- format[spot] = 'q';
- spot++;
- }
- }
- }
+ /* Debugging */
+ //print_format(st, line);
+
+ /* If continuation has changed and we're allowed, process the next line */
+ if (cont!=orig && do_next && line->next) {
+ txt_format_line(st, line->next, do_next);
+ }
+}
+
+void txt_format_text(SpaceText *st)
+{
+ TextLine *linep;
+
+ if (!st->text) return;
+
+ for (linep=st->text->lines.first; linep; linep=linep->next)
+ txt_format_line(st, linep, 0);
+}
+
+static void format_draw_color(char formatchar) {
+ switch (formatchar) {
+ case '_': /* Whitespace */
+ break;
+ case '!': /* Symbols */
+ BIF_ThemeColorBlend(TH_TEXT, TH_BACK, 0.5f);
+ break;
+ case '#': /* Comments */
+ BIF_ThemeColor(TH_SYNTAX_C);
+ break;
+ case 'n': /* Numerals */
+ BIF_ThemeColor(TH_SYNTAX_N);
+ break;
+ case 'l': /* Strings */
+ BIF_ThemeColor(TH_SYNTAX_L);
+ break;
+ case 'v': /* Specials: class, def */
+ BIF_ThemeColor(TH_SYNTAX_V);
+ break;
+ case 'b': /* Keywords: for, print, etc. */
+ BIF_ThemeColor(TH_SYNTAX_B);
+ break;
+ case 'q': /* Other text (identifiers) */
+ default:
+ BIF_ThemeColor(TH_TEXT);
+ break;
+ }
+}
+
+static int text_draw_wrapped(SpaceText *st, char *str, int x, int y, int w, char *format)
+{
+ int basex, i, a, len, start, end, max, lines;
+
+ len= render_string(st, str);
+ str= temp_char_buf;
+ max= w/spacetext_get_fontwidth(st);
+ if (max<8) max= 8;
+ basex= x;
+
+ lines= 1;
+ start= 0;
+ end= max;
+ for (i=0; i<len; i++) {
+ if (i-start >= max) {
+ /* Draw the visible portion of text on the overshot line */
+ for (a=start; a<end; a++) {
+ if (st->showsyntax && format) format_draw_color(format[a]);
+ glRasterPos2i(x, y);
+ BMF_DrawCharacter(spacetext_get_font(st), str[a]);
+ x += BMF_GetCharacterWidth(spacetext_get_font(st), str[a]);
}
- format[spot] = '\0';
- memcpy(tmp->format, format, strlen(format));
+ y -= st->lheight;
+ x= basex;
+ lines++;
+ start= end;
+ end += max;
+ } else if (str[i]==' ' || str[i]=='-') {
+ end = i+1;
}
-
- tmp = tmp->next;
}
+ /* Draw the remaining text */
+ for (a=start; a<len; a++) {
+ if (st->showsyntax && format) format_draw_color(format[a]);
+ glRasterPos2i(x, y);
+ BMF_DrawCharacter(spacetext_get_font(st), str[a]);
+ x += BMF_GetCharacterWidth(spacetext_get_font(st), str[a]);
+ }
+ return lines;
}
-static int text_draw(SpaceText *st, char *str, int cshift, int maxwidth, int draw, int x, int y, char *format) {
+static int text_draw(SpaceText *st, char *str, int cshift, int maxwidth, int draw, int x, int y, char *format)
+{
int r=0, w= 0;
char *in;
int *acc;
@@ -544,40 +527,15 @@ static int text_draw(SpaceText *st, char *str, int cshift, int maxwidth, int dra
if (draw) {
if(st->showsyntax && format) {
int amount, a;
- char out[2];
format = format+cshift;
amount = strlen(in);
for(a = 0; a < amount; a++) {
- out[0] = (unsigned char) in[a];
- out[1] = '\0';
- switch (format[a]) {
- case 'l':
- BIF_ThemeColor(TH_SYNTAX_L);
- break;
- case 'b':
- BIF_ThemeColor(TH_SYNTAX_B);
- break;
- case '#':
- BIF_ThemeColor(TH_SYNTAX_C);
- break;
- case 'v':
- BIF_ThemeColor(TH_SYNTAX_V);
- break;
- case 'n':
- BIF_ThemeColor(TH_SYNTAX_N);
- break;
- case 'q':
- BIF_ThemeColor(TH_TEXT);
- break;
- default:
- BIF_ThemeColor(TH_TEXT);
- break;
- }
+ format_draw_color(format[a]);
glRasterPos2i(x, y);
- BMF_DrawString(spacetext_get_font(st), out);
- x = x+BMF_GetStringWidth(spacetext_get_font(st), out);
+ BMF_DrawCharacter(spacetext_get_font(st), in[a]);
+ x = x+BMF_GetCharacterWidth(spacetext_get_font(st), in[a]);
}
} else {
glRasterPos2i(x, y);
@@ -609,14 +567,6 @@ static void set_cursor_to_pos (SpaceText *st, int x, int y, int sel)
else { linep= &text->curl; charp= &text->curc; }
y= (curarea->winy - y)/st->lheight;
-
- y-= txt_get_span(text->lines.first, *linep) - st->top;
-
- if (y>0) {
- while (y-- != 0) if((*linep)->next) *linep= (*linep)->next;
- } else if (y<0) {
- while (y++ != 0) if((*linep)->prev) *linep= (*linep)->prev;
- }
if(st->showlinenrs)
x-= TXT_OFFSET+TEXTXLOC;
@@ -626,97 +576,352 @@ static void set_cursor_to_pos (SpaceText *st, int x, int y, int sel)
if (x<0) x= 0;
x = (x/spacetext_get_fontwidth(st)) + st->left;
- w= render_string(st, (*linep)->line);
- if(x<w) *charp= temp_char_accum[x];
- else *charp= (*linep)->len;
-
- if(!sel) txt_pop_sel(text);
-}
-
-static void draw_cursor(SpaceText *st) {
- int h, x, i;
- Text *text= st->text;
- TextLine *linef, *linel;
- int charf, charl;
-
- if (text->curl==text->sell && text->curc==text->selc) {
- x= text_draw(st, text->curl->line, st->left, text->curc, 0, 0, 0, NULL);
-
- if (x) {
- h= txt_get_span(text->lines.first, text->curl) - st->top;
+ if (st->wordwrap) {
+ int i, j, endj, curs, max, chop, start, end, chars, loop;
+ char ch;
+
+ /* Point to first visible line */
+ *linep= text->lines.first;
+ for (i=0; i<st->top && (*linep)->next; i++) *linep= (*linep)->next;
+
+ max= get_wrap_width(st);
+
+ loop= 1;
+ while (loop && *linep) {
+ start= 0;
+ end= max;
+ chop= 1;
+ chars= 0;
+ curs= 0;
+ for (i=0, j=0; loop; j++) {
+
+ /* Mimic replacement of tabs */
+ ch= (*linep)->line[j];
+ if (ch=='\t') {
+ chars= st->tabnumber-i%st->tabnumber;
+ ch= ' ';
+ } else
+ chars= 1;
+
+ while (chars--) {
+ /* Gone too far, go back to last wrap point */
+ if (y<0) {
+ *charp= endj;
+ loop= 0;
+ break;
+ /* Exactly at the cursor, done */
+ } else if (y==0 && i-start==x) {
+ *charp= curs= j;
+ loop= 0;
+ break;
+ /* Prepare curs for next wrap */
+ } else if (i-end==x) {
+ curs= j;
+ }
+ if (i-start>=max) {
+ if (chop) endj= j;
+ y--;
+ start= end;
+ end += max;
+ chop= 1;
+ if (y==0 && i-start>=x) {
+ *charp= curs;
+ loop= 0;
+ break;
+ }
+ } else if (ch==' ' || ch=='-' || ch=='\0') {
+ if (y==0 && i-start>=x) {
+ *charp= curs;
+ loop= 0;
+ break;
+ }
+ end = i+1;
+ endj = j;
+ chop= 0;
+ }
+ i++;
+ }
+ if (ch=='\0') break;
+ }
+ if (!loop || y<0) break;
- BIF_ThemeColor(TH_HILITE);
+ if (!(*linep)->next) {
+ *charp= (*linep)->len;
+ break;
+ }
- glRecti(x-1, curarea->winy-st->lheight*(h)-2, x+1, curarea->winy-st->lheight*(h+1)-2);
+ /* On correct line but didn't meet cursor, must be at end */
+ if (y==0) {
+ *charp= (*linep)->len;
+ break;
+ }
+ *linep= (*linep)->next;
+ y--;
}
+
} else {
- int span= txt_get_span(text->curl, text->sell);
+ y-= txt_get_span(text->lines.first, *linep) - st->top;
- if (span<0) {
- linef= text->sell;
- charf= text->selc;
-
- linel= text->curl;
- charl= text->curc;
- } else if (span>0) {
- linef= text->curl;
- charf= text->curc;
-
- linel= text->sell;
- charl= text->selc;
- } else {
- linef= linel= text->curl;
-
- if (text->curc<text->selc) {
- charf= text->curc;
- charl= text->selc;
- } else {
- charf= text->selc;
- charl= text->curc;
+ if (y>0) {
+ while (y-- != 0) if((*linep)->next) *linep= (*linep)->next;
+ } else if (y<0) {
+ while (y++ != 0) if((*linep)->prev) *linep= (*linep)->prev;
+ }
+
+
+ w= render_string(st, (*linep)->line);
+ if(x<w) *charp= temp_char_accum[x];
+ else *charp= (*linep)->len;
+ }
+ if(!sel) txt_pop_sel(text);
+}
+
+static int get_wrap_width(SpaceText *st) {
+ int x, max;
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ max= (curarea->winx-x)/spacetext_get_fontwidth(st);
+ return max>8 ? max : 8;
+}
+
+/* Returns the number of wrap points (or additional lines) in the given string */
+static int get_wrap_points(SpaceText *st, char *line) {
+ int start, end, taboffs, i, max, count;
+
+ if (!st->wordwrap) return 0;
+
+ end= max= get_wrap_width(st);
+ count= taboffs= start= 0;
+
+ for (i=0; line[i]!='\0'; i++) {
+ if (i-start+taboffs>=max) {
+ count++;
+ start= end;
+ end += max;
+ taboffs= 0;
+ } else if (line[i]==' ' || line[i]=='\t' || line[i]=='-') {
+ end = i+1;
+ if (line[i]=='\t')
+ taboffs += st->tabnumber-(i-start)%st->tabnumber;
+ }
+ }
+ return count;
+}
+
+/* Sets (offl, offc) for transforming (line, curs) to its wrapped position */
+static void wrap_offset(SpaceText *st, TextLine *linein, int cursin, int *offl, int *offc) {
+ Text *text;
+ TextLine *linep;
+ int i, j, start, end, chars, max, chop;
+ char ch;
+
+ *offl= *offc= 0;
+
+ if (!st->text) return;
+ if (!st->wordwrap) return;
+
+ text= st->text;
+
+ /* Move pointer to first visible line (top) */
+ linep= text->lines.first;
+ i= st->top;
+ while (i>0 && linep) {
+ if (linep == linein) return; /* Line before top */
+ linep= linep->next;
+ i--;
+ }
+
+ max= get_wrap_width(st);
+
+ while (linep) {
+ start= 0;
+ end= max;
+ chop= 1;
+ chars= 0;
+ *offc= 0;
+ for (i=0, j=0; linep->line[j]!='\0'; j++) {
+
+ /* Mimic replacement of tabs */
+ ch= linep->line[j];
+ if (ch=='\t') {
+ chars= st->tabnumber-i%st->tabnumber;
+ if (linep==linein && i<cursin) cursin += chars-1;
+ ch= ' ';
+ } else
+ chars= 1;
+
+ while (chars--) {
+ if (i-start>=max) {
+ if (chop && linep==linein && i >= cursin)
+ return;
+ (*offl)++;
+ *offc -= end-start;
+ start= end;
+ end += max;
+ chop= 1;
+ } else if (ch==' ' || ch=='-') {
+ end = i+1;
+ chop= 0;
+ if (linep==linein && i >= cursin)
+ return;
+ }
+ i++;
}
}
-
- /* Walk to the beginning of visible text */
- h= txt_get_span(text->lines.first, linef) - st->top;
- while (h++<-1 && linef!=linel) linef= linef->next;
-
- x= text_draw(st, linef->line, st->left, charf, 0, 0, 0, NULL);
+ if (linep==linein) break;
+ linep= linep->next;
+ }
+}
- BIF_ThemeColor(TH_SHADE2);
+static int get_char_pos(SpaceText *st, char *line, int cur) {
+ int a=0, i;
+ for (i=0; i<cur && line[i]; i++) {
+ if (line[i]=='\t')
+ a += st->tabnumber-a%st->tabnumber;
+ else
+ a++;
+ }
+ return a;
+}
- if(st->showlinenrs) {
- if (!x) x= TXT_OFFSET + TEXTXLOC -4;
- } else {
- if (!x) x= TXT_OFFSET - 4;
+static void draw_markers(SpaceText *st) {
+ Text *text= st->text;
+ TextMarker *marker, *next;
+ TextLine *top, *bottom, *line;
+ int offl, offc, i, cy, x1, x2, y1, y2, x, y;
+
+ for (i=st->top, top= text->lines.first; top->next && i>0; i--) top= top->next;
+ for (i=st->viewlines-1, bottom=top; bottom->next && i>0; i--) bottom= bottom->next;
+
+ for (marker= text->markers.first; marker; marker= next) {
+ next= marker->next;
+ for (cy= 0, line= top; line; cy++, line= line->next) {
+ if (cy+st->top==marker->lineno) {
+ /* Remove broken markers */
+ if (marker->end>line->len || marker->start>marker->end) {
+ BLI_freelinkN(&text->markers, marker);
+ break;
+ }
+
+ wrap_offset(st, line, marker->start, &offl, &offc);
+ x1= get_char_pos(st, line->line, marker->start) - st->left + offc;
+ y1= cy + offl;
+ wrap_offset(st, line, marker->end, &offl, &offc);
+ x2= get_char_pos(st, line->line, marker->end) - st->left + offc;
+ y2= cy + offl;
+
+ glColor3ub(marker->color[0], marker->color[1], marker->color[2]);
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ y= curarea->winy-3;
+
+ if (y1==y2) {
+ y -= y1*st->lheight;
+ glBegin(GL_LINE_LOOP);
+ glVertex2i(x+x2*spacetext_get_fontwidth(st)+1, y);
+ glVertex2i(x+x1*spacetext_get_fontwidth(st)-2, y);
+ glVertex2i(x+x1*spacetext_get_fontwidth(st)-2, y-st->lheight);
+ glVertex2i(x+x2*spacetext_get_fontwidth(st)+1, y-st->lheight);
+ glEnd();
+ } else {
+ y -= y1*st->lheight;
+ glBegin(GL_LINE_STRIP);
+ glVertex2i(curarea->winx, y);
+ glVertex2i(x+x1*spacetext_get_fontwidth(st)-2, y);
+ glVertex2i(x+x1*spacetext_get_fontwidth(st)-2, y-st->lheight);
+ glVertex2i(curarea->winx, y-st->lheight);
+ glEnd();
+ y-=st->lheight;
+ for (i=y1+1; i<y2; i++) {
+ glBegin(GL_LINES);
+ glVertex2i(x, y);
+ glVertex2i(curarea->winx, y);
+ glVertex2i(x, y-st->lheight);
+ glVertex2i(curarea->winx, y-st->lheight);
+ glEnd();
+ y-=st->lheight;
+ }
+ glBegin(GL_LINE_STRIP);
+ glVertex2i(x, y);
+ glVertex2i(x+x2*spacetext_get_fontwidth(st)+1, y);
+ glVertex2i(x+x2*spacetext_get_fontwidth(st)+1, y-st->lheight);
+ glVertex2i(x, y-st->lheight);
+ glEnd();
+ }
+
+ break;
+ }
+ if (line==bottom) break;
}
+ }
+}
+
+static void draw_cursor(SpaceText *st) {
+ Text *text= st->text;
+ int vcurl, vcurc, vsell, vselc, hidden=0;
+ int offl, offc, x, y, w, i;
+
+ /* Draw the selection */
+ if (text->curl!=text->sell || text->curc!=text->selc) {
+
+ /* Convert all to view space character coordinates */
+ wrap_offset(st, text->curl, text->curc, &offl, &offc);
+ vcurl = txt_get_span(text->lines.first, text->curl) - st->top + offl;
+ vcurc = get_char_pos(st, text->curl->line, text->curc) - st->left + offc;
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ vsell = txt_get_span(text->lines.first, text->sell) - st->top + offl;
+ vselc = get_char_pos(st, text->sell->line, text->selc) - st->left + offc;
+
+ if (vcurc<0) vcurc=0;
+ if (vselc<0) vselc=0, hidden=1;
- while (linef && linef != linel) {
- h= txt_get_span(text->lines.first, linef) - st->top;
- if (h>st->viewlines) break;
-
- glRecti(x, curarea->winy-st->lheight*(h)-2, curarea->winx, curarea->winy-st->lheight*(h+1)-2);
- if(st->showlinenrs)
- glRecti(TXT_OFFSET+TEXTXLOC-4, curarea->winy-st->lheight*(h+1)-2, TXT_OFFSET+TEXTXLOC, curarea->winy-st->lheight*(h+2)-2);
- else
- glRecti(TXT_OFFSET-4, curarea->winy-st->lheight*(h+1)-2, TXT_OFFSET, curarea->winy-st->lheight*(h+2)-2);
+ BIF_ThemeColor(TH_SHADE2);
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ y= curarea->winy-2;
- if(st->showlinenrs)
- x= TXT_OFFSET + TEXTXLOC;
+ if (vcurl==vsell) {
+ y -= vcurl*st->lheight;
+ if (vcurc < vselc)
+ glRecti(x+vcurc*spacetext_get_fontwidth(st)-1, y, x+vselc*spacetext_get_fontwidth(st), y-st->lheight);
else
- x= TXT_OFFSET;
-
- linef= linef->next;
+ glRecti(x+vselc*spacetext_get_fontwidth(st)-1, y, x+vcurc*spacetext_get_fontwidth(st), y-st->lheight);
+ } else {
+ int froml, fromc, tol, toc;
+ if (vcurl < vsell) {
+ froml= vcurl; tol= vsell;
+ fromc= vcurc; toc= vselc;
+ } else {
+ froml= vsell; tol= vcurl;
+ fromc= vselc; toc= vcurc;
+ }
+ y -= froml*st->lheight;
+ glRecti(x+fromc*spacetext_get_fontwidth(st)-1, y, curarea->winx, y-st->lheight); y-=st->lheight;
+ for (i=froml+1; i<tol; i++)
+ glRecti(x-4, y, curarea->winx, y-st->lheight), y-=st->lheight;
+ glRecti(x-4, y, x+toc*spacetext_get_fontwidth(st), y-st->lheight); y-=st->lheight;
}
-
- h= txt_get_span(text->lines.first, linef) - st->top;
-
- i= text_draw(st, linel->line, st->left, charl, 0, 0, 0, NULL);
- if(i) glRecti(x, curarea->winy-st->lheight*(h)-2, i, curarea->winy-st->lheight*(h+1)-2);
-
+ } else {
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ vsell = txt_get_span(text->lines.first, text->sell) - st->top + offl;
+ vselc = get_char_pos(st, text->sell->line, text->selc) - st->left + offc;
+ if (vselc<0) vselc=0, hidden=1;
}
- do_brackets();
- BIF_ThemeColor(TH_TEXT);
+ if (!hidden) {
+ /* Draw the cursor itself (we draw the sel. cursor as this is the leading edge) */
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ x += vselc*spacetext_get_fontwidth(st);
+ y= curarea->winy-2 - vsell*st->lheight;
+
+ if (st->overwrite) {
+ char ch= text->sell->line[text->selc];
+ if (!ch) ch= ' ';
+ w= BMF_GetCharacterWidth(spacetext_get_font(st), ch);
+ BIF_ThemeColor(TH_HILITE);
+ glRecti(x, y-st->lheight-1, x+w, y-st->lheight+1);
+ } else {
+ BIF_ThemeColor(TH_HILITE);
+ glRecti(x-1, y, x+1, y-st->lheight);
+ }
+ }
}
static void calc_text_rcts(SpaceText *st)
@@ -859,6 +1064,38 @@ static void screen_skip(SpaceText *st, int lines)
if (st->top<0) st->top= 0;
}
+static void cursor_skip(SpaceText *st, int lines, int sel)
+{
+ Text *text;
+ TextLine **linep;
+ int oldl, oldc, *charp;
+
+ if (!st) return;
+ if (st->spacetype != SPACE_TEXT) return;
+ if (!st->text) return;
+
+ text= st->text;
+
+ if (sel) linep= &text->sell, charp= &text->selc;
+ else linep= &text->curl, charp= &text->curc;
+ oldl= txt_get_span(text->lines.first, *linep);
+ oldc= *charp;
+
+ while (lines>0 && (*linep)->next) {
+ *linep= (*linep)->next;
+ lines--;
+ }
+ while (lines<0 && (*linep)->prev) {
+ *linep= (*linep)->prev;
+ lines++;
+ }
+
+ if (*charp > (*linep)->len) *charp= (*linep)->len;
+
+ if (!sel) txt_pop_sel(st->text);
+ txt_undo_add_toop(st->text, sel?UNDO_STO:UNDO_CTO, oldl, oldc, txt_get_span(text->lines.first, *linep), *charp);
+}
+
/*
* mode 1 == view scroll
* mode 2 == scrollbar
@@ -874,10 +1111,8 @@ static void do_textscroll(SpaceText *st, int mode)
st->flags|= ST_SCROLL_SELECT;
- glDrawBuffer(GL_FRONT);
- uiEmboss(st->txtbar.xmin, st->txtbar.ymin, st->txtbar.xmax, st->txtbar.ymax, st->flags & ST_SCROLL_SELECT);
- bglFlush();
- glDrawBuffer(GL_BACK);
+ scrarea_do_windraw(curarea);
+ screen_swapbuffers();
getmouseco_areawin(mval);
old[0]= hold[0]= mval[0];
@@ -895,9 +1130,12 @@ static void do_textscroll(SpaceText *st, int mode)
if (delta[0] || delta[1]) {
screen_skip(st, delta[1]);
- st->left+= delta[0];
- if (st->left<0) st->left= 0;
-
+ if (st->wordwrap) {
+ st->left= 0;
+ } else {
+ st->left+= delta[0];
+ if (st->left<0) st->left= 0;
+ }
scrarea_do_windraw(curarea);
screen_swapbuffers();
@@ -912,10 +1150,8 @@ static void do_textscroll(SpaceText *st, int mode)
}
st->flags^= ST_SCROLL_SELECT;
- glDrawBuffer(GL_FRONT);
- uiEmboss(st->txtbar.xmin, st->txtbar.ymin, st->txtbar.xmax, st->txtbar.ymax, st->flags & ST_SCROLL_SELECT);
- bglFlush();
- glDrawBuffer(GL_BACK);
+ scrarea_do_windraw(curarea);
+ screen_swapbuffers();
}
static void do_selection(SpaceText *st, int selecting)
@@ -957,7 +1193,7 @@ static void do_selection(SpaceText *st, int selecting)
scrarea_do_windraw(curarea);
screen_swapbuffers();
- } else if (mval[0]<0 || mval[0]>curarea->winx) {
+ } else if (!st->wordwrap && (mval[0]<0 || mval[0]>curarea->winx)) {
if (mval[0]>curarea->winx) st->left++;
else if (mval[0]<0 && st->left>0) st->left--;
@@ -986,19 +1222,409 @@ static void do_selection(SpaceText *st, int selecting)
if (sell!=linep2 || selc!=charp2)
txt_undo_add_toop(st->text, UNDO_STO, sell, selc, linep2, charp2);
+
+ pop_space_text(st);
+}
+
+static int do_suggest_select(SpaceText *st)
+{
+ SuggItem *item, *first, *last, *sel;
+ short mval[2];
+ TextLine *tmp;
+ int l, x, y, w, h, i;
+ int tgti, *top;
+
+ if (!st || !st->text) return 0;
+ if (!texttool_text_is_active(st->text)) return 0;
+
+ first = texttool_suggest_first();
+ last = texttool_suggest_last();
+ sel = texttool_suggest_selected();
+ top = texttool_suggest_top();
+
+ if (!last || !first)
+ return 0;
+
+ /* Count the visible lines to the cursor */
+ for (tmp=st->text->curl, l=-st->top; tmp; tmp=tmp->prev, l++);
+ if (l<0) return 0;
+
+ if(st->showlinenrs) {
+ x = spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4;
+ } else {
+ x = spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET - 4;
+ }
+ y = curarea->winy - st->lheight*l - 2;
+
+ w = SUGG_LIST_WIDTH*spacetext_get_fontwidth(st) + 20;
+ h = SUGG_LIST_SIZE*st->lheight + 8;
+
+ getmouseco_areawin(mval);
+
+ if (mval[0]<x || x+w<mval[0] || mval[1]<y-h || y<mval[1])
+ return 0;
+
+ /* Work out which of the items is at the top of the visible list */
+ for (i=0, item=first; i<*top && item->next; i++, item=item->next);
+
+ /* Work out the target item index in the visible list */
+ tgti = (y-mval[1]-4) / st->lheight;
+ if (tgti<0 || tgti>SUGG_LIST_SIZE)
+ return 1;
+
+ for (i=tgti; i>0 && item->next; i--, item=item->next);
+ if (item)
+ texttool_suggest_select(item);
+ return 1;
+}
+
+static void pop_suggest_list() {
+ SuggItem *item, *sel;
+ int *top, i;
+
+ item= texttool_suggest_first();
+ sel= texttool_suggest_selected();
+ top= texttool_suggest_top();
+
+ i= 0;
+ while (item && item != sel) {
+ item= item->next;
+ i++;
+ }
+ if (i > *top+SUGG_LIST_SIZE-1)
+ *top= i-SUGG_LIST_SIZE+1;
+ else if (i < *top)
+ *top= i;
+}
+
+void draw_documentation(SpaceText *st)
+{
+ TextLine *tmp;
+ char *docs, buf[DOC_WIDTH+1], *p;
+ int len, i, br, lines;
+ int boxw, boxh, l, x, y, top;
+
+ if (!st || !st->text) return;
+ if (!texttool_text_is_active(st->text)) return;
+
+ docs = texttool_docs_get();
+
+ if (!docs) return;
+
+ /* Count the visible lines to the cursor */
+ for (tmp=st->text->curl, l=-st->top; tmp; tmp=tmp->prev, l++);
+ if (l<0) return;
+
+ if(st->showlinenrs) {
+ x= spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4;
+ } else {
+ x= spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET - 4;
+ }
+ if (texttool_suggest_first()) {
+ x += SUGG_LIST_WIDTH*spacetext_get_fontwidth(st) + 50;
+ }
+
+ top= y= curarea->winy - st->lheight*l - 2;
+ len= strlen(docs);
+ boxw= DOC_WIDTH*spacetext_get_fontwidth(st) + 20;
+ boxh= (DOC_HEIGHT+1)*st->lheight;
+
+ /* Draw panel */
+ BIF_ThemeColor(TH_BACK);
+ glRecti(x, y, x+boxw, y-boxh);
+ BIF_ThemeColor(TH_SHADE1);
+ glBegin(GL_LINE_LOOP);
+ glVertex2i(x, y);
+ glVertex2i(x+boxw, y);
+ glVertex2i(x+boxw, y-boxh);
+ glVertex2i(x, y-boxh);
+ glEnd();
+ glBegin(GL_LINE_LOOP);
+ glVertex2i(x+boxw-10, y-7);
+ glVertex2i(x+boxw-4, y-7);
+ glVertex2i(x+boxw-7, y-2);
+ glEnd();
+ glBegin(GL_LINE_LOOP);
+ glVertex2i(x+boxw-10, y-boxh+7);
+ glVertex2i(x+boxw-4, y-boxh+7);
+ glVertex2i(x+boxw-7, y-boxh+2);
+ glEnd();
+ BIF_ThemeColor(TH_TEXT);
+
+ i= 0; br= DOC_WIDTH; lines= -doc_scroll;
+ for (p=docs; *p; p++) {
+ if (*p == '\r' && *(++p) != '\n') *(--p)= '\n'; /* Fix line endings */
+ if (*p == ' ' || *p == '\t')
+ br= i;
+ else if (*p == '\n') {
+ buf[i]= '\0';
+ if (lines>=0) {
+ y -= st->lheight;
+ text_draw(st, buf, 0, 0, 1, x+4, y-3, NULL);
+ }
+ i= 0; br= DOC_WIDTH; lines++;
+ }
+ buf[i++]= *p;
+ if (i == DOC_WIDTH) { /* Reached the width, go to last break and wrap there */
+ buf[br]= '\0';
+ if (lines>=0) {
+ y -= st->lheight;
+ text_draw(st, buf, 0, 0, 1, x+4, y-3, NULL);
+ }
+ p -= i-br-1; /* Rewind pointer to last break */
+ i= 0; br= DOC_WIDTH; lines++;
+ }
+ if (lines >= DOC_HEIGHT) break;
+ }
+ if (doc_scroll > 0 && lines < DOC_HEIGHT) {
+ doc_scroll--;
+ draw_documentation(st);
+ }
+}
+
+void draw_suggestion_list(SpaceText *st)
+{
+ SuggItem *item, *first, *last, *sel;
+ TextLine *tmp;
+ char str[SUGG_LIST_WIDTH+1];
+ int w, boxw=0, boxh, i, l, x, y, b, *top;
+
+ if (!st || !st->text) return;
+ if (!texttool_text_is_active(st->text)) return;
+
+ first = texttool_suggest_first();
+ last = texttool_suggest_last();
+
+ if (!first || !last) return;
+
+ pop_suggest_list();
+ sel = texttool_suggest_selected();
+ top = texttool_suggest_top();
+
+ /* Count the visible lines to the cursor */
+ for (tmp=st->text->curl, l=-st->top; tmp; tmp=tmp->prev, l++);
+ if (l<0) return;
+
+ if(st->showlinenrs) {
+ x = spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET + TEXTXLOC - 4;
+ } else {
+ x = spacetext_get_fontwidth(st)*(st->text->curc-st->left) + TXT_OFFSET - 4;
+ }
+ y = curarea->winy - st->lheight*l - 2;
+
+ boxw = SUGG_LIST_WIDTH*spacetext_get_fontwidth(st) + 20;
+ boxh = SUGG_LIST_SIZE*st->lheight + 8;
+
+ BIF_ThemeColor(TH_SHADE1);
+ glRecti(x-1, y+1, x+boxw+1, y-boxh-1);
+ BIF_ThemeColor(TH_BACK);
+ glRecti(x, y, x+boxw, y-boxh);
+
+ /* Set the top 'item' of the visible list */
+ for (i=0, item=first; i<*top && item->next; i++, item=item->next);
+
+ for (i=0; i<SUGG_LIST_SIZE && item; i++, item=item->next) {
+
+ y -= st->lheight;
+
+ strncpy(str, item->name, SUGG_LIST_WIDTH);
+ str[SUGG_LIST_WIDTH] = '\0';
+
+ w = BMF_GetStringWidth(spacetext_get_font(st), str);
+
+ if (item == sel) {
+ BIF_ThemeColor(TH_SHADE2);
+ glRecti(x+16, y-3, x+16+w, y+st->lheight-3);
+ }
+ b=1; /* b=1 colour block, text is default. b=0 no block, colour text */
+ switch (item->type) {
+ case 'k': BIF_ThemeColor(TH_SYNTAX_B); b=0; break;
+ case 'm': BIF_ThemeColor(TH_TEXT); break;
+ case 'f': BIF_ThemeColor(TH_SYNTAX_L); break;
+ case 'v': BIF_ThemeColor(TH_SYNTAX_N); break;
+ case '?': BIF_ThemeColor(TH_TEXT); b=0; break;
+ }
+ if (b) {
+ glRecti(x+8, y+2, x+11, y+5);
+ BIF_ThemeColor(TH_TEXT);
+ }
+ text_draw(st, str, 0, 0, 1, x+16, y-1, NULL);
+
+ if (item == last) break;
+ }
+}
+
+static short check_blockhandler(SpaceText *st, short handler) {
+ short a;
+ for(a=0; a<SPACE_MAXHANDLER; a+=2)
+ if (st->blockhandler[a]==handler) return 1;
+ return 0;
+}
+
+static void text_panel_find(short cntrl) // TEXT_HANDLER_FIND
+{
+ uiBlock *block;
+
+ if (!g_find_str || !g_replace_str) {
+ g_find_str= MEM_mallocN(TXT_MAXFINDSTR+1, "find_string");
+ g_replace_str= MEM_mallocN(TXT_MAXFINDSTR+1, "replace_string");
+ g_find_str[0]= g_replace_str[0]= '\0';
+ }
+
+ block= uiNewBlock(&curarea->uiblocks, "text_panel_find", UI_EMBOSS, UI_HELV, curarea->win);
+ uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE | cntrl);
+ uiSetPanelHandler(TEXT_HANDLER_FIND); // for close and esc
+ if(uiNewPanel(curarea, block, "Find & Replace", "Text", curarea->winx-230, curarea->winy-130, 260, 120)==0) return;
+
+ uiBlockBeginAlign(block);
+ uiDefButC(block, TEX, 0, "Find: ", 0,80,220,20, g_find_str, 0,(float)TXT_MAXFINDSTR, 0,0, "");
+ uiDefIconBut(block, BUT, B_PASTEFIND, ICON_TEXT, 220,80,20,20, NULL, 0,0,0,0, "Copy from selection");
+ uiDefButC(block, TEX, 0, "Replace: ", 0,60,220,20, g_replace_str, 0,(float)TXT_MAXFINDSTR, 0,0, "");
+ uiDefIconBut(block, BUT, B_PASTEREPLACE, ICON_TEXT, 220,60,20,20, NULL, 0,0,0,0, "Copy from selection");
+ uiBlockEndAlign(block);
+ uiDefButBitI(block, TOG, TXT_FIND_WRAP, 0,"Wrap Around", 0,30,110,20,&g_find_flags,0,0,0,0,"Wrap search around current text");
+ uiDefButBitI(block, TOG, TXT_FIND_ALLTEXTS,0,"Search All Texts", 110,30,130,20,&g_find_flags,0,0,0,0,"Search in each text");
+ uiDefBut(block, BUT, B_TEXTFIND, "Find", 0,0,50,20, NULL, 0,0,0,0, "Find next");
+ uiDefBut(block, BUT, B_TEXTREPLACE, "Replace/Find", 50,0,110,20, NULL, 0,0,0,0, "Replace then find next");
+ uiDefBut(block, BUT, B_TEXTMARKALL, "Mark All", 160,0,80,20, NULL, 0,0,0,0, "Mark each occurrence to edit all from one");
+}
+
+/* mode: 0 find only, 1 replace/find, 2 mark all occurrences */
+void find_and_replace(SpaceText *st, short mode) {
+ char *tmp;
+ Text *start= NULL, *text= st->text;
+ int flags, first= 1;
+
+ if (!check_blockhandler(st, TEXT_HANDLER_FIND)) {
+ toggle_blockhandler(st->area, TEXT_HANDLER_FIND, UI_PNL_TO_MOUSE);
+ return;
+ }
+
+ if (!g_find_str || !g_replace_str) return;
+ if (g_find_str[0] == '\0') return;
+ flags= g_find_flags;
+ if (flags & TXT_FIND_ALLTEXTS) flags ^= TXT_FIND_WRAP;
+
+ do {
+ if (first)
+ txt_clear_markers(text, TMARK_GRP_FINDALL, 0);
+ first= 0;
+
+ /* Replace current */
+ if (mode && txt_has_sel(text)) {
+ tmp= txt_sel_to_buf(text);
+ if (strcmp(g_find_str, tmp)==0) {
+ if (mode==1) {
+ txt_insert_buf(text, g_replace_str);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ } else if (mode==2) {
+ char color[4];
+ BIF_GetThemeColor4ubv(TH_SHADE2, color);
+ if (txt_find_marker(text, text->curl, text->selc, TMARK_GRP_FINDALL, 0)) {
+ if (tmp) MEM_freeN(tmp), tmp=NULL;
+ break;
+ }
+ txt_add_marker(text, text->curl, text->curc, text->selc, color, TMARK_GRP_FINDALL, TMARK_EDITALL);
+ }
+ }
+ MEM_freeN(tmp);
+ tmp= NULL;
+ }
+
+ /* Find next */
+ if (txt_find_string(text, g_find_str, flags & TXT_FIND_WRAP)) {
+ pop_space_text(st);
+ } else if (flags & TXT_FIND_ALLTEXTS) {
+ if (text==start) break;
+ if (!start) start= text;
+ if (text->id.next)
+ text= st->text= text->id.next;
+ else
+ text= st->text= G.main->text.first;
+ txt_move_toline(text, 0, 0);
+ pop_space_text(st);
+ first= 1;
+ } else {
+ okee("Text not found: %s", g_find_str);
+ break;
+ }
+ } while (mode==2);
+}
+
+static void do_find_buttons(val) {
+ Text *text;
+ SpaceText *st;
+ int do_draw= 0;
+ char *tmp;
+
+ st= curarea->spacedata.first;
+ if (!st || st->spacetype != SPACE_TEXT) return;
+ text= st->text;
+ if (!text) return;
+
+ switch (val) {
+ case B_PASTEFIND:
+ if (!g_find_str) break;
+ tmp= txt_sel_to_buf(text);
+ strncpy(g_find_str, tmp, TXT_MAXFINDSTR);
+ MEM_freeN(tmp);
+ do_draw= 1;
+ break;
+ case B_PASTEREPLACE:
+ if (!g_replace_str) break;
+ tmp= txt_sel_to_buf(text);
+ strncpy(g_replace_str, tmp, TXT_MAXFINDSTR);
+ MEM_freeN(tmp);
+ do_draw= 1;
+ break;
+ case B_TEXTFIND:
+ find_and_replace(st, 0);
+ do_draw= 1;
+ break;
+ case B_TEXTREPLACE:
+ find_and_replace(st, 1);
+ do_draw= 1;
+ break;
+ case B_TEXTMARKALL:
+ find_and_replace(st, 2);
+ do_draw= 1;
+ break;
+ }
+}
+
+static void text_blockhandlers(ScrArea *sa)
+{
+ SpaceText *st= sa->spacedata.first;
+ short a;
+
+ /* warning; blocks need to be freed each time, handlers dont remove */
+ uiFreeBlocksWin(&sa->uiblocks, sa->win);
+
+ for(a=0; a<SPACE_MAXHANDLER; a+=2) {
+ /* clear action value for event */
+ switch(st->blockhandler[a]) {
+ case TEXT_HANDLER_FIND:
+ text_panel_find(st->blockhandler[a+1]);
+ break;
+ }
+ }
+ uiDrawBlocksPanels(sa, 0);
}
void drawtextspace(ScrArea *sa, void *spacedata)
{
SpaceText *st= curarea->spacedata.first;
Text *text;
- int i;
+ int i, x, y;
TextLine *tmp;
char linenr[12];
float col[3];
int linecount = 0;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
+
+ bwin_clear_viewmat(sa->win); /* clear buttons view */
+ glLoadIdentity();
BIF_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
@@ -1022,23 +1648,23 @@ void drawtextspace(ScrArea *sa, void *spacedata)
glRecti(23, 0, (st->lheight==15)?63:59, curarea->winy - 2);
}
- BIF_ThemeColor(TH_TEXT);
-
draw_cursor(st);
tmp= text->lines.first;
for (i= 0; i<st->top && tmp; i++) {
+ if (st->showsyntax && !tmp->format) txt_format_line(st, tmp, 0);
tmp= tmp->next;
linecount++;
}
-
- if(st->showsyntax) {
- if (tmp && !tmp->format) {
- get_format_string(st);
+
+ y= curarea->winy-st->lheight;
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+
+ BIF_ThemeColor(TH_TEXT);
+ for (i=0; y>0 && i<st->viewlines && tmp; i++, tmp= tmp->next) {
+ if (st->showsyntax && !tmp->format) {
+ txt_format_line(st, tmp, 0);
}
- }
-
- for (i=0; i<st->viewlines && tmp; i++, tmp= tmp->next) {
if(st->showlinenrs) {
/*Change the color of the current line the cursor is on*/
if(tmp == text->curl) {
@@ -1048,20 +1674,33 @@ void drawtextspace(ScrArea *sa, void *spacedata)
}
if(((float)(i + linecount + 1)/10000.0) < 1.0) {
sprintf(linenr, "%4d", i + linecount + 1);
- glRasterPos2i(TXT_OFFSET - 7, curarea->winy-st->lheight*(i+1));
+ glRasterPos2i(TXT_OFFSET - 7, y);
} else {
sprintf(linenr, "%5d", i + linecount + 1);
- glRasterPos2i(TXT_OFFSET - 11, curarea->winy-st->lheight*(i+1));
+ glRasterPos2i(TXT_OFFSET - 11, y);
}
BIF_ThemeColor(TH_TEXT);
BMF_DrawString(spacetext_get_font(st), linenr);
- text_draw(st, tmp->line, st->left, 0, 1, TXT_OFFSET + TEXTXLOC, curarea->winy-st->lheight*(i+1), tmp->format);
- } else
- text_draw(st, tmp->line, st->left, 0, 1, TXT_OFFSET, curarea->winy-st->lheight*(i+1), tmp->format);
+ }
+ if (st->wordwrap) {
+ int lines = text_draw_wrapped(st, tmp->line, x, y, curarea->winx-x, tmp->format);
+ y -= lines*st->lheight;
+ } else {
+ text_draw(st, tmp->line, st->left, 0, 1, x, y, tmp->format);
+ y -= st->lheight;
+ }
}
+
+ draw_brackets(st);
+ draw_markers(st);
draw_textscroll(st);
-
+ draw_documentation(st);
+ draw_suggestion_list(st);
+
+ bwin_scalematrix(sa->win, st->blockscale, st->blockscale, st->blockscale);
+ text_blockhandlers(sa);
+
curarea->win_swap= WIN_BACK_OK;
}
@@ -1075,15 +1714,19 @@ void pop_space_text (SpaceText *st)
if(!st->text) return;
if(!st->text->curl) return;
- i= txt_get_span(st->text->lines.first, st->text->curl);
+ i= txt_get_span(st->text->lines.first, st->text->sell);
if (st->top+st->viewlines <= i || st->top > i) {
st->top= i - st->viewlines/2;
}
- x= text_draw(st, st->text->curl->line, st->left, st->text->curc, 0, 0, 0, NULL);
+ if (st->wordwrap) {
+ st->left= 0;
+ } else {
+ x= text_draw(st, st->text->sell->line, st->left, st->text->selc, 0, 0, 0, NULL);
- if (x==0 || x>curarea->winx) {
- st->left= st->text->curc-0.5*(curarea->winx)/spacetext_get_fontwidth(st);
+ if (x==0 || x>curarea->winx) {
+ st->left= st->text->curc-0.5*(curarea->winx)/spacetext_get_fontwidth(st);
+ }
}
if (st->top < 0) st->top= 0;
@@ -1103,7 +1746,7 @@ void add_text_fs(char *file) /* bad but cant pass an as arg here */
st->top= 0;
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
}
@@ -1115,6 +1758,60 @@ void free_textspace(SpaceText *st)
st->text= NULL;
}
+/* returns 0 if file on disk is the same or Text is in memory only
+ returns 1 if file has been modified on disk since last local edit
+ returns 2 if file on disk has been deleted
+ -1 is returned if an error occurs
+*/
+int txt_file_modified(Text *text)
+{
+ struct stat st;
+ int result;
+ char file[FILE_MAXDIR+FILE_MAXFILE];
+
+ if (!text || !text->name)
+ return 0;
+
+ BLI_strncpy(file, text->name, FILE_MAXDIR+FILE_MAXFILE);
+ BLI_convertstringcode(file, G.sce);
+
+ if (!BLI_exists(file))
+ return 2;
+
+ result = stat(file, &st);
+
+ if(result == -1)
+ return -1;
+
+ if((st.st_mode & S_IFMT) != S_IFREG)
+ return -1;
+
+ if (st.st_mtime > text->mtime)
+ return 1;
+
+ return 0;
+}
+
+void txt_ignore_modified(Text *text) {
+ struct stat st;
+ int result;
+ char file[FILE_MAXDIR+FILE_MAXFILE];
+
+ if (!text || !text->name) return;
+
+ BLI_strncpy(file, text->name, FILE_MAXDIR+FILE_MAXFILE);
+ BLI_convertstringcode(file, G.sce);
+
+ if (!BLI_exists(file)) return;
+
+ result = stat(file, &st);
+
+ if(result == -1 || (st.st_mode & S_IFMT) != S_IFREG)
+ return;
+
+ text->mtime= st.st_mtime;
+}
+
static void save_mem_text(char *str)
{
SpaceText *st= curarea->spacedata.first;
@@ -1141,6 +1838,9 @@ void txt_write_file(Text *text)
{
FILE *fp;
TextLine *tmp;
+ int res;
+ struct stat st;
+ char file[FILE_MAXDIR+FILE_MAXFILE];
/* Do we need to get a filename? */
if (text->flags & TXT_ISMEM) {
@@ -1148,19 +1848,22 @@ void txt_write_file(Text *text)
activate_fileselect(FILE_SPECIAL, "SAVE TEXT FILE", text->name, save_mem_text);
else
activate_fileselect(FILE_SPECIAL, "SAVE TEXT FILE", text->id.name+2, save_mem_text);
- return;
+ return;
}
+
+ BLI_strncpy(file, text->name, FILE_MAXDIR+FILE_MAXFILE);
+ BLI_convertstringcode(file, G.sce);
/* Should we ask to save over? */
if (text->flags & TXT_ISTMP) {
- if (BLI_exists(text->name)) {
+ if (BLI_exists(file)) {
if (!okee("Save over")) return;
} else if (!okee("Create new file")) return;
text->flags ^= TXT_ISTMP;
}
- fp= fopen(text->name, "w");
+ fp= fopen(file, "w");
if (fp==NULL) {
error("Unable to save file");
return;
@@ -1175,6 +1878,9 @@ void txt_write_file(Text *text)
}
fclose (fp);
+
+ res= stat(file, &st);
+ text->mtime= st.st_mtime;
if (text->flags & TXT_ISDIRTY) text->flags ^= TXT_ISDIRTY;
}
@@ -1386,44 +2092,6 @@ void txt_copy_clipboard(Text *text) {
}
}
-/*
- * again==0 show find panel or find
- * again==1 find text again */
-void txt_find_panel(SpaceText *st, int again)
-{
- Text *text=st->text;
- char *findstr= last_txt_find_string;
-
- if (again==0) {
- findstr= txt_sel_to_buf(text);
- } else if (again==1) {
- char buf[256];
-
- if (findstr && strlen(findstr)<(sizeof(buf)-1))
- strcpy(buf, findstr);
- else
- buf[0]= 0;
-
- if (sbutton(buf, 0, sizeof(buf)-1, "Find: ") && buf[0])
- findstr= BLI_strdup(buf);
- else
- findstr= NULL;
- }
-
- if (findstr!=last_txt_find_string) {
- if (last_txt_find_string)
- MEM_freeN(last_txt_find_string);
- last_txt_find_string= findstr;
- }
-
- if (findstr) {
- if (txt_find_string(text, findstr))
- pop_space_text(st);
- else
- error("Not found: %s", findstr);
- }
-}
-
void run_python_script(SpaceText *st)
{
char *py_filename;
@@ -1458,6 +2126,580 @@ static void set_tabs(Text *text)
st->currtab_set = setcurr_tab(text);
}
+static void wrap_move_bol(SpaceText *st, short sel) {
+ int offl, offc, lin;
+ Text *text= st->text;
+
+ lin= txt_get_span(text->lines.first, text->sell);
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+
+ if (sel) {
+ txt_undo_add_toop(text, UNDO_STO, lin, text->selc, lin, -offc);
+ text->selc= -offc;
+ } else {
+ txt_undo_add_toop(text, UNDO_CTO, lin, text->curc, lin, -offc);
+ text->curc= -offc;
+ txt_pop_sel(text);
+ }
+}
+
+static void wrap_move_eol(SpaceText *st, short sel) {
+ int offl, offc, lin, startl, c;
+ Text *text= st->text;
+
+ lin= txt_get_span(text->lines.first, text->sell);
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ startl= offl;
+ c= text->selc;
+ while (offl==startl && text->sell->line[c]!='\0') {
+ c++;
+ wrap_offset(st, text->sell, c, &offl, &offc);
+ } if (offl!=startl) c--;
+
+ if (sel) {
+ txt_undo_add_toop(text, UNDO_STO, lin, text->selc, lin, c);
+ text->selc= c;
+ } else {
+ txt_undo_add_toop(text, UNDO_CTO, lin, text->curc, lin, c);
+ text->curc= c;
+ txt_pop_sel(text);
+ }
+}
+
+static void wrap_move_up(SpaceText *st, short sel) {
+ int offl, offl_1, offc, fromline, toline, c, target;
+ Text *text= st->text;
+
+ wrap_offset(st, text->sell, 0, &offl_1, &offc);
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ fromline= toline= txt_get_span(text->lines.first, text->sell);
+ target= text->selc + offc;
+
+ if (offl==offl_1) {
+ if (!text->sell->prev) {
+ txt_move_bol(text, sel);
+ return;
+ }
+ toline--;
+ c= text->sell->prev->len; /* End of prev. line */
+ wrap_offset(st, text->sell->prev, c, &offl, &offc);
+ c= -offc+target;
+ } else {
+ c= -offc-1; /* End of prev. line */
+ wrap_offset(st, text->sell, c, &offl, &offc);
+ c= -offc+target;
+ }
+ if (c<0) c=0;
+
+ if (sel) {
+ txt_undo_add_toop(text, UNDO_STO, fromline, text->selc, toline, c);
+ if (toline<fromline) text->sell= text->sell->prev;
+ if (c>text->sell->len) c= text->sell->len;
+ text->selc= c;
+ } else {
+ txt_undo_add_toop(text, UNDO_CTO, fromline, text->curc, toline, c);
+ if (toline<fromline) text->curl= text->curl->prev;
+ if (c>text->curl->len) c= text->curl->len;
+ text->curc= c;
+ txt_pop_sel(text);
+ }
+}
+
+static void wrap_move_down(SpaceText *st, short sel) {
+ int offl, startoff, offc, fromline, toline, c, target;
+ Text *text= st->text;
+
+ wrap_offset(st, text->sell, text->selc, &offl, &offc);
+ fromline= toline= txt_get_span(text->lines.first, text->sell);
+ target= text->selc + offc;
+ startoff= offl;
+ c= text->selc;
+ while (offl==startoff && text->sell->line[c]!='\0') {
+ c++;
+ wrap_offset(st, text->sell, c, &offl, &offc);
+ }
+
+ if (text->sell->line[c]=='\0') {
+ if (!text->sell->next) {
+ txt_move_eol(text, sel);
+ return;
+ }
+ toline++;
+ c= target;
+ } else {
+ c += target;
+ if (c > text->sell->len) c= text->sell->len;
+ }
+ if (c<0) c=0;
+
+ if (sel) {
+ txt_undo_add_toop(text, UNDO_STO, fromline, text->selc, toline, c);
+ if (toline>fromline) text->sell= text->sell->next;
+ if (c>text->sell->len) c= text->sell->len;
+ text->selc= c;
+ } else {
+ txt_undo_add_toop(text, UNDO_CTO, fromline, text->curc, toline, c);
+ if (toline>fromline) text->curl= text->curl->next;
+ if (c>text->curl->len) c= text->curl->len;
+ text->curc= c;
+ txt_pop_sel(text);
+ }
+}
+
+static void get_suggest_prefix(Text *text, int offset) {
+ int i, len;
+ char *line, tmp[256];
+
+ if (!text) return;
+ if (!texttool_text_is_active(text)) return;
+
+ line= text->curl->line;
+ for (i=text->curc-1+offset; i>=0; i--)
+ if (!check_identifier(line[i]))
+ break;
+ i++;
+ len= text->curc-i+offset;
+ if (len > 255) {
+ printf("Suggestion prefix too long\n");
+ len = 255;
+ }
+ strncpy(tmp, line+i, len);
+ tmp[len]= '\0';
+ texttool_suggest_prefix(tmp);
+}
+
+static void confirm_suggestion(Text *text, int skipleft) {
+ int i, over=0;
+ char *line;
+ SuggItem *sel;
+
+ if (!text) return;
+ if (!texttool_text_is_active(text)) return;
+
+ sel = texttool_suggest_selected();
+ if (!sel) return;
+
+ line= text->curl->line;
+ i=text->curc-skipleft-1;
+ while (i>=0) {
+ if (!check_identifier(line[i]))
+ break;
+ over++;
+ i--;
+ }
+
+ for (i=0; i<skipleft; i++)
+ txt_move_left(text, 0);
+ for (i=0; i<over; i++)
+ txt_move_left(text, 1);
+
+ txt_insert_buf(text, sel->name);
+
+ for (i=0; i<skipleft; i++)
+ txt_move_right(text, 0);
+
+ texttool_text_clear();
+}
+
+static short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val) {
+ int draw=0, tools=0, swallow=0, scroll=1;
+ if (!texttool_text_is_active(st->text)) return 0;
+ if (!st->text || st->text->id.lib) return 0;
+
+ if (st->doplugins && texttool_text_is_active(st->text)) {
+ if (texttool_suggest_first()) tools |= TOOL_SUGG_LIST;
+ if (texttool_docs_get()) tools |= TOOL_DOCUMENT;
+ }
+
+ if (ascii) {
+ if (tools & TOOL_SUGG_LIST) {
+ if ((ascii != '_' && ascii != '*' && ispunct(ascii)) || check_whitespace(ascii)) {
+ confirm_suggestion(st->text, 0);
+ if (st->showsyntax) txt_format_line(st, st->text->curl, 1);
+ } else if ((st->overwrite && txt_replace_char(st->text, ascii)) || txt_add_char(st->text, ascii)) {
+ get_suggest_prefix(st->text, 0);
+ pop_suggest_list();
+ swallow= 1;
+ draw= 1;
+ }
+ }
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
+
+ } else if (val==1 && evnt) {
+ switch (evnt) {
+ case LEFTMOUSE:
+ if (do_suggest_select(st))
+ swallow= 1;
+ else {
+ if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ }
+ draw= 1;
+ break;
+ case MIDDLEMOUSE:
+ if (do_suggest_select(st)) {
+ confirm_suggestion(st->text, 0);
+ if (st->showsyntax) txt_format_line(st, st->text->curl, 1);
+ swallow= 1;
+ } else {
+ if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ }
+ draw= 1;
+ break;
+ case ESCKEY:
+ draw= swallow= 1;
+ if (tools & TOOL_SUGG_LIST) texttool_suggest_clear();
+ else if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ else draw= swallow= 0;
+ break;
+ case RETKEY:
+ if (tools & TOOL_SUGG_LIST) {
+ confirm_suggestion(st->text, 0);
+ if (st->showsyntax) txt_format_line(st, st->text->curl, 1);
+ swallow= 1;
+ draw= 1;
+ }
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
+ break;
+ case LEFTARROWKEY:
+ case BACKSPACEKEY:
+ if (tools & TOOL_SUGG_LIST) {
+ if (G.qual)
+ texttool_suggest_clear();
+ else {
+ /* Work out which char we are about to delete/pass */
+ if (st->text->curl && st->text->curc > 0) {
+ char ch= st->text->curl->line[st->text->curc-1];
+ if ((ch=='_' || !ispunct(ch)) && !check_whitespace(ch)) {
+ get_suggest_prefix(st->text, -1);
+ pop_suggest_list();
+ }
+ else
+ texttool_suggest_clear();
+ } else
+ texttool_suggest_clear();
+ }
+ }
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ break;
+ case RIGHTARROWKEY:
+ if (tools & TOOL_SUGG_LIST) {
+ if (G.qual)
+ texttool_suggest_clear();
+ else {
+ /* Work out which char we are about to pass */
+ if (st->text->curl && st->text->curc < st->text->curl->len) {
+ char ch= st->text->curl->line[st->text->curc+1];
+ if ((ch=='_' || !ispunct(ch)) && !check_whitespace(ch)) {
+ get_suggest_prefix(st->text, 1);
+ pop_suggest_list();
+ }
+ else
+ texttool_suggest_clear();
+ } else
+ texttool_suggest_clear();
+ }
+ }
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0;
+ break;
+ case PAGEDOWNKEY:
+ scroll= SUGG_LIST_SIZE-1;
+ case WHEELDOWNMOUSE:
+ case DOWNARROWKEY:
+ if (tools & TOOL_DOCUMENT) {
+ doc_scroll++;
+ swallow= 1;
+ draw= 1;
+ break;
+ } else if (tools & TOOL_SUGG_LIST) {
+ SuggItem *sel = texttool_suggest_selected();
+ if (!sel) {
+ texttool_suggest_select(texttool_suggest_first());
+ } else while (sel && sel!=texttool_suggest_last() && sel->next && scroll--) {
+ texttool_suggest_select(sel->next);
+ sel= sel->next;
+ }
+ pop_suggest_list();
+ swallow= 1;
+ draw= 1;
+ break;
+ }
+ case PAGEUPKEY:
+ scroll= SUGG_LIST_SIZE-1;
+ case WHEELUPMOUSE:
+ case UPARROWKEY:
+ if (tools & TOOL_DOCUMENT) {
+ if (doc_scroll>0) doc_scroll--;
+ swallow= 1;
+ draw= 1;
+ break;
+ } else if (tools & TOOL_SUGG_LIST) {
+ SuggItem *sel = texttool_suggest_selected();
+ while (sel && sel!=texttool_suggest_first() && sel->prev && scroll--) {
+ texttool_suggest_select(sel->prev);
+ sel= sel->prev;
+ }
+ pop_suggest_list();
+ swallow= 1;
+ draw= 1;
+ break;
+ }
+ case RIGHTSHIFTKEY:
+ case LEFTSHIFTKEY:
+ break;
+ default:
+ if (tools & TOOL_SUGG_LIST) texttool_suggest_clear(), draw= 1;
+ if (tools & TOOL_DOCUMENT) texttool_docs_clear(), doc_scroll= 0, draw= 1;
+ }
+ }
+
+ if (draw) {
+ ScrArea *sa;
+
+ for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ SpaceText *st= sa->spacedata.first;
+
+ if (st && st->spacetype==SPACE_TEXT) {
+ scrarea_queue_redraw(sa);
+ }
+ }
+ }
+
+ return swallow;
+}
+
+static short do_markers(SpaceText *st, char ascii, unsigned short evnt, short val) {
+ Text *text;
+ TextMarker *marker, *mrk, *nxt;
+ int c, s, draw=0, swallow=0;
+
+ text= st->text;
+ if (!text || text->id.lib || text->curl != text->sell) return 0;
+
+ marker= txt_find_marker(text, text->sell, text->selc, 0, 0);
+ if (marker && (marker->start > text->curc || marker->end < text->curc))
+ marker= NULL;
+
+ if (!marker) {
+ /* Find the next temporary marker */
+ if (evnt==TABKEY) {
+ int lineno= txt_get_span(text->lines.first, text->curl);
+ TextMarker *mrk= text->markers.first;
+ while (mrk) {
+ if (!marker && (mrk->flags & TMARK_TEMP)) marker= mrk;
+ if ((mrk->flags & TMARK_TEMP) && (mrk->lineno > lineno || (mrk->lineno==lineno && mrk->end > text->curc))) {
+ marker= mrk;
+ break;
+ }
+ mrk= mrk->next;
+ }
+ if (marker) {
+ txt_move_to(text, marker->lineno, marker->start, 0);
+ txt_move_to(text, marker->lineno, marker->end, 1);
+ pop_space_text(st);
+ evnt= ascii= val= 0;
+ draw= 1;
+ swallow= 1;
+ }
+ } else if (evnt==ESCKEY) {
+ if (txt_clear_markers(text, 0, TMARK_TEMP)) swallow= 1;
+ else if (txt_clear_markers(text, 0, 0)) swallow= 1;
+ else return 0;
+ evnt= ascii= val= 0;
+ draw= 1;
+ }
+ if (!swallow) return 0;
+ }
+
+ if (ascii) {
+ if (marker->flags & TMARK_EDITALL) {
+ c= text->curc-marker->start;
+ s= text->selc-marker->start;
+ if (s<0 || s>marker->end-marker->start) return 0;
+
+ mrk= txt_next_marker(text, marker);
+ while (mrk) {
+ nxt=txt_next_marker(text, mrk); /* mrk may become invalid */
+ txt_move_to(text, mrk->lineno, mrk->start+c, 0);
+ if (s!=c) txt_move_to(text, mrk->lineno, mrk->start+s, 1);
+ if (st->overwrite) {
+ if (txt_replace_char(text, ascii))
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ } else {
+ if (txt_add_char(text, ascii)) {
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ }
+ }
+
+ if (mrk==marker || mrk==nxt) break;
+ mrk=nxt;
+ }
+ swallow= 1;
+ draw= 1;
+ }
+ } else if (val) {
+ switch(evnt) {
+ case BACKSPACEKEY:
+ if (marker->flags & TMARK_EDITALL) {
+ c= text->curc-marker->start;
+ s= text->selc-marker->start;
+ if (s<0 || s>marker->end-marker->start) return 0;
+
+ mrk= txt_next_marker(text, marker);
+ while (mrk) {
+ nxt= txt_next_marker(text, mrk); /* mrk may become invalid */
+ txt_move_to(text, mrk->lineno, mrk->start+c, 0);
+ if (s!=c) txt_move_to(text, mrk->lineno, mrk->start+s, 1);
+ txt_backspace_char(text);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ if (mrk==marker || mrk==nxt) break;
+ mrk= nxt;
+ }
+ swallow= 1;
+ draw= 1;
+ }
+ break;
+ case DELKEY:
+ if (marker->flags & TMARK_EDITALL) {
+ c= text->curc-marker->start;
+ s= text->selc-marker->start;
+ if (s<0 || s>marker->end-marker->start) return 0;
+
+ mrk= txt_next_marker(text, marker);
+ while (mrk) {
+ nxt= txt_next_marker(text, mrk); /* mrk may become invalid */
+ txt_move_to(text, mrk->lineno, mrk->start+c, 0);
+ if (s!=c) txt_move_to(text, mrk->lineno, mrk->start+s, 1);
+ txt_delete_char(text);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ if (mrk==marker || mrk==nxt) break;
+ mrk= nxt;
+ }
+ swallow= 1;
+ draw= 1;
+ }
+ break;
+ case TABKEY:
+ if (G.qual & LR_SHIFTKEY) {
+ nxt= marker->prev;
+ if (!nxt) nxt= text->markers.last;
+ } else {
+ nxt= marker->next;
+ if (!nxt) nxt= text->markers.first;
+ }
+ if (marker->flags & TMARK_TEMP) {
+ if (nxt==marker) nxt= NULL;
+ BLI_freelinkN(&text->markers, marker);
+ }
+ mrk= nxt;
+ if (mrk) {
+ txt_move_to(text, mrk->lineno, mrk->start, 0);
+ txt_move_to(text, mrk->lineno, mrk->end, 1);
+ pop_space_text(st);
+ }
+ swallow= 1;
+ draw= 1;
+ break;
+
+ /* Events that should clear markers */
+ case UKEY: if (!(G.qual & LR_ALTKEY)) break;
+ case ZKEY: if (evnt==ZKEY && !(G.qual & LR_CTRLKEY)) break;
+ case RETKEY:
+ case ESCKEY:
+ if (marker->flags & (TMARK_EDITALL | TMARK_TEMP))
+ txt_clear_markers(text, marker->group, 0);
+ else
+ BLI_freelinkN(&text->markers, marker);
+ swallow= 1;
+ draw= 1;
+ break;
+ case RIGHTMOUSE: /* Marker context menu? */
+ case LEFTMOUSE:
+ break;
+ case FKEY: /* Allow find */
+ if (G.qual & LR_SHIFTKEY) swallow= 1;
+ break;
+
+ default:
+ if (G.qual!=0 && G.qual!=LR_SHIFTKEY)
+ swallow= 1; /* Swallow all other shortcut events */
+ }
+ }
+
+ if (draw) {
+ ScrArea *sa;
+
+ for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ SpaceText *st= sa->spacedata.first;
+
+ if (st && st->spacetype==SPACE_TEXT) {
+ scrarea_queue_redraw(sa);
+ }
+ }
+ }
+ return swallow;
+}
+
+static short do_modification_check(SpaceText *st) {
+ Text *text= st->text;
+
+ if (last_check_time < PIL_check_seconds_timer() - 2.0) {
+ switch (txt_file_modified(text)) {
+ case 1:
+ /* Modified locally and externally, ahhh. Offer more possibilites. */
+ if (text->flags & TXT_ISDIRTY) {
+ switch (pupmenu("File Modified Outside and Inside Blender %t|Load outside changes (ignore local changes) %x0|Save local changes (ignore outside changes) %x1|Make text internal (separate copy) %x2")) {
+ case 0:
+ reopen_text(text);
+ if (st->showsyntax) txt_format_text(st);
+ return 1;
+ case 1:
+ txt_write_file(text);
+ return 1;
+ case 2:
+ text->flags |= TXT_ISMEM | TXT_ISDIRTY | TXT_ISTMP;
+ MEM_freeN(text->name);
+ text->name= NULL;
+ return 1;
+ }
+ } else {
+ switch (pupmenu("File Modified Outside Blender %t|Reload from disk %x0|Make text internal (separate copy) %x1|Ignore %x2")) {
+ case 0:
+ reopen_text(text);
+ if (st->showsyntax) txt_format_text(st);
+ return 1;
+ case 1:
+ text->flags |= TXT_ISMEM | TXT_ISDIRTY | TXT_ISTMP;
+ MEM_freeN(text->name);
+ text->name= NULL;
+ return 1;
+ case 2:
+ txt_ignore_modified(text);
+ return 1;
+ }
+ }
+ break;
+ case 2:
+ switch (pupmenu("File Deleted Outside Blender %t|Make text internal %x0|Recreate file %x1")) {
+ case 0:
+ text->flags |= TXT_ISMEM | TXT_ISDIRTY | TXT_ISTMP;
+ MEM_freeN(text->name);
+ text->name= NULL;
+ return 1;
+ case 1:
+ txt_write_file(text);
+ return 1;
+ }
+ break;
+ default:
+ break;
+ }
+ last_check_time = PIL_check_seconds_timer();
+ }
+ return 0;
+}
+
void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
{
unsigned short event= evt->event;
@@ -1528,8 +2770,16 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
return;
}
+
+ if (val && uiDoBlocks(&curarea->uiblocks, event, 1)!=UI_NOTHING) event= 0;
+
+ if (st->doplugins && do_texttools(st, ascii, event, val)) return;
+ if (do_markers(st, ascii, event, val)) return;
- if (event==LEFTMOUSE) {
+ if (event==UI_BUT_EVENT) {
+ do_find_buttons(val);
+ do_draw= 1;
+ } else if (event==LEFTMOUSE) {
if (val) {
short mval[2];
char *buffer;
@@ -1550,20 +2800,20 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
} else if (event==MIDDLEMOUSE) {
if (val) {
- if (U.uiflag & USER_MMB_PASTE)
- {
+ if (U.uiflag & USER_MMB_PASTE) {
do_selection(st, G.qual&LR_SHIFTKEY);
get_selection_buffer(text);
do_draw= 1;
- }
- else
- {
+ } else {
do_textscroll(st, 1);
}
}
} else if (event==RIGHTMOUSE) {
if (val) {
- p= pupmenu("File %t|New %x0|Open... %x1|Save %x2|Save As...%x3|Execute Script%x4");
+ if (txt_has_sel(text))
+ p= pupmenu("Text %t|Cut%x10|Copy%x11|Paste%x12|New %x0|Open... %x1|Save %x2|Save As...%x3|Execute Script%x4");
+ else
+ p= pupmenu("Text %t|Paste%x12|New %x0|Open... %x1|Save %x2|Save As...%x3|Execute Script%x4");
switch(p) {
case 0:
@@ -1589,13 +2839,48 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
run_python_script(st);
do_draw= 1;
break;
- default:
+ case 10:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
+ txt_copy_clipboard(text);
+ txt_cut_sel(text);
+ pop_space_text(st);
+ do_draw= 1;
+ break;
+ case 11:
+ //txt_copy_sel(text);
+ txt_copy_clipboard(text);
+ break;
+ case 12:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
+ txt_paste_clipboard(text);
+ if (st->showsyntax) txt_format_text(st);
+ do_draw= 1;
break;
}
}
} else if (ascii) {
- if (txt_add_char(text, ascii)) {
- if (st->showsyntax) get_format_string(st);
+ if (text && text->id.lib) {
+ error_libdata();
+ } else {
+ short mval[2];
+ getmouseco_areawin(mval);
+ if (st->showlinenrs && mval[0]>2 && mval[0]<60 && mval[1]>2 && mval[1]<curarea->winy-2) {
+ if (ascii>='0' && ascii<='9') {
+ double time = PIL_check_seconds_timer();
+ if (last_jump < time-1) jump_to= 0;
+ jump_to *= 10; jump_to += (int)(ascii-'0');
+ txt_move_toline(text, jump_to-1, 0);
+ last_jump= time;
+ }
+ } else if ((st->overwrite && txt_replace_char(text, ascii)) || txt_add_char(text, ascii)) {
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
+ }
pop_space_text(st);
do_draw= 1;
}
@@ -1622,16 +2907,20 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
break; /* BREAK C */
case DKEY:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if (G.qual == (LR_CTRLKEY|LR_SHIFTKEY)) {
//uncommenting
txt_order_cursors(text);
uncomment(text);
do_draw = 1;
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
break;
} else if (G.qual == LR_CTRLKEY) {
txt_delete_char(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
do_draw= 1;
pop_space_text(st);
}
@@ -1640,6 +2929,10 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if (G.qual == (LR_ALTKEY|LR_SHIFTKEY)) {
switch(pupmenu("Edit %t|Cut %x0|Copy %x1|Paste %x2|Print Cut Buffer %x3")) {
case 0:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
txt_copy_clipboard(text); //First copy to clipboard
txt_cut_sel(text);
do_draw= 1;
@@ -1650,9 +2943,13 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
do_draw= 1;
break;
case 2:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
//txt_paste(text);
txt_paste_clipboard(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
do_draw= 1;
break;
case 3:
@@ -1687,17 +2984,17 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
}
}
- else if (G.qual == LR_ALTKEY) {
- if (txt_has_sel(text)) {
- txt_find_panel(st,0);
- do_draw= 1;
- }
- }
- else if (G.qual == (LR_ALTKEY|LR_CTRLKEY)) { /* always search button */
- txt_find_panel(st,1);
+ else if (G.qual & (LR_ALTKEY|LR_CTRLKEY)) {
+ find_and_replace(st, 0);
do_draw= 1;
}
break; /* BREAK F */
+ case HKEY:
+ if (G.qual & (LR_ALTKEY|LR_CTRLKEY)) {
+ find_and_replace(st, 1);
+ do_draw= 1;
+ }
+ break; /* BREAK H */
case JKEY:
if (G.qual == LR_ALTKEY) {
do_draw= jumptoline_interactive(st);
@@ -1706,7 +3003,7 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
case MKEY:
if (G.qual == LR_ALTKEY) {
txt_export_to_object(text);
- do_draw= 1;
+ do_draw= 1;
}
break; /* BREAK M */
case NKEY:
@@ -1716,7 +3013,6 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
-
}
break; /* BREAK N */
case OKEY:
@@ -1740,7 +3036,7 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if (okee("Reopen text")) {
if (!reopen_text(text))
error("Could not reopen file");
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
}
do_draw= 1;
}
@@ -1780,11 +3076,13 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
//txt_print_undo(text); //debug buffer in console
if (G.qual == (LR_ALTKEY|LR_SHIFTKEY)) {
txt_do_redo(text);
+ pop_space_text(st);
do_draw= 1;
}
if (G.qual == LR_ALTKEY) {
txt_do_undo(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
+ pop_space_text(st);
do_draw= 1;
}
break; /* BREAK U */
@@ -1813,20 +3111,28 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
/* Support for both Alt-V and Ctrl-V for Paste, for backward compatibility reasons */
else if (G.qual & LR_ALTKEY || G.qual & LR_CTRLKEY) {
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
/* Throwing in the Shift modifier Paste from the OS clipboard */
if (G.qual & LR_SHIFTKEY)
txt_paste_clipboard(text);
else
txt_paste_clipboard(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
do_draw= 1;
pop_space_text(st);
}
break; /* BREAK V */
case XKEY:
if (G.qual == LR_ALTKEY || G.qual == LR_CTRLKEY) {
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
txt_cut_sel(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
do_draw= 1;
pop_space_text(st);
}
@@ -1838,31 +3144,40 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
} else {
txt_do_undo(text);
}
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
+ pop_space_text(st);
do_draw= 1;
}
break;
case TABKEY:
- if (G.qual & LR_SHIFTKEY) {
- if (txt_has_sel(text)) {
- txt_order_cursors(text);
- unindent(text);
-
- }
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
} else {
- if ( txt_has_sel(text)) {
- txt_order_cursors(text);
- indent(text);
+ if (txt_has_sel(text)) {
+ if (G.qual & LR_SHIFTKEY) {
+ txt_order_cursors(text);
+ unindent(text);
+ if (st->showsyntax) txt_format_text(st);
+ } else {
+ txt_order_cursors(text);
+ indent(text);
+ if (st->showsyntax) txt_format_text(st);
+ }
} else {
txt_add_char(text, '\t');
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
}
}
- if (st->showsyntax) get_format_string(st);
pop_space_text(st);
do_draw= 1;
st->currtab_set = setcurr_tab(text);
break;
case RETKEY:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
//double check tabs before splitting the line
st->currtab_set = setcurr_tab(text);
txt_split_curline(text);
@@ -1876,33 +3191,52 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
}
}
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) {
+ if (text->curl->prev) txt_format_line(st, text->curl->prev, 0);
+ txt_format_line(st, text->curl, 1);
+ }
do_draw= 1;
pop_space_text(st);
break;
case BACKSPACEKEY:
- txt_backspace_char(text);
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
+ if (G.qual & (LR_ALTKEY | LR_CTRLKEY)) {
+ txt_backspace_word(text);
+ } else {
+ txt_backspace_char(text);
+ }
set_tabs(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
do_draw= 1;
pop_space_text(st);
break;
case DELKEY:
- txt_delete_char(text);
- if (st->showsyntax) get_format_string(st);
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
+ if (G.qual & (LR_ALTKEY | LR_CTRLKEY)) {
+ txt_delete_word(text);
+ } else {
+ txt_delete_char(text);
+ }
+ if (st->showsyntax) txt_format_line(st, text->curl, 1);
do_draw= 1;
pop_space_text(st);
st->currtab_set = setcurr_tab(text);
break;
- case DOWNARROWKEY:
- txt_move_down(text, G.qual & LR_SHIFTKEY);
- set_tabs(text);
+ case INSERTKEY:
+ st->overwrite= !st->overwrite;
do_draw= 1;
- pop_space_text(st);
break;
case LEFTARROWKEY:
if (G.qual & LR_COMMANDKEY)
txt_move_bol(text, G.qual & LR_SHIFTKEY);
+ else if (G.qual & LR_ALTKEY)
+ txt_jump_left(text, G.qual & LR_SHIFTKEY);
else
txt_move_left(text, G.qual & LR_SHIFTKEY);
set_tabs(text);
@@ -1912,6 +3246,8 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
case RIGHTARROWKEY:
if (G.qual & LR_COMMANDKEY)
txt_move_eol(text, G.qual & LR_SHIFTKEY);
+ else if (G.qual & LR_ALTKEY)
+ txt_jump_right(text, G.qual & LR_SHIFTKEY);
else
txt_move_right(text, G.qual & LR_SHIFTKEY);
set_tabs(text);
@@ -1919,26 +3255,38 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
pop_space_text(st);
break;
case UPARROWKEY:
- txt_move_up(text, G.qual & LR_SHIFTKEY);
+ if (st->wordwrap) wrap_move_up(st, G.qual & LR_SHIFTKEY);
+ else txt_move_up(text, G.qual & LR_SHIFTKEY);
+ set_tabs(text);
+ do_draw= 1;
+ pop_space_text(st);
+ break;
+ case DOWNARROWKEY:
+ if (st->wordwrap) wrap_move_down(st, G.qual & LR_SHIFTKEY);
+ else txt_move_down(text, G.qual & LR_SHIFTKEY);
set_tabs(text);
do_draw= 1;
pop_space_text(st);
break;
case PAGEDOWNKEY:
- screen_skip(st, st->viewlines);
+ cursor_skip(st, st->viewlines, G.qual & LR_SHIFTKEY);
+ pop_space_text(st);
do_draw= 1;
break;
case PAGEUPKEY:
- screen_skip(st, -st->viewlines);
+ cursor_skip(st, -st->viewlines, G.qual & LR_SHIFTKEY);
+ pop_space_text(st);
do_draw= 1;
break;
case HOMEKEY:
- txt_move_bol(text, G.qual & LR_SHIFTKEY);
+ if (st->wordwrap) wrap_move_bol(st, G.qual & LR_SHIFTKEY);
+ else txt_move_bol(text, G.qual & LR_SHIFTKEY);
do_draw= 1;
pop_space_text(st);
break;
case ENDKEY:
- txt_move_eol(text, G.qual & LR_SHIFTKEY);
+ if (st->wordwrap) wrap_move_eol(st, G.qual & LR_SHIFTKEY);
+ else txt_move_eol(text, G.qual & LR_SHIFTKEY);
do_draw= 1;
pop_space_text(st);
break;
@@ -1953,6 +3301,15 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
}
+ /* Run text plugin scripts if enabled */
+ if (st->doplugins && event && val) {
+ if (BPY_menu_do_shortcut(PYMENU_TEXTPLUGIN, event, G.qual)) {
+ do_draw= 1;
+ }
+ }
+
+ if (do_modification_check(st)) do_draw= 1;
+
if (do_draw) {
ScrArea *sa;
@@ -1966,179 +3323,150 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
}
-void do_brackets(void)
+void draw_brackets(SpaceText *st)
{
- SpaceText *st = curarea->spacedata.first;
+ char ch;
+ int b, c, startc, endc, find, stack;
+ int viewc, viewl, offl, offc, x, y;
+ TextLine *startl, *endl, *linep;
Text *text = st->text;
- TextLine *tmp, *start;
- char test[2];
- int d, pos, open, x, y, x2, y2, h=0;
-
- if(!text) return;
-
- tmp = text->curl;
- start = text->curl;
-
- test[0] = (unsigned char) tmp->line[text->curc];
- test[1] = '\0';
-
- d = check_bracket(test);
- if (!d) /* If not pri char */
- {
- test[0] = (unsigned char) tmp->line[text->curc-1];
- test[1] = '\0';
- d = check_bracket(test);
- if(!d) {
- return; /*If the current char or prev is not a bracket then return*/
- } else { /* current char */
- h= txt_get_span(text->lines.first, start) - st->top;
- x = text_draw(st, start->line, st->left, text->curc-1, 0, 0, 0, NULL);
- y = text_draw(st, start->line, st->left, text->curc, 0, 0, 0, NULL);
- if (d < 4) {
- pos = text->curc;
- } else {
- pos = text->curc-2;
- }
- }
- } else { /* is pri char */
- h= txt_get_span(text->lines.first, start) - st->top;
- x = text_draw(st, start->line, st->left, text->curc, 0, 0, 0, NULL);
- y = text_draw(st, start->line, st->left, text->curc+1, 0, 0, 0, NULL);
- if (d < 4) {
- pos = text->curc+1;
- } else {
- pos = text->curc-1;
- }
- }
-
- if (d < 4) /*reading forward*/
- {
- open = 1;
- while ( tmp ) {
- while (pos <= tmp->len) {
- test[0] = (unsigned char) tmp->line[pos];
- test[1] = '\0';
- if(check_bracket(test) == d) {
- open++;
- } else if (check_bracket(test) == d+3) {
- open--;
- if (open == 0) {
- BIF_ThemeColorBlend(TH_BACK, TH_SHADE2, 0.5);
- glRecti(x, curarea->winy-st->lheight*(h)-2, y, curarea->winy-st->lheight*(h+1)-2);
-
- h= txt_get_span(text->lines.first, tmp) - st->top;
- x2= text_draw(st, tmp->line, st->left, pos, 0, 0, 0, NULL);
- y2= text_draw(st, tmp->line, st->left, pos+1, 0, 0, 0, NULL);
- glRecti(x2, curarea->winy-st->lheight*(h)-2, y2, curarea->winy-st->lheight*(h+1)-2);
- BIF_ThemeColor(TH_TEXT);
- return;
+
+ if (!text || !text->curl) return;
+
+ startl= text->curl;
+ startc= text->curc;
+ b= check_bracket(startl->line[startc]);
+ if (b==0 && startc>0) b = check_bracket(startl->line[--startc]);
+ if (b==0) return;
+
+ linep= startl;
+ c= startc;
+ endl= NULL;
+ endc= -1;
+ find= -b;
+ stack= 0;
+
+ /* Opening bracket, search forward for close */
+ if (b>0) {
+ c++;
+ while (linep) {
+ while (c<linep->len) {
+ b= check_bracket(linep->line[c]);
+ if (b==find) {
+ if (stack==0) {
+ endl= linep;
+ endc= c;
+ break;
}
+ stack--;
+ } else if (b==-find) {
+ stack++;
}
- pos++;
+ c++;
}
- tmp = tmp->next;
- pos = 0;
+ if (endl) break;
+ linep= linep->next;
+ c= 0;
}
- } else { /* reading back */
- open = 1;
- while ( tmp ) {
- while (pos >= 0) {
- test[0] = (unsigned char) tmp->line[pos];
- test[1] = '\0';
- if(check_bracket(test) == d) {
- open++;
- } else if (check_bracket(test) == d-3) {
- open--;
- if (open == 0) {
- BIF_ThemeColorBlend(TH_BACK, TH_SHADE2, 0.5);
- glRecti(x, curarea->winy-st->lheight*(h)-2, y, curarea->winy-st->lheight*(h+1)-2);
-
- h= txt_get_span(text->lines.first, tmp) - st->top;
- x2= text_draw(st, tmp->line, st->left, pos, 0, 0, 0, NULL);
- y2= text_draw(st, tmp->line, st->left, pos+1, 0, 0, 0, NULL);
- glRecti(x2, curarea->winy-st->lheight*(h)-2, y2, curarea->winy-st->lheight*(h+1)-2);
- BIF_ThemeColor(TH_TEXT);
- return;
+ }
+ /* Closing bracket, search backward for open */
+ else {
+ c--;
+ while (linep) {
+ while (c>=0) {
+ b= check_bracket(linep->line[c]);
+ if (b==find) {
+ if (stack==0) {
+ endl= linep;
+ endc= c;
+ break;
}
+ stack--;
+ } else if (b==-find) {
+ stack++;
}
- pos--;
- }
- tmp = tmp->prev;
- if (tmp) {
- pos = tmp->len;
+ c--;
}
+ if (endl) break;
+ linep= linep->prev;
+ if (linep) c= linep->len-1;
}
}
-
+
+ if (!endl || endc==-1) return;
+
+ BIF_ThemeColor(TH_HILITE);
+ x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ y= curarea->winy - st->lheight;
+
+ ch= startl->line[startc];
+ wrap_offset(st, startl, startc, &offl, &offc);
+ viewc= get_char_pos(st, startl->line, startc) - st->left + offc;
+ if (viewc >= 0){
+ viewl= txt_get_span(text->lines.first, startl) - st->top + offl;
+ glRasterPos2i(x+viewc*spacetext_get_fontwidth(st), y-viewl*st->lheight);
+ BMF_DrawCharacter(spacetext_get_font(st), ch);
+ glRasterPos2i(x+viewc*spacetext_get_fontwidth(st)+1, y-viewl*st->lheight);
+ BMF_DrawCharacter(spacetext_get_font(st), ch);
+ }
+ ch= endl->line[endc];
+ wrap_offset(st, endl, endc, &offl, &offc);
+ viewc= get_char_pos(st, endl->line, endc) - st->left + offc;
+ if (viewc >= 0) {
+ viewl= txt_get_span(text->lines.first, endl) - st->top + offl;
+ glRasterPos2i(x+viewc*spacetext_get_fontwidth(st), y-viewl*st->lheight);
+ BMF_DrawCharacter(spacetext_get_font(st), ch);
+ glRasterPos2i(x+viewc*spacetext_get_fontwidth(st)+1, y-viewl*st->lheight);
+ BMF_DrawCharacter(spacetext_get_font(st), ch);
+ }
}
-int check_bracket(char *string)
+static int check_bracket(char ch)
{
- int number, a = 0;
- char other[][3] = {"(", "[", "{", ")", "]", "}"};
-
- number = 6;
+ int a;
+ char opens[] = "([{";
+ char close[] = ")]}";
- while(a < number) {
- if(strcmp(other[a], string) == 0)
- {
+ for (a=0; a<3; a++) {
+ if(ch==opens[a])
return a+1;
- }
- a++;
+ else if (ch==close[a])
+ return -(a+1);
}
return 0;
}
-static int check_builtinfuncs(char *string)
+static int check_delim(char ch)
{
- int number = 30, a = 0;
+ int a;
+ char delims[] = "():\"\' ~!%^&*-+=[]{};/<>|.#\t,";
- char builtinfuncs[][11] = {"and", "as", "assert", "break", "class", "continue", "def",
- "del", "elif", "else", "except", "exec", "finally",
- "for", "from", "global", "if", "import", "in",
- "is", "lambda", "not", "or", "pass", "print",
- "raise", "return", "try", "while", "yield"};
-
- for( a = 0; a < number; a++) {
- if(!strcmp(builtinfuncs[a], string))
+ for (a=0; a<28; a++) {
+ if (ch==delims[a])
return 1;
}
return 0;
}
-static int check_specialvars(char *string)
-{
- int number = 2, a = 0;
- char specialvars[][7] = {"def", "class"};
-
- for( a = 0; a < number; a++) {
- if(!strcmp(specialvars[a], string))
- return a+1;
- }
+static int check_digit(char ch) {
+ if (ch < '0') return 0;
+ if (ch <= '9') return 1;
return 0;
}
-static int check_delim(char *string)
-{
- int number = 28, a = 0;
- char other[][3] = {"(", ")", ":", "\"", "\'", " ", "~", "!", "%", "^", "&", "*", "-", "+", "=", "[", "]", "{", "}", ";", "/", "<", ">", "|", ".", "#", "\t", ","};
-
- for( a = 0; a < number; a++) {
- if(!strcmp(other[a], string))
- return 1;
- }
+static int check_identifier(char ch) {
+ if (ch < '0') return 0;
+ if (ch <= '9') return 1;
+ if (ch < 'A') return 0;
+ if (ch <= 'Z' || ch == '_') return 1;
+ if (ch < 'a') return 0;
+ if (ch <= 'z') return 1;
return 0;
}
-static int check_numbers(char *string)
-{
- int number = 10, a = 0;
- char other[][2] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
-
- for( a = 0; a < number; a++) {
- if(!strcmp(other[a], string))
- return 1;
- }
+static int check_whitespace(char ch) {
+ if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
+ return 1;
return 0;
}
@@ -2146,7 +3474,7 @@ void convert_tabs (struct SpaceText *st, int tab)
{
Text *text = st->text;
TextLine *tmp;
- char *check_line, *new_line, *format;
+ char *check_line, *new_line;
int extra, number; //unknown for now
size_t a, j;
@@ -2158,7 +3486,6 @@ void convert_tabs (struct SpaceText *st, int tab)
while(tmp) {
check_line = tmp->line;
new_line = MEM_mallocN(render_string(st, check_line)+1, "Converted_Line");
- format = MEM_mallocN(render_string(st, check_line)+1, "Converted_Syntax_format");
j = 0;
for (a=0; a < strlen(check_line); a++) { //foreach char in line
if(check_line[a] == '\t') { //checking for tabs
@@ -2185,7 +3512,7 @@ void convert_tabs (struct SpaceText *st, int tab)
tmp->line = new_line;
tmp->len = strlen(new_line);
- tmp->format = format;
+ tmp->format = NULL;
tmp = tmp->next;
}
@@ -2213,7 +3540,6 @@ void convert_tabs (struct SpaceText *st, int tab)
if ( extra > 0 ) { //got tabs make malloc and do what you have to do
new_line = MEM_mallocN(strlen(check_line)-(((st->tabnumber*extra)-extra)-1), "Converted_Line");
- format = MEM_mallocN(strlen(check_line)-(((st->tabnumber*extra)-extra)-1), "Converted_Syntax_format");
extra = 0; //reuse vars
for (a = 0; a < strlen(check_line); a++) {
number = 0;
@@ -2241,9 +3567,11 @@ void convert_tabs (struct SpaceText *st, int tab)
tmp->line = new_line;
tmp->len = strlen(new_line);
- tmp->format = format;
+ tmp->format = NULL;
}
tmp = tmp->next;
}
}
+
+ if (st->showsyntax) txt_format_text(st);
}
diff --git a/source/blender/src/header_text.c b/source/blender/src/header_text.c
index cf6d21ff264..e7552434b19 100644
--- a/source/blender/src/header_text.c
+++ b/source/blender/src/header_text.c
@@ -42,6 +42,7 @@
#include "BMF_Api.h"
#include "BIF_language.h"
+#include "MEM_guardedalloc.h"
#include "BSE_headerbuttons.h"
@@ -52,6 +53,7 @@
#include "DNA_constraint_types.h"
#include "DNA_action_types.h"
+#include "BIF_gl.h" /* for glRasterPos2i */
#include "BIF_drawtext.h"
#include "BIF_interface.h"
#include "BIF_resources.h"
@@ -128,7 +130,7 @@ void do_text_buttons(unsigned short event)
st->top= 0;
pop_space_text(st);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
}
@@ -194,14 +196,20 @@ void do_text_buttons(unsigned short event)
break;
case B_TAB_NUMBERS:
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
break;
case B_SYNTAX:
- if (st->showsyntax) {
- get_format_string(st);
- }
+ if (st->showsyntax) txt_format_text(st);
+ allqueue(REDRAWTEXT, 0);
+ allqueue(REDRAWHEADERS, 0);
+ break;
+ case B_TEXTPLUGINS:
+ allqueue(REDRAWHEADERS, 0);
+ break;
+ case B_WORDWRAP:
+ st->left= 0;
allqueue(REDRAWTEXT, 0);
allqueue(REDRAWHEADERS, 0);
break;
@@ -239,6 +247,37 @@ static uiBlock *text_template_scriptsmenu (void *args_unused)
return block;
}
+static void do_text_plugin_scriptsmenu(void *arg, int event)
+{
+ BPY_menu_do_python(PYMENU_TEXTPLUGIN, event);
+
+ allqueue(REDRAWIMAGE, 0);
+}
+
+static uiBlock *text_plugin_scriptsmenu (void *args_unused)
+{
+ uiBlock *block;
+ BPyMenu *pym;
+ int i= 0;
+ short yco = 20, menuwidth = 120;
+
+ block= uiNewBlock(&curarea->uiblocks, "text_plugin_scriptsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_text_plugin_scriptsmenu, NULL);
+
+ /* note that we acount for the N previous entries with i+20: */
+ for (pym = BPyMenuTable[PYMENU_TEXTPLUGIN]; pym; pym = pym->next, i++) {
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20, menuwidth, 19,
+ NULL, 0.0, 0.0, 1, i,
+ pym->tooltip?pym->tooltip:pym->filename);
+ }
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+
/* action executed after clicking in File menu */
static void do_text_filemenu(void *arg, int event)
{
@@ -268,7 +307,7 @@ static void do_text_filemenu(void *arg, int event)
if (!reopen_text(text)) {
error("Could not reopen file");
}
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
}
break;
case 5:
@@ -277,9 +316,14 @@ static void do_text_filemenu(void *arg, int event)
txt_write_file(text);
break;
case 6:
- run_python_script(st);
+ text->flags |= TXT_ISMEM | TXT_ISDIRTY | TXT_ISTMP;
+ MEM_freeN(text->name);
+ text->name= NULL;
break;
case 7:
+ run_python_script(st);
+ break;
+ case 8:
{
Object *ob;
bConstraint *con;
@@ -340,11 +384,17 @@ static void do_text_editmenu(void *arg, int event)
switch(event) {
case 1:
txt_do_undo(text);
+ pop_space_text(st);
break;
case 2:
txt_do_redo(text);
+ pop_space_text(st);
break;
case 3:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
txt_copy_clipboard(text);
txt_cut_sel(text);
pop_space_text(st);
@@ -354,8 +404,12 @@ static void do_text_editmenu(void *arg, int event)
txt_copy_clipboard(text);
break;
case 5:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
txt_paste_clipboard(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
break;
case 6:
txt_print_cutbuffer();
@@ -364,10 +418,11 @@ static void do_text_editmenu(void *arg, int event)
jumptoline_interactive(st);
break;
case 8:
- txt_find_panel(st,1);
- break;
case 9:
- txt_find_panel(st,0);
+ find_and_replace(st, 0);
+ break;
+ case 10:
+ find_and_replace(st, 1);
break;
default:
break;
@@ -443,6 +498,57 @@ static void do_text_editmenu_selectmenu(void *arg, int event)
}
}
+/* action executed after clicking in Markers menu */
+static void do_text_editmenu_markermenu(void *arg, int event)
+{
+ SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
+ Text *text;
+ TextMarker *mrk;
+ ScrArea *sa;
+ int lineno;
+
+ if (st==NULL || st->spacetype != SPACE_TEXT) return;
+
+ text = st->text;
+
+ switch(event) {
+ case 1:
+ txt_clear_markers(text, 0, 0);
+ break;
+ case 2:
+ lineno= txt_get_span(text->lines.first, text->curl);
+ mrk= text->markers.first;
+ while (mrk && (mrk->lineno<lineno || (mrk->lineno==lineno && mrk->start <= text->curc)))
+ mrk= mrk->next;
+ if (!mrk) mrk= text->markers.first;
+ if (mrk) {
+ txt_move_to(text, mrk->lineno, mrk->start, 0);
+ txt_move_to(text, mrk->lineno, mrk->end, 1);
+ }
+ break;
+ case 3:
+ lineno= txt_get_span(text->lines.first, text->curl);
+ mrk= text->markers.last;
+ while (mrk && (mrk->lineno>lineno || (mrk->lineno==lineno && mrk->end > text->curc)))
+ mrk= mrk->prev;
+ if (!mrk) mrk= text->markers.last;
+ if (mrk) {
+ txt_move_to(text, mrk->lineno, mrk->start, 0);
+ txt_move_to(text, mrk->lineno, mrk->end, 1);
+ }
+ break;
+ default:
+ break;
+ }
+
+ for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ SpaceText *st= sa->spacedata.first;
+ if (st && st->spacetype==SPACE_TEXT) {
+ scrarea_queue_redraw(sa);
+ }
+ }
+}
+
/* action executed after clicking in Format menu */
static void do_text_formatmenu(void *arg, int event)
{
@@ -456,6 +562,10 @@ static void do_text_formatmenu(void *arg, int event)
switch(event) {
case 3:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if (txt_has_sel(text)) {
txt_order_cursors(text);
indent(text);
@@ -466,6 +576,10 @@ static void do_text_formatmenu(void *arg, int event)
break;
}
case 4:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if ( txt_has_sel(text)) {
txt_order_cursors(text);
unindent(text);
@@ -473,18 +587,26 @@ static void do_text_formatmenu(void *arg, int event)
}
break;
case 5:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if ( txt_has_sel(text)) {
txt_order_cursors(text);
comment(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
break;
}
break;
case 6:
+ if (text && text->id.lib) {
+ error_libdata();
+ break;
+ }
if ( txt_has_sel(text)) {
txt_order_cursors(text);
uncomment(text);
- if (st->showsyntax) get_format_string(st);
+ if (st->showsyntax) txt_format_text(st);
break;
}
break;
@@ -536,6 +658,25 @@ static uiBlock *text_editmenu_selectmenu(void *arg_unused)
return block;
}
+/* Select menu */
+static uiBlock *text_editmenu_markermenu(void *arg_unused)
+{
+ uiBlock *block;
+ short yco = 20, menuwidth = 120;
+
+ block= uiNewBlock(&curarea->uiblocks, "text_editmenu_markermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_text_editmenu_markermenu, NULL);
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear All", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Next Marker", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Previous Marker", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+
void do_text_formatmenu_convert(void *arg, int event)
{
SpaceText *st= curarea->spacedata.first; /* bad but cant pass as an arg here */
@@ -649,10 +790,12 @@ static uiBlock *text_editmenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBlockBut(block, text_editmenu_viewmenu, NULL, ICON_RIGHTARROW_THIN, "View|Alt Shift V ", 0, yco-=20, 120, 19, "");
uiDefIconTextBlockBut(block, text_editmenu_selectmenu, NULL, ICON_RIGHTARROW_THIN, "Select|Alt Shift S ", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, text_editmenu_markermenu, NULL, ICON_RIGHTARROW_THIN, "Markers", 0, yco-=20, 120, 19, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Jump...|Alt J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find...|Alt Ctrl F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find Again|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find And Replace...|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Find Next|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Replace|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBlockBut(block, text_editmenu_to3dmenu, NULL, ICON_RIGHTARROW_THIN, "Text to 3d Object", 0, yco-=20, 120, 19, "");
@@ -690,17 +833,21 @@ static uiBlock *text_filemenu(void *arg_unused)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Save As...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
+ if (text->name)
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Internal", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
+
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Run Python Script|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Run Python Script|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
if (BPY_is_pyconstraint(text))
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Refresh All PyConstraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Refresh All PyConstraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
}
uiDefIconTextBlockBut(block, text_template_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Script Templates", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, text_plugin_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Text Plugins", 0, yco-=20, 120, 19, "");
if(curarea->headertype==HEADERTOP) {
uiBlockSetDirection(block, UI_DOWN);
@@ -715,13 +862,15 @@ static uiBlock *text_filemenu(void *arg_unused)
}
/* header */
+#define PATH_MAX 260
void text_buttons(void)
{
uiBlock *block;
SpaceText *st= curarea->spacedata.first;
Text *text;
short xco, xmax;
- char naam[256];
+ char naam[256], fname[PATH_MAX], headtxt[PATH_MAX+17];
+ int len;
if (st==NULL || st->spacetype != SPACE_TEXT) return;
@@ -779,8 +928,9 @@ void text_buttons(void)
else uiDefIconBut(block, BUT,B_FULL, ICON_FULLSCREEN, xco,0,XIC,YIC, 0, 0, 0, 0, 0, "Makes current window full screen (CTRL+Down arrow)");
uiDefIconButI(block, ICONTOG, B_TEXTLINENUM, ICON_LONGDISPLAY, xco+=XIC,0,XIC,YIC, &st->showlinenrs, 0, 0, 0, 0, "Displays line numbers");
-
- uiDefIconButI(block, ICONTOG, B_SYNTAX, ICON_SYNTAX, xco+=XIC,0,XIC,YIC, &st->showsyntax, 0, 0, 0, 0, "Enables Syntax Highlighting");
+ uiDefIconButI(block, ICONTOG, B_WORDWRAP, ICON_WORDWRAP, xco+=XIC,0,XIC,YIC, &st->wordwrap, 0, 0, 0, 0, "Enables word wrap");
+ uiDefIconButI(block, ICONTOG, B_SYNTAX, ICON_SYNTAX, xco+=XIC,0,XIC,YIC, &st->showsyntax, 0, 0, 0, 0, "Enables syntax highlighting");
+ uiDefIconButI(block, ICONTOG, B_TEXTPLUGINS, ICON_PYTHON, xco+=XIC,0,XIC,YIC, &st->doplugins, 0, 0, 0, 0, "Enables Python text plugins");
uiBlockEndAlign(block);
/* STD TEXT BUTTONS */
@@ -804,9 +954,30 @@ void text_buttons(void)
uiDefButI(block, MENU, B_TEXTFONT, "Screen 12 %x0|Screen 15%x1", xco,0,100,YIC, &st->font_id, 0, 0, 0, 0, "Displays available fonts");
xco+=110;
- uiDefButI(block, NUM, B_TAB_NUMBERS, "Tab:", xco, 0, XIC+50, YIC, &st->tabnumber, 2, 8, 0, 0, "Set spacing of Tab");
+ uiDefButI(block, NUM, B_TAB_NUMBERS, "Tab:", xco, 0, XIC+50, YIC, &st->tabnumber, 2, 8, 0, 0, "Set spacing of Tab");
xco+= XIC+50;
-
+
+ /* File info */
+ if (text) {
+ if (text->name) {
+ len = strlen(text->name);
+ if (len > PATH_MAX-1)
+ len = PATH_MAX-1;
+ strncpy(fname, text->name, len);
+ fname[len]='\0';
+ if (text->flags & TXT_ISDIRTY)
+ sprintf(headtxt, "File: *%s (unsaved)", fname);
+ else
+ sprintf(headtxt, "File: %s", fname);
+ } else {
+ sprintf(headtxt, text->id.lib?"Text: External":"Text: Internal");
+ }
+ BIF_ThemeColor(TH_MENU_TEXT);
+ glRasterPos2i(xco+=XIC, 5);
+ BMF_DrawString(G.font, headtxt);
+ xco += BMF_GetStringWidth(G.font, headtxt);
+ }
+
/* always as last */
curarea->headbutlen= xco+2*XIC;
diff --git a/source/blender/src/keyval.c b/source/blender/src/keyval.c
index dab4b4ae839..f59cce0da8f 100644
--- a/source/blender/src/keyval.c
+++ b/source/blender/src/keyval.c
@@ -27,6 +27,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include "stdio.h"
+#include "ctype.h"
+#include "string.h"
+
+#include "BKE_global.h"
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BIF_keyval.h"
@@ -349,3 +354,193 @@ char *key_event_to_string(unsigned short event)
return "";
}
+
+/*
+ * Decodes key combination strings [qual1+[qual2+[...]]]keyname
+ * The '+'s may be replaced by '-' or ' ' characters to support different
+ * formats. No additional whitespace is allowed. The keyname may be an internal
+ * name, like "RETKEY", or a more common name, like "Return". Decoding is case-
+ * insensitive.
+ *
+ * Example strings: "Ctrl+L", "ALT-ESC", "Shift A"
+ *
+ * Returns 1 if successful.
+ */
+int decode_key_string(char *str, unsigned short *key, unsigned short *qual)
+{
+ int i, prev, len, invalid=0;
+
+ len= strlen(str);
+ *key= *qual= 0;
+
+ /* Convert to upper case */
+ for (i=0; i<len; i++) {
+ str[i]= toupper(str[i]);
+ }
+
+ /* Handle modifiers */
+ for (prev=i=0; i<len; i++) {
+ if (str[i]==' ' || str[i]=='+' || str[i]=='-') {
+ if (!strncmp(str+prev, "CTRL", i-prev)) *qual |= LR_CTRLKEY;
+ else if (!strncmp(str+prev, "ALT", i-prev)) *qual |= LR_ALTKEY;
+ else if (!strncmp(str+prev, "SHIFT", i-prev)) *qual |= LR_SHIFTKEY;
+ else if (!strncmp(str+prev, "COMMAND", i-prev)) *qual |= LR_COMMANDKEY;
+ prev=i+1;
+ }
+ }
+
+ /* Compare last part against key names */
+ if (len-prev==1 || len-prev==4 && !strncmp(str+prev, "KEY", 3)) {
+
+ if (str[prev]>='A' && str[prev]<='Z') {
+ *key= str[prev]-'A'+AKEY;
+ } else if (str[prev]>='0' && str[prev]<='9') {
+ *key= str[prev]-'0'+ZEROKEY;
+ } else {
+ invalid= 1;
+ }
+
+ } else if (!strncmp(str+prev, "ZEROKEY", len-prev) || !strncmp(str+prev, "ZERO", len-prev)) {
+ *key= ZEROKEY;
+ } else if (!strncmp(str+prev, "ONEKEY", len-prev) || !strncmp(str+prev, "ONE", len-prev)) {
+ *key= ONEKEY;
+ } else if (!strncmp(str+prev, "TWOKEY", len-prev) || !strncmp(str+prev, "TWO", len-prev)) {
+ *key= TWOKEY;
+ } else if (!strncmp(str+prev, "THREEKEY", len-prev) || !strncmp(str+prev, "THREE", len-prev)) {
+ *key= THREEKEY;
+ } else if (!strncmp(str+prev, "FOURKEY", len-prev) || !strncmp(str+prev, "FOUR", len-prev)) {
+ *key= FOURKEY;
+ } else if (!strncmp(str+prev, "FIVEKEY", len-prev) || !strncmp(str+prev, "FIVE", len-prev)) {
+ *key= FIVEKEY;
+ } else if (!strncmp(str+prev, "SIZEKEY", len-prev) || !strncmp(str+prev, "SIX", len-prev)) {
+ *key= SIXKEY;
+ } else if (!strncmp(str+prev, "SEVENKEY", len-prev) || !strncmp(str+prev, "SEVEN", len-prev)) {
+ *key= SEVENKEY;
+ } else if (!strncmp(str+prev, "EIGHTKEY", len-prev) || !strncmp(str+prev, "EIGHT", len-prev)) {
+ *key= EIGHTKEY;
+ } else if (!strncmp(str+prev, "NINEKEY", len-prev) || !strncmp(str+prev, "NINE", len-prev)) {
+ *key= NINEKEY;
+
+ } else if (!strncmp(str+prev, "ESCKEY", len-prev) || !strncmp(str+prev, "ESC", len-prev)) {
+ *key= ESCKEY;
+ } else if (!strncmp(str+prev, "TABKEY", len-prev) || !strncmp(str+prev, "TAB", len-prev)) {
+ *key= TABKEY;
+ } else if (!strncmp(str+prev, "RETKEY", len-prev) || !strncmp(str+prev, "RETURN", len-prev) || !strncmp(str+prev, "ENTER", len-prev)) {
+ *key= RETKEY;
+ } else if (!strncmp(str+prev, "SPACEKEY", len-prev) || !strncmp(str+prev, "SPACE", len-prev)) {
+ *key= SPACEKEY;
+ } else if (!strncmp(str+prev, "LINEFEEDKEY", len-prev) || !strncmp(str+prev, "LINEFEED", len-prev)) {
+ *key= LINEFEEDKEY;
+ } else if (!strncmp(str+prev, "BACKSPACEKEY", len-prev) || !strncmp(str+prev, "BACKSPACE", len-prev)) {
+ *key= BACKSPACEKEY;
+ } else if (!strncmp(str+prev, "DELKEY", len-prev) || !strncmp(str+prev, "DELETE", len-prev)) {
+ *key= DELKEY;
+
+ } else if (!strncmp(str+prev, "SEMICOLONKEY", len-prev) || !strncmp(str+prev, "SEMICOLON", len-prev)) {
+ *key= SEMICOLONKEY;
+ } else if (!strncmp(str+prev, "PERIODKEY", len-prev) || !strncmp(str+prev, "PERIOD", len-prev)) {
+ *key= PERIODKEY;
+ } else if (!strncmp(str+prev, "COMMAKEY", len-prev) || !strncmp(str+prev, "COMMA", len-prev)) {
+ *key= COMMAKEY;
+ } else if (!strncmp(str+prev, "QUOTEKEY", len-prev) || !strncmp(str+prev, "QUOTE", len-prev)) {
+ *key= QUOTEKEY;
+ } else if (!strncmp(str+prev, "ACCENTGRAVEKEY", len-prev) || !strncmp(str+prev, "ACCENTGRAVE", len-prev)) {
+ *key= ACCENTGRAVEKEY;
+ } else if (!strncmp(str+prev, "MINUSKEY", len-prev) || !strncmp(str+prev, "MINUS", len-prev)) {
+ *key= MINUSKEY;
+ } else if (!strncmp(str+prev, "SLASHKEY", len-prev) || !strncmp(str+prev, "SLASH", len-prev)) {
+ *key= SLASHKEY;
+ } else if (!strncmp(str+prev, "BACKSLASHKEY", len-prev) || !strncmp(str+prev, "BACKSLASH", len-prev)) {
+ *key= BACKSLASHKEY;
+ } else if (!strncmp(str+prev, "EQUALKEY", len-prev) || !strncmp(str+prev, "EQUAL", len-prev)) {
+ *key= EQUALKEY;
+ } else if (!strncmp(str+prev, "LEFTBRACKETKEY", len-prev) || !strncmp(str+prev, "LEFTBRACKET", len-prev)) {
+ *key= LEFTBRACKETKEY;
+ } else if (!strncmp(str+prev, "RIGHTBRACKETKEY", len-prev) || !strncmp(str+prev, "RIGHTBRACKET", len-prev)) {
+ *key= RIGHTBRACKETKEY;
+ } else if (!strncmp(str+prev, "DELKEY", len-prev) || !strncmp(str+prev, "DELETE", len-prev)) {
+ *key= DELKEY;
+
+ } else if (!strncmp(str+prev, "LEFTARROWKEY", len-prev) || !strncmp(str+prev, "LEFTARROW", len-prev)) {
+ *key= LEFTARROWKEY;
+ } else if (!strncmp(str+prev, "DOWNARROWKEY", len-prev) || !strncmp(str+prev, "DOWNARROW", len-prev)) {
+ *key= DOWNARROWKEY;
+ } else if (!strncmp(str+prev, "RIGHTARROWKEY", len-prev) || !strncmp(str+prev, "RIGHTARROW", len-prev)) {
+ *key= RIGHTARROWKEY;
+ } else if (!strncmp(str+prev, "UPARROWKEY", len-prev) || !strncmp(str+prev, "UPARROW", len-prev)) {
+ *key= UPARROWKEY;
+
+ } else if (!strncmp(str+prev, "PAD", 3)) {
+
+ if (len-prev<=4) {
+
+ if (str[prev]>='0' && str[prev]<='9') {
+ *key= str[prev]-'0'+ZEROKEY;
+ } else {
+ invalid= 1;
+ }
+
+ } else if (!strncmp(str+prev+3, "PERIODKEY", len-prev-3) || !strncmp(str+prev+3, "PERIOD", len-prev-3)) {
+ *key= PADPERIOD;
+ } else if (!strncmp(str+prev+3, "SLASHKEY", len-prev-3) || !strncmp(str+prev+3, "SLASH", len-prev-3)) {
+ *key= PADSLASHKEY;
+ } else if (!strncmp(str+prev+3, "ASTERKEY", len-prev-3) || !strncmp(str+prev+3, "ASTERISK", len-prev-3)) {
+ *key= PADASTERKEY;
+ } else if (!strncmp(str+prev+3, "MINUSKEY", len-prev-3) || !strncmp(str+prev+3, "MINUS", len-prev-3)) {
+ *key= PADMINUS;
+ } else if (!strncmp(str+prev+3, "ENTERKEY", len-prev-3) || !strncmp(str+prev+3, "ENTER", len-prev-3)) {
+ *key= PADENTER;
+ } else if (!strncmp(str+prev+3, "PLUSKEY", len-prev-3) || !strncmp(str+prev+3, "PLUS", len-prev-3)) {
+ *key= PADPLUSKEY;
+ } else {
+ invalid= 1;
+ }
+
+ } else if (!strncmp(str+prev, "F1KEY", len-prev) || !strncmp(str+prev, "F1", len-prev)) {
+ *key= F1KEY;
+ } else if (!strncmp(str+prev, "F2KEY", len-prev) || !strncmp(str+prev, "F2", len-prev)) {
+ *key= F2KEY;
+ } else if (!strncmp(str+prev, "F3KEY", len-prev) || !strncmp(str+prev, "F3", len-prev)) {
+ *key= F3KEY;
+ } else if (!strncmp(str+prev, "F4KEY", len-prev) || !strncmp(str+prev, "F4", len-prev)) {
+ *key= F4KEY;
+ } else if (!strncmp(str+prev, "F5KEY", len-prev) || !strncmp(str+prev, "F5", len-prev)) {
+ *key= F5KEY;
+ } else if (!strncmp(str+prev, "F6KEY", len-prev) || !strncmp(str+prev, "F6", len-prev)) {
+ *key= F6KEY;
+ } else if (!strncmp(str+prev, "F7KEY", len-prev) || !strncmp(str+prev, "F7", len-prev)) {
+ *key= F7KEY;
+ } else if (!strncmp(str+prev, "F8KEY", len-prev) || !strncmp(str+prev, "F8", len-prev)) {
+ *key= F8KEY;
+ } else if (!strncmp(str+prev, "F9KEY", len-prev) || !strncmp(str+prev, "F9", len-prev)) {
+ *key= F9KEY;
+ } else if (!strncmp(str+prev, "F10KEY", len-prev) || !strncmp(str+prev, "F10", len-prev)) {
+ *key= F10KEY;
+ } else if (!strncmp(str+prev, "F11KEY", len-prev) || !strncmp(str+prev, "F11", len-prev)) {
+ *key= F11KEY;
+ } else if (!strncmp(str+prev, "F12KEY", len-prev) || !strncmp(str+prev, "F12", len-prev)) {
+ *key= F12KEY;
+
+ } else if (!strncmp(str+prev, "PAUSEKEY", len-prev) || !strncmp(str+prev, "PAUSE", len-prev)) {
+ *key= PAUSEKEY;
+ } else if (!strncmp(str+prev, "INSERTKEY", len-prev) || !strncmp(str+prev, "INSERT", len-prev)) {
+ *key= INSERTKEY;
+ } else if (!strncmp(str+prev, "HOMEKEY", len-prev) || !strncmp(str+prev, "HOME", len-prev)) {
+ *key= HOMEKEY;
+ } else if (!strncmp(str+prev, "PAGEUPKEY", len-prev) || !strncmp(str+prev, "PAGEUP", len-prev)) {
+ *key= PAGEUPKEY;
+ } else if (!strncmp(str+prev, "PAGEDOWNKEY", len-prev) || !strncmp(str+prev, "PAGEDOWN", len-prev)) {
+ *key= PAGEDOWNKEY;
+ } else if (!strncmp(str+prev, "ENDKEY", len-prev) || !strncmp(str+prev, "END", len-prev)) {
+ *key= ENDKEY;
+
+ } else {
+ invalid= 1;
+ }
+
+ if (!invalid && *key) {
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index 12c67ea4c07..0665fe0c0c3 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -6078,6 +6078,10 @@ static void init_textspace(ScrArea *sa)
st->lheight= 12;
st->showlinenrs= 0;
st->tabnumber = 4;
+ st->showsyntax= 0;
+ st->doplugins= 0;
+ st->overwrite= 0;
+ st->wordwrap= 0;
st->currtab_set = 0;
st->top= 0;
diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c
index c8a20cdc951..5b2120424f1 100644
--- a/source/blender/src/toolbox.c
+++ b/source/blender/src/toolbox.c
@@ -2282,7 +2282,7 @@ void toolbox_generic( TBitem *generic_menu )
uiBlock *block;
uiBut *but;
TBitem *menu;
- int dx=96;
+ int dx=96, first=1, len;
short event, mval[2];
intptr_t ypos = -5;
@@ -2303,11 +2303,17 @@ void toolbox_generic( TBitem *generic_menu )
/* Add the menu */
for (menu = generic_menu; menu->icon != -1; menu++) {
- if(strcmp(menu->name, "SEPR")==0) {
+ if (first && (len=strlen(menu->name)) > 2 && menu->name[len-2]=='%' && menu->name[len-1]=='t') {
+ menu->name[len-2] = '\0';
+ uiSetCurFont(block, UI_HELVB);
+ uiDefIconTextBut(block, LABEL, 0, ICON_BLANK1, menu->name, mval[0]+tb_mainx,mval[1]+tb_mainy+ypos+5, dx, 19, NULL, 0.0, 0.0, 0, 0, "");
+ uiSetCurFont(block, UI_HELV);
+ ypos-=20;
+ } else if(strcmp(menu->name, "SEPR")==0) {
uiDefBut(block, SEPR, 0, "", mval[0]+tb_mainx,mval[1]+tb_mainy+ypos+5, dx, 6, NULL, 0.0, 0.0, 0, 0, "");
ypos-=6;
} else {
- if (menu->poin) {
+ if (menu->poin) {
but=uiDefIconTextBlockBut(block, tb_makemenu, menu->poin, ICON_RIGHTARROW_THIN, menu->name, mval[0]+tb_mainx,mval[1]+tb_mainy+ypos+5, dx, 19, "");
uiButSetFlag(but, UI_MAKE_RIGHT);
@@ -2318,6 +2324,7 @@ void toolbox_generic( TBitem *generic_menu )
}
ypos-=20;
}
+ first= 0;
}
uiBlockSetButmFunc(block, menu->poin, NULL);
diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c
index ffb35468325..21bec1ec978 100644
--- a/source/blender/src/usiblender.c
+++ b/source/blender/src/usiblender.c
@@ -67,6 +67,7 @@
#include "DNA_sound_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_text_types.h"
#include "BKE_blender.h"
#include "BKE_curve.h"
@@ -79,6 +80,7 @@
#include "BKE_mball.h"
#include "BKE_node.h"
#include "BKE_packedFile.h"
+#include "BKE_suggestions.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BKE_pointcache.h"
@@ -1111,6 +1113,7 @@ void exit_usiblender(void)
free_ipocopybuf();
free_actcopybuf();
free_vertexpaint();
+ free_texttools();
/* editnurb can remain to exist outside editmode */
freeNurblist(&editNurb);
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
index ec0b0303b68..06002060bf1 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
+++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
@@ -99,38 +99,6 @@ void SCA_Joystick::ReleaseInstance()
}
}
-void SCA_Joystick::HandleEvents()
-{
- if(m_isinit)
- {
- if(SDL_PollEvent(&m_private->m_event))
- {
- switch(m_private->m_event.type)
- {
- case SDL_JOYAXISMOTION:
- HANDLE_AXISMOTION(OnAxisMotion);
- break;
- case SDL_JOYHATMOTION:
- HANDLE_HATMOTION(OnHatMotion);
- break;
- case SDL_JOYBUTTONUP:
- HANDLE_BUTTONUP(OnButtonUp);
- break;
- case SDL_JOYBUTTONDOWN:
- HANDLE_BUTTONDOWN(OnButtonDown);
- break;
- case SDL_JOYBALLMOTION:
- HANDLE_BALLMOTION(OnBallMotion);
- break;
- default:
- HANDLE_NOEVENT(OnNothing);
- break;
- }
- }
- }
-}
-
-
void SCA_Joystick::cSetPrecision(int val)
{
m_prec = val;
@@ -229,76 +197,6 @@ int SCA_Joystick::pGetHat(int direction)
return 0;
}
-
-bool SCA_Joystick::GetJoyAxisMotion()
-{
- bool result = false;
- if(m_isinit){
- if(SDL_PollEvent(&m_private->m_event)){
- switch(m_private->m_event.type)
- {
- case SDL_JOYAXISMOTION:
- result = true;
- break;
- }
- }
- }
- return result;
-}
-
-
-bool SCA_Joystick::GetJoyButtonPress()
-{
- bool result = false;
- if(m_isinit){
- if(SDL_PollEvent(&m_private->m_event)){
- switch(m_private->m_event.type)
- {
- case SDL_JOYBUTTONDOWN:
- result = true;
- break;
- }
- }
- }
- return result;
-}
-
-
-bool SCA_Joystick::GetJoyButtonRelease()
-{
- bool result = false;
- if(m_isinit)
- {
- if(SDL_PollEvent(&m_private->m_event)){
- switch(m_private->m_event.type)
- {
- case SDL_JOYBUTTONUP:
- result = true;
- break;
- }
- }
- }
- return result;
-}
-
-
-bool SCA_Joystick::GetJoyHatMotion()
-{
- bool result = false;
- if(m_isinit){
- if(SDL_PollEvent(&m_private->m_event)){
- switch(m_private->m_event.type)
- {
- case SDL_JOYHATMOTION:
- result = true;
- break;
- }
- }
- }
- return 0;
-}
-
-
int SCA_Joystick::GetNumberOfAxes()
{
int number;
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
index d318d28e0f7..bcbb43241c2 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
+++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
@@ -29,6 +29,7 @@
#define _SCA_JOYSTICK_H_
#include "SCA_JoystickDefines.h"
+#include "SDL.h"
/*
* Basic Joystick class
@@ -104,6 +105,16 @@ class SCA_Joystick
bool m_istrig;
/*
+ * event callbacks
+ */
+ void OnAxisMotion(SDL_Event *sdl_event);
+ void OnHatMotion(SDL_Event *sdl_event);
+ void OnButtonUp(SDL_Event *sdl_event);
+ void OnButtonDown(SDL_Event *sdl_event);
+ void OnNothing(SDL_Event *sdl_event);
+ void OnBallMotion(SDL_Event *sdl_event){}
+
+ /*
* Open the joystick
*/
bool CreateJoystickDevice(void);
@@ -112,17 +123,6 @@ class SCA_Joystick
* Close the joystick
*/
void DestroyJoystickDevice(void);
-
- /*
- * event callbacks
- */
-
- void OnAxisMotion(void);
- void OnHatMotion(void);
- void OnButtonUp(void);
- void OnButtonDown(void);
- void OnNothing(void);
- void OnBallMotion(void){}
/*
* fills the axis mnember values
@@ -158,9 +158,9 @@ class SCA_Joystick
public:
static SCA_Joystick *GetInstance( short int joyindex );
+ static void HandleEvents( void );
void ReleaseInstance();
- void HandleEvents();
/*
*/
@@ -212,16 +212,6 @@ public:
bool IsTrig(void){
return m_istrig;
}
-
-
- /*
- * returns true if an event is being processed
- */
-
- bool GetJoyAxisMotion(void);
- bool GetJoyButtonPress(void);
- bool GetJoyButtonRelease(void);
- bool GetJoyHatMotion(void);
/*
* returns the # of...
@@ -237,7 +227,7 @@ public:
int Connected(void);
};
-
+void Joystick_HandleEvents( void );
#endif
diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h b/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
index 8d8f88ecaf2..73ffe1406d9 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
+++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
@@ -40,12 +40,4 @@
#define JOYINDEX_MAX 8
-/* function callbacks */
-#define HANDLE_AXISMOTION(fn) ((fn)(), 0L)
-#define HANDLE_HATMOTION(fn) ((fn)(), 0L)
-#define HANDLE_BUTTONUP(fn) ((fn)(), 0L)
-#define HANDLE_BUTTONDOWN(fn) ((fn)(), 0L)
-#define HANDLE_BALLMOTION(fn) ((fn)(), 0L)
-#define HANDLE_NOEVENT(fn) ((fn)(), 0L)
-
#endif
diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
index ab523470e21..1e064f55397 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
+++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
@@ -30,41 +30,75 @@
-void SCA_Joystick::OnAxisMotion(void)
+void SCA_Joystick::OnAxisMotion(SDL_Event* sdl_event)
{
pFillAxes();
- m_axisnum = m_private->m_event.jaxis.axis;
- m_axisvalue = m_private->m_event.jaxis.value;
+ m_axisnum = sdl_event->jaxis.axis;
+ m_axisvalue = sdl_event->jaxis.value;
m_istrig = 1;
}
-void SCA_Joystick::OnHatMotion(void)
+void SCA_Joystick::OnHatMotion(SDL_Event* sdl_event)
{
- m_hatdir = m_private->m_event.jhat.value;
- m_hatnum = m_private->m_event.jhat.hat;
+ m_hatdir = sdl_event->jhat.value;
+ m_hatnum = sdl_event->jhat.hat;
m_istrig = 1;
}
-void SCA_Joystick::OnButtonUp(void)
+void SCA_Joystick::OnButtonUp(SDL_Event* sdl_event)
{
m_buttonnum = -2;
}
-void SCA_Joystick::OnButtonDown(void)
+void SCA_Joystick::OnButtonDown(SDL_Event* sdl_event)
{
m_buttonmax = GetNumberOfButtons();
- if(m_private->m_event.jbutton.button >= 1 || m_private->m_event.jbutton.button <= m_buttonmax)
+ if(sdl_event->jbutton.button >= 1 || sdl_event->jbutton.button <= m_buttonmax)
{
m_istrig = 1;
- m_buttonnum = m_private->m_event.jbutton.button;
+ m_buttonnum = sdl_event->jbutton.button;
}
}
-void SCA_Joystick::OnNothing(void)
+void SCA_Joystick::OnNothing(SDL_Event* sdl_event)
{
m_istrig = 0;
}
+
+/* only handle events for 1 joystick */
+
+void SCA_Joystick::HandleEvents(void)
+{
+ SDL_Event sdl_event;
+
+ if(SDL_PollEvent(&sdl_event))
+ {
+ /* Note! m_instance[sdl_event.jaxis.which]
+ * will segfault if over JOYINDEX_MAX, not too nice but what are the chances? */
+ switch(sdl_event.type)
+ {
+ case SDL_JOYAXISMOTION:
+ SCA_Joystick::m_instance[sdl_event.jaxis.which]->OnAxisMotion(&sdl_event);
+ break;
+ case SDL_JOYHATMOTION:
+ SCA_Joystick::m_instance[sdl_event.jhat.which]->OnHatMotion(&sdl_event);
+ break;
+ case SDL_JOYBUTTONUP:
+ SCA_Joystick::m_instance[sdl_event.jbutton.which]->OnButtonUp(&sdl_event);
+ break;
+ case SDL_JOYBUTTONDOWN:
+ SCA_Joystick::m_instance[sdl_event.jbutton.which]->OnButtonDown(&sdl_event);
+ break;
+ case SDL_JOYBALLMOTION:
+ SCA_Joystick::m_instance[sdl_event.jball.which]->OnBallMotion(&sdl_event);
+ break;
+ default:
+ printf("SCA_Joystick::HandleEvents, Unknown SDL event, this should not happen\n");
+ break;
+ }
+ }
+}
diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h b/source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h
index 23fad3cd55d..bb6bfe2d4cc 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h
+++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickPrivate.h
@@ -33,10 +33,6 @@ class SCA_Joystick::PrivateData
{
public:
/*
- * SDL events structure
- */
- SDL_Event m_event;
- /*
* The Joystick
*/
SDL_Joystick* m_joystick;
diff --git a/source/gameengine/GameLogic/SCA_JoystickManager.cpp b/source/gameengine/GameLogic/SCA_JoystickManager.cpp
index 08c36326712..a86770a6e0a 100644
--- a/source/gameengine/GameLogic/SCA_JoystickManager.cpp
+++ b/source/gameengine/GameLogic/SCA_JoystickManager.cpp
@@ -44,7 +44,6 @@ SCA_JoystickManager::SCA_JoystickManager(class SCA_LogicManager* logicmgr)
for (i=0; i<JOYINDEX_MAX; i++) {
m_joystick[i] = SCA_Joystick::GetInstance( i );
}
- //m_joystick = NULL;
}
@@ -59,14 +58,21 @@ SCA_JoystickManager::~SCA_JoystickManager()
void SCA_JoystickManager::NextFrame(double curtime,double deltatime)
{
- set<SCA_ISensor*>::iterator it;
- for (it = m_sensors.begin(); it != m_sensors.end(); it++)
- {
- SCA_JoystickSensor* joysensor = (SCA_JoystickSensor*)(*it);
- if(!joysensor->IsSuspended())
+ if (m_sensors.size()==0) {
+ return;
+ }
+ else {
+ set<SCA_ISensor*>::iterator it;
+
+ SCA_Joystick::HandleEvents(); /* Handle all SDL Joystick events */
+
+ for (it = m_sensors.begin(); it != m_sensors.end(); it++)
{
- m_joystick[joysensor->GetJoyIndex()]->HandleEvents();
- joysensor->Activate(m_logicmgr, NULL);
+ SCA_JoystickSensor* joysensor = (SCA_JoystickSensor*)(*it);
+ if(!joysensor->IsSuspended())
+ {
+ joysensor->Activate(m_logicmgr, NULL);
+ }
}
}
}
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
index 37f58f1ef1b..b32cbd83285 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
@@ -120,7 +120,7 @@ bool SCA_JoystickSensor::Evaluate(CValue* event)
js->cSetPrecision(m_precision);
if(m_axisf == 1){
if(js->aUpAxisIsPositive(m_axis)){
- m_istrig =1;
+ m_istrig = 1;
result = true;
}else{
if(m_istrig){
@@ -243,11 +243,31 @@ bool SCA_JoystickSensor::Evaluate(CValue* event)
printf("Error invalid switch statement\n");
break;
}
- if(!js->IsTrig()){
+
+ if (js->IsTrig()) {
+ /* The if below detects changes with the joystick trigger state.
+ * js->IsTrig() will stay true as long as the key is held.
+ * even though the event from SDL will only be sent once.
+ * (js->IsTrig() && m_istrig_lastjs) - when true it means this sensor
+ * had the same joystick trigger state last time,
+ * Setting the result false this time means it wont run the sensors
+ * controller every time (like a pulse sensor)
+ *
+ * This is not done with the joystick its self incase other sensors use
+ * it or become active.
+ */
+ if (m_istrig_lastjs) {
+ result = false;
+ }
+ m_istrig_lastjs = true;
+ } else {
m_istrig = 0;
+ m_istrig_lastjs = false;
}
+
if (reset)
result = true;
+
return result;
}
@@ -334,7 +354,7 @@ char SCA_JoystickSensor::SetIndex_doc[] =
"\tSets the joystick index to use.\n";
PyObject* SCA_JoystickSensor::PySetIndex( PyObject* self, PyObject* value ) {
int index = PyInt_AsLong( value ); /* -1 on error, will raise an error in this case */
- if (index < 0 or index >= JOYINDEX_MAX) {
+ if (index < 0 || index >= JOYINDEX_MAX) {
PyErr_SetString(PyExc_ValueError, "joystick index out of range or not an int");
return NULL;
}
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.h b/source/gameengine/GameLogic/SCA_JoystickSensor.h
index a21146b568b..8b74f6e0296 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.h
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.h
@@ -69,6 +69,12 @@ class SCA_JoystickSensor :public SCA_ISensor
*/
bool m_istrig;
/**
+ * Last trigger state for this sensors joystick,
+ * Otherwise it will trigger all the time
+ * this is used to see if the trigger state changes.
+ */
+ bool m_istrig_lastjs;
+ /**
* The mode to determine axis,button or hat
*/
short int m_joymode;