From 10d83c0e5e3a1e9143008dcd70515d2d4ded3c86 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sun, 6 Apr 2014 18:05:27 -0400 Subject: more stuff --- .travis.sh | 1 + Makefile | 2 +- ast2json/renpy/ast.py | 190 ++++----- configure | 89 ++++- www/js/api.js | 13 +- www/js/html5ks.js | 55 ++- www/js/s2s.js | 1066 +++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 1283 insertions(+), 133 deletions(-) create mode 100644 www/js/s2s.js diff --git a/.travis.sh b/.travis.sh index ee286d3..c5a46aa 100755 --- a/.travis.sh +++ b/.travis.sh @@ -4,6 +4,7 @@ set -e -x case "$1" in before_install) + ln -s $(command -v python) /usr/local/bin/python sudo service postgresql stop sudo service mysql stop sudo apt-get update -qq diff --git a/Makefile b/Makefile index 0b7e65d..3d20bb2 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ MYJS := www/js/html5ks.js www/js/menu.js www/js/api.js \ www/js/characters.js www/js/imachine.js www/js/i18n.js JSLIBS := www/js/lib/fastclick.js www/js/lib/modernizr-build.js \ www/js/lib/when.js www/js/lib/spin.js -JSDATA := www/js/play.js www/js/images.js +JSDATA := www/js/play.js www/js/images.js www/js/s2s.js JS := $(JSLIBS) $(MYJS) $(JSDATA) JSOUT := www/js/all.min.js diff --git a/ast2json/renpy/ast.py b/ast2json/renpy/ast.py index b5d2200..ef1df20 100644 --- a/ast2json/renpy/ast.py +++ b/ast2json/renpy/ast.py @@ -75,12 +75,12 @@ class ArgumentInfo(object): def __newobj__(cls, *args): - return cls.__new__(cls, *args) + return cls.__new__(cls, *args) # This represents a string containing python code. class PyExpr(str): - __slots__ = [ + __slots__ = [ 'filename', 'linenumber' ] @@ -93,8 +93,8 @@ class PyExpr(str): def __getnewargs__(self): return (str(self), self.filename, self.linenumber) # E1101 - - + + class PyCode(object): __slots__ = [ @@ -113,7 +113,7 @@ class PyCode(object): def __setstate__(self, state): (_, self.source, self.location, self.mode) = state self.bytecode = None - + def __init__(self, source, loc=('', 1), mode='exec'): # The source code. self.source = source @@ -158,7 +158,7 @@ class Scry(object): else: return self._next.scry() - + class Node(object): """ A node in the abstract syntax tree of the program. @@ -168,7 +168,7 @@ class Node(object): @ivar filename: The filename where this node comes from. @ivar linenumber: The line number of the line on which this node is defined. """ - + __slots__ = [ 'name', 'filename', @@ -187,7 +187,7 @@ class Node(object): self.filename, self.linenumber = loc self.name = None self.next = None - + def diff_info(self): """ Returns a tuple of diff info about ourself. This is used to @@ -216,14 +216,14 @@ class Node(object): """ return None - + def chain(self, next): """ This is called with the Node node that should be followed after executing this node, and all nodes that this node executes. (For example, if this node is a block label, the next is the node that should be executed after all nodes in - the block.) + the block.) """ self.next = next @@ -288,7 +288,7 @@ def say_menu_with(expression, callback): if renpy.game.preferences.transitions: # renpy.game.interface.set_transition(what) callback(what) - + class Say(Node): __slots__ = [ @@ -314,9 +314,9 @@ class Say(Node): else: self.who_fast = False else: - self.who = None + self.who = None self.who_fast = False - + self.what = what self.with_ = with_ self.interact = interact @@ -336,7 +336,7 @@ class Say(Node): what = self.what if renpy.config.say_menu_text_filter: what = renpy.config.say_menu_text_filter(what) # E1102 - + say_menu_with(self.with_, renpy.game.interface.set_transition) renpy.exports.say(who, what, interact=getattr(self, 'interact', True)) @@ -375,7 +375,7 @@ class Say(Node): rv = Node.scry(self) rv.interacts = True # W0201 return rv - + # Copy the descriptor. setattr(Say, "with", Say.with_) # E1101 @@ -409,7 +409,7 @@ class Init(Node): def execute(self): return self.__next__ - + class Label(Node): @@ -422,7 +422,7 @@ class Label(Node): def __setstate__(self, state): self.parameters = None setstate(self, state) - + def __init__(self, loc, name, block, parameters): """ Constructs a new Label node. @@ -442,7 +442,7 @@ class Label(Node): return (Label, self.name) def get_children(self): - return self.block + return self.block def chain(self, next): @@ -451,10 +451,10 @@ class Label(Node): chain_block(self.block, next) else: self.next = next - + def execute(self): renpy.game.context().mark_seen() - + args = renpy.store._args kwargs = renpy.store._kwargs @@ -472,8 +472,8 @@ class Label(Node): if kwargs is None: kwargs = { } - - values = { } + + values = { } params = self.parameters for name, value in zip(params.positional, args): @@ -498,7 +498,7 @@ class Label(Node): else: values[name] = renpy.python.py_eval(default) - + renpy.exports.dynamic(name) setattr(renpy.store, name, values[name]) del values[name] @@ -525,7 +525,7 @@ class Label(Node): if renpy.config.label_callback: renpy.config.label_callback(self.name, renpy.game.context().last_abnormal) - + return self.__next__ class Python(Node): @@ -542,7 +542,7 @@ class Python(Node): @param hide: If True, the code will be executed with its own local dictionary. """ - + super(Python, self).__init__(loc) self.hide = hide @@ -577,7 +577,7 @@ class EarlyPython(Node): @param hide: If True, the code will be executed with its own local dictionary. """ - + super(EarlyPython, self).__init__(loc) self.hide = hide @@ -612,7 +612,7 @@ class Image(Node): """ super(Image, self).__init__(loc) - + self.imgname = name if expr: @@ -621,16 +621,16 @@ class Image(Node): else: self.code = None self.atl = atl - - def diff_info(self): + + def diff_info(self): return (Image, tuple(self.imgname)) def get_pycode(self): - if self.code: + if self.code: return [ self.code ] else: return [ ] - + def execute(self): # Note: We should always check that self.code is None before @@ -646,7 +646,7 @@ class Image(Node): return self.__next__ - + class Transform(Node): __slots__ = [ @@ -658,20 +658,20 @@ class Transform(Node): 'atl', # The parameters associated with the transform, if any. - 'parameters', + 'parameters', ] default_parameters = ParameterInfo([ ], [ ], None, None) - + def __init__(self, loc, name, atl=None, parameters=default_parameters): super(Transform, self).__init__(loc) - + self.varname = name self.atl = atl self.parameters = parameters - - def diff_info(self): + + def diff_info(self): return (Transform, self.varname) def execute(self): @@ -684,10 +684,10 @@ class Transform(Node): trans = renpy.display.motion.ATLTransform(self.atl, parameters=parameters) renpy.exports.definitions[self.varname].append((self.filename, self.linenumber, "transform")) setattr(renpy.store, self.varname, trans) - + return self.__next__ - + def predict_imspec(imspec, callback, scene=False): """ Call this to use the given callback to predict the image named @@ -702,8 +702,8 @@ def predict_imspec(imspec, callback, scene=False): elif len(imspec) == 3: name, at_list, layer = imspec - - + + if expression: try: img = renpy.python.py_eval(expression) @@ -722,28 +722,28 @@ def predict_imspec(imspec, callback, scene=False): if scene: renpy.game.context().predict_info.images.predict_scene(layer) - + renpy.game.context().predict_info.images.predict_show(tag or name, layer) - + img.predict(callback) - + def show_imspec(imspec, atl=None): if len(imspec) == 7: name, expression, tag, at_list, layer, zorder, behind = imspec - + elif len(imspec) == 6: name, expression, tag, at_list, layer, zorder = imspec behind = [ ] - + elif len(imspec) == 3: name, at_list, layer = imspec expression = None tag = None zorder = None behind = [ ] - + if zorder is not None: zorder = renpy.python.py_eval(zorder) else: @@ -781,8 +781,8 @@ class Show(Node): self.imspec = imspec self.atl = atl - - def diff_info(self): + + def diff_info(self): return (Show, tuple(self.imspec[0])) def execute(self): @@ -794,7 +794,7 @@ class Show(Node): def predict(self, callback): predict_imspec(self.imspec, callback) return [ self.__next__ ] - + class Scene(Node): @@ -817,7 +817,7 @@ class Scene(Node): self.layer = layer self.atl = atl - def diff_info(self): + def diff_info(self): if self.imspec: data = tuple(self.imspec[0]) @@ -834,15 +834,15 @@ class Scene(Node): show_imspec(self.imspec, atl=getattr(self, "atl", None)) return self.__next__ - + def predict(self, callback): - + if self.imspec: predict_imspec(self.imspec, callback, scene=True) return [ self.__next__ ] - + class Hide(Node): __slots__ = [ @@ -860,7 +860,7 @@ class Hide(Node): self.imspec = imgspec - def diff_info(self): + def diff_info(self): return (Hide, tuple(self.imspec[0])) def predict(self, callback): @@ -878,11 +878,11 @@ class Hide(Node): if tag is None: tag = name[0] - + renpy.game.context().predict_info.images.predict_hide(tag, layer) return [ ] - + def execute(self): if len(self.imspec) == 3: @@ -894,12 +894,12 @@ class Hide(Node): name, expression, tag, at_list, layer, zorder = self.imspec elif len(self.imspec) == 7: name, expression, tag, at_list, layer, zorder, behind = self.imspec - + renpy.config.hide(tag or name, layer) return self.__next__ - + class With(Node): __slots__ = [ @@ -910,7 +910,7 @@ class With(Node): def __setstate__(self, state): self.paired = None setstate(self, state) - + def __init__(self, loc, expr, paired=None): """ @param expr: An expression giving a transition or None. @@ -922,7 +922,7 @@ class With(Node): def diff_info(self): return (With, self.expr) - + def execute(self): trans = renpy.python.py_eval(self.expr) @@ -930,7 +930,7 @@ class With(Node): if self.paired is not None: paired = renpy.python.py_eval(self.paired) else: - paired = None + paired = None renpy.exports.with_statement(trans, paired) @@ -946,10 +946,10 @@ class With(Node): except: pass - + return [ self.__next__ ] - - + + class Call(Node): __slots__ = [ @@ -961,7 +961,7 @@ class Call(Node): def __setstate__(self, state): self.arguments = None setstate(self, state) - + def __init__(self, loc, label, expression, arguments): super(Call, self).__init__(loc) @@ -1011,11 +1011,11 @@ class Call(Node): renpy.store._args = tuple(args) renpy.store._kwargs = kwargs - - + + return rv - - + + def predict(self, callback): if self.expression: return [ ] @@ -1035,11 +1035,11 @@ class Return(Node): def __setstate__(self, state): self.expression = None setstate(self, state) - + def __init__(self, loc, expression): super(Return, self).__init__(loc) self.expression = expression - + def diff_info(self): return (Return, ) @@ -1056,7 +1056,7 @@ class Return(Node): renpy.store._return = None renpy.game.context().pop_dynamic() - + return renpy.game.context().lookup_return(pop=True) def predict(self, callback): @@ -1071,7 +1071,7 @@ class Return(Node): rv._next = None return rv - + class Menu(Node): __slots__ = [ @@ -1111,7 +1111,7 @@ class Menu(Node): def execute(self): choices = [ ] - + for i, (label, condition, block) in enumerate(self.items): if renpy.config.say_menu_text_filter: @@ -1129,7 +1129,7 @@ class Menu(Node): return self.__next__ else: return self.items[choice][2][0] - + def predict(self, callback): rv = [ ] @@ -1154,12 +1154,12 @@ class Menu(Node): rv._next = None rv.interacts = True return rv - + setattr(Menu, "with", Menu.with_) # E1101 # Goto is considered harmful. So we decided to name it "jump" -# instead. +# instead. class Jump(Node): __slots__ = [ @@ -1204,7 +1204,7 @@ class Jump(Node): rv._next = None else: rv._next = renpy.game.script.lookup(self.target) - + return rv @@ -1252,7 +1252,7 @@ class While(Node): def predict(self, callback): return [ self.block[0], self.__next__ ] - + def scry(self): rv = Node.scry(self) rv._next = None @@ -1319,7 +1319,7 @@ class UserStatement(Node): # Do not store the parse quite yet. renpy.statements.parse(self, self.line) - + def diff_info(self): return (UserStatement, self.line) @@ -1332,12 +1332,12 @@ class UserStatement(Node): for i in predicted: callback(i) - + return [ self.get_next() ] - + def call(self, method, *args, **kwargs): - - parsed = self.parsed + + parsed = self.parsed if parsed is None: parsed = renpy.statements.parse(self, self.line) self.parsed = parsed @@ -1350,14 +1350,14 @@ class UserStatement(Node): return renpy.game.script.lookup(rv) else: return self.__next__ - + def scry(self): rv = Node.scry(self) rv._next = self.get_next() self.call("scry", rv) return rv - - + + class Define(Node): __slots__ = [ @@ -1374,23 +1374,23 @@ class Define(Node): """ super(Define, self).__init__(loc) - + self.varname = name self.code = PyCode(expr, loc=loc, mode='eval') - - def diff_info(self): + + def diff_info(self): return (Define, tuple(self.varname)) def get_pycode(self): - if self.code: + if self.code: return [ self.code ] else: return [ ] - + def execute(self): value = renpy.python.py_eval_bytecode(self.code.bytecode) renpy.exports.definitions[self.varname].append((self.filename, self.linenumber, "define")) - setattr(renpy.store, self.varname, value) - + setattr(renpy.store, self.varname, value) + return self.__next__ diff --git a/configure b/configure index 5396376..6ca1a0f 100755 --- a/configure +++ b/configure @@ -1,11 +1,80 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python + +from __future__ import with_statement, print_function, unicode_literals import os import re import shlex -import shutil -import subprocess -from sys import stderr +try: + from shutil import which +except ImportError: + def which(cmd, mode=os.F_OK | os.X_OK, path=None): + """Given a command, mode, and a PATH string, return the path which + conforms to the given mode on the PATH, or None if there is no such + file. + + `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result + of os.environ.get("PATH"), or can be overridden with a custom search + path. + + """ + # Check that a given file can be accessed with the correct mode. + # Additionally check that `file` is not a directory, as on Windows + # directories pass the os.access check. + def _access_check(fn, mode): + return (os.path.exists(fn) and os.access(fn, mode) + and not os.path.isdir(fn)) + + # If we're given a path with a directory part, look it up directly rather + # than referring to PATH directories. This includes checking relative to the + # current directory, e.g. ./script + if os.path.dirname(cmd): + if _access_check(cmd, mode): + return cmd + return None + + if path is None: + path = os.environ.get("PATH", os.defpath) + if not path: + return None + path = path.split(os.pathsep) + + if platform == "win32": + # The current directory takes precedence on Windows. + if not os.curdir in path: + path.insert(0, os.curdir) + + # PATHEXT is necessary to check on Windows. + pathext = os.environ.get("PATHEXT", "").split(os.pathsep) + # See if the given file matches any of the expected path extensions. + # This will allow us to short circuit when given "python.exe". + # If it does match, only test that one, otherwise we have to try + # others. + if any(cmd.lower().endswith(ext.lower()) for ext in pathext): + files = [cmd] + else: + files = [cmd + ext for ext in pathext] + else: + # On other platforms you don't have things like PATHEXT to tell you + # what file suffixes are executable, so just pass on cmd as-is. + files = [cmd] + + seen = set() + for dir in path: + normdir = os.path.normcase(dir) + if not normdir in seen: + seen.add(normdir) + for thefile in files: + name = os.path.join(dir, thefile) + if _access_check(name, mode): + return name + return None +from subprocess import CalledProcessError, STDOUT, check_call, check_output, list2cmdline +try: + from subprocess import DEVNULL +except ImportError: + DEVNULL = open(os.devnull, 'wb') +from sys import platform, stderr cmds = {} warnings = [] @@ -34,7 +103,7 @@ def check(name, why, flags=[], optional=False, var=None, run=True): elif varvalue is None: varvalue = name split = shlex.split(varvalue) - exe = shutil.which(split[0]) + exe = which(split[0]) if not exe: stderr.write("not found\n") if not optional: @@ -47,16 +116,16 @@ def check(name, why, flags=[], optional=False, var=None, run=True): if run: checking("%s usability" % exe) try: - subprocess.check_call(cmd + ["-h"], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) + check_call(cmd + ["-h"], stdout=DEVNULL, stderr=STDOUT) stderr.write("yes\n") - except subprocess.CalledProcessError as e: - raise CheckError() from e + except CalledProcessError as e: + raise CheckError(e) cmds[var] = cmd return cmd def run_ffmpeg(arg): - return subprocess.check_output(ffmpeg + [arg], stderr=subprocess.STDOUT).decode('utf-8') + return check_output(ffmpeg + [arg], stderr=STDOUT).decode('utf-8') def ffmpeg_check(name, regex, checks, output): for check in checks: @@ -92,7 +161,7 @@ if __name__ == "__main__": stderr.write("creating Makefile.inc\n") with open("Makefile.inc", "w") as f: - f.write(''.join('%s := %s\n' % (k, subprocess.list2cmdline(cmds[k])) for k in cmds)) + f.write(''.join('%s := %s\n' % (k, list2cmdline(cmds[k])) for k in cmds)) if len(warnings): stderr.write("Warnings during configuration:\n") diff --git a/www/js/api.js b/www/js/api.js index b8c2f28..6b5f177 100644 --- a/www/js/api.js +++ b/www/js/api.js @@ -191,16 +191,15 @@ window.html5ks.api = { iscene: function (target, is_h, is_end) { html5ks.store.status = "scene"; var deferred = when.defer(), - label = html5ks.data.script[html5ks.persistent.language + "_" + target], + real_target = html5ks.persistent.language + "_" + target, i = 0; - (function run(ret) { - if (label[i]) { - html5ks.api.runInst(label[i]).then(run, console.error); - i++; + html5ks.fetch('script', html5ks.data.s2s[real_target]).then(function (l) { + if (l[i]) { + html5ks.api.runInst(l[i++]).then(run, console.error); } else { - deferred.resolve(ret); + deferred.resolve(); } - }()); + }, deferred.reject); return deferred.promise; }, diff --git a/www/js/html5ks.js b/www/js/html5ks.js index 0a8eff3..7fe493a 100644 --- a/www/js/html5ks.js +++ b/www/js/html5ks.js @@ -4,7 +4,7 @@ window.assert = function (c, m) { else if (!c) throw new Error(m); }; window.html5ks = { - data: {}, + data: {script: {}}, persistent: {}, init: function () { var defaultPersistent = { @@ -55,7 +55,9 @@ window.html5ks = { hanako: 0 }, play: {}, - speed: "" + speed: "", + nvl: false, + window: false }, next: function () { var _next = html5ks._next; @@ -199,29 +201,42 @@ window.html5ks = { html5ks.menu.mainMenu(); }, console.error); }, - fetch: function (type, name) { + _fetch: function (obj, prop, path) { var deferred = when.defer(); var xhr = new XMLHttpRequest(); + if (obj[prop]) { + deferred.resolve(); + } else { + xhr.open("GET", path); + xhr.onload = function () { + if (xhr.status === 200) { + var d = JSON.parse(xhr.responseText); + obj[prop] = d; + deferred.resolve(d); + } else { + xhr.onerror(); + } + }; + xhr.onerror = function () { + deferred.reject(); + }; + xhr.send(); + } + return deferred.promise; + }, + fetch: function (type, name) { + var deferred = when.defer(); switch (type) { case "json": - if (html5ks.data[name]) { + return this._fetch(html5ks.data, name, "json/" + name + ".json"); + break; + case "script": + this._fetch(html5ks.data.script, name, "json/script-" + name + ".json").then(function (d) { + for (var i in d) { + html5ks.data.script[i] = d[i]; + } deferred.resolve(); - } else { - xhr.open("GET", "json/" + name + ".json"); - xhr.onload = function () { - if (xhr.status === 200) { - var d = JSON.parse(xhr.responseText); - html5ks.data[name] = d; - deferred.resolve(d); - } else { - xhr.onerror(); - } - }; - xhr.onerror = function () { - deferred.reject(); - }; - xhr.send(); - } + }); break; default: throw new Error("fetchtype " + type + " not implemented"); diff --git a/www/js/s2s.js b/www/js/s2s.js new file mode 100644 index 0000000..710b63e --- /dev/null +++ b/www/js/s2s.js @@ -0,0 +1,1066 @@ +html5ks.data.s2s = { + en_A10: "a1-wednesday", + en_A10a: "a1-wednesday", + en_A10b: "a1-wednesday", + en_A10c: "a1-wednesday", + en_A11: "a1-wednesday", + en_A11a: "a1-wednesday", + en_A11b: "a1-wednesday", + en_A11c: "a1-wednesday", + en_A11d: "a1-wednesday", + en_A11x: "a1-wednesday", + en_A11y: "a1-wednesday", + en_A12: "a1-wednesday", + en_A13: "a1-wednesday", + en_A15: "a1-wednesday", + en_A16: "a1-wednesday", + en_A17: "a1-wednesday", + en_A17a: "a1-wednesday", + en_A17b: "a1-wednesday", + en_A17c: "a1-wednesday", + en_A18: "a1-wednesday", + en_A19: "a1-thursday", + en_A19a: "a1-thursday", + en_A19b: "a1-thursday", + en_A19c: "a1-thursday", + en_A19d: "a1-thursday", + en_A19e: "a1-thursday", + en_A19f: "a1-thursday", + en_A19g: "a1-thursday", + en_A19h: "a1-thursday", + en_A19i: "a1-thursday", + en_A19j: "a1-thursday", + en_A1: "a1-monday", + en_A1a: "a1-monday", + en_A1b: "a1-monday", + en_A1c: "a1-monday", + en_A20: "a1-thursday", + en_A21: "a1-thursday", + en_A21a: "a1-thursday", + en_A21b: "a1-thursday", + en_A21c: "a1-thursday", + en_A21d: "a1-thursday", + en_A22: "a1-thursday", + en_A22a: "a1-thursday", + en_A22b: "a1-thursday", + en_A23: "a1-thursday", + en_A23a: "a1-thursday", + en_A24: "a1-thursday", + en_A24a: "a1-thursday", + en_A24b: "a1-thursday", + en_A24c: "a1-thursday", + en_A24d: "a1-thursday", + en_A24e: "a1-thursday", + en_A25: "a1-friday", + en_A25a: "a1-friday", + en_A25b: "a1-friday", + en_A26: "a1-friday", + en_A26a: "a1-friday", + en_A26b: "a1-friday", + en_A26c: "a1-friday", + en_A26d: "a1-friday", + en_A26e: "a1-friday", + en_A27: "a1-friday", + en_A27a: "a1-friday", + en_A27b: "a1-friday", + en_A27c: "a1-friday", + en_A27d: "a1-friday", + en_A27e: "a1-friday", + en_A27f: "a1-friday", + en_A27h: "a1-friday", + en_A27i: "a1-friday", + en_A28: "a1-friday", + en_A28a: "a1-friday", + en_A28b: "a1-friday", + en_A29: "a1-friday", + en_A29a: "a1-friday", + en_A29b: "a1-friday", + en_A29c: "a1-friday", + en_A29x: "a1-friday", + en_A2: "a1-monday", + en_A2a: "a1-monday", + en_A2b: "a1-monday", + en_A2c: "a1-monday", + en_A2d: "a1-monday", + en_A2e: "a1-monday", + en_A2f: "a1-monday", + en_A30: "a1-friday", + en_A30a: "a1-friday", + en_A30b: "a1-friday", + en_A30c: "a1-friday", + en_A30d: "a1-friday", + en_A31: "a1-saturday", + en_A31b: "a1-saturday", + en_A31c: "a1-saturday", + en_A31d: "a1-saturday", + en_A31e: "a1-saturday", + en_A32: "a1-saturday", + en_A32a: "a1-saturday", + en_A32b: "a1-saturday", + en_A33: "a1-saturday", + en_A33a: "a1-saturday", + en_A33b: "a1-saturday", + en_A34: "a1-saturday", + en_A34a: "a1-saturday", + en_A34b: "a1-saturday", + en_A35: "a1-saturday", + en_A35a: "a1-saturday", + en_A36: "a1-saturday", + en_A37: "a1-saturday", + en_A38: "a1-sunday", + en_A38a: "a1-sunday", + en_A38b: "a1-sunday", + en_A38c: "a1-sunday", + en_A38d: "a1-sunday", + en_A38e: "a1-sunday", + en_A39: "a1-sunday", + en_A3: "a1-monday", + en_A3a: "a1-monday", + en_A3b: "a1-monday", + en_A3c: "a1-monday", + en_A3d: "a1-monday", + en_A40: "a1-sunday", + en_A41a: "a1-sunday", + en_A41b: "a1-sunday", + en_A42: "a1-sunday", + en_A43: "a1-sunday", + en_A44: "a1-sunday", + en_A4: "a1-monday", + en_A5: "a1-tuesday", + en_A6: "a1-tuesday", + en_A6a: "a1-tuesday", + en_A6b: "a1-tuesday", + en_A6c: "a1-tuesday", + en_A7: "a1-tuesday", + en_A8: "a1-tuesday", + en_A8a: "a1-tuesday", + en_A8aa: "a1-tuesday", + en_A8ab: "a1-tuesday", + en_A8b: "a1-tuesday", + en_A8c: "a1-tuesday", + en_A8d: "a1-tuesday", + en_A8e: "a1-tuesday", + en_A8f: "a1-tuesday", + en_A9: "a1-tuesday", + en_A9a: "a1-tuesday", + en_A9b: "a1-tuesday", + en_A9c: "a1-tuesday", + en_E10: "a2-emi", + en_E11a: "a2-emi", + en_E11b: "a2-emi", + en_E11c: "a2-emi", + en_E11d: "a2-emi", + en_E11x: "a2-emi", + en_E11y: "a2-emi", + en_E11z: "a2-emi", + en_E12a: "a2-emi", + en_E12b: "a2-emi", + en_E12c: "a2-emi", + en_E12d: "a2-emi", + en_E13: "a2-emi", + en_E14: "a2-emi", + en_E15: "a2-emi", + en_E16: "a3-emi", + en_E17: "a3-emi", + en_E17a: "a3-emi", + en_E17b: "a3-emi", + en_E17x: "a3-emi", + en_E18: "a3-emi", + en_E18a: "a3-emi", + en_E18b: "a3-emi", + en_E18x: "a3-emi", + en_E19: "a3-emi", + en_E20: "a3-emi", + en_E20h: "a3-emi", + en_E20x: "a3-emi", + en_E21: "a3-emi", + en_E21h: "a3-emi", + en_E21x: "a3-emi", + en_E22: "a3-emi", + en_E23: "a3-emi", + en_E24: "a3-emi", + en_E24a: "a3-emi", + en_E24b: "a3-emi", + en_E24c: "a3-emi", + en_E25: "a3-emi", + en_E25a: "a3-emi", + en_E25b: "a3-emi", + en_E25c: "a3-emi", + en_E26: "a3-emi", + en_E26a: "a3-emi", + en_E26b: "a3-emi", + en_E26c: "a3-emi", + en_E26d: "a3-emi", + en_E26e: "a3-emi", + en_E26f: "a3-emi", + en_E27: "a3-emi", + en_E27a: "a3-emi", + en_E27b: "a3-emi", + en_E28: "a4-emi", + en_E29: "a4-emi", + en_E30: "a4-emi", + en_E30a: "a4-emi", + en_E30b: "a4-emi", + en_E30c: "a4-emi", + en_E30d: "a4-emi", + en_E30e: "a4-emi", + en_E31: "a4-emi", + en_E31h: "a4-emi", + en_E31x: "a4-emi", + en_E32: "a4-emi", + en_E3: "a2-emi", + en_E4: "a2-emi", + en_E5: "a2-emi", + en_E6: "a2-emi", + en_E7: "a2-emi", + en_E8: "a2-emi", + en_E9: "a2-emi", + en_H10: "a2-hanako", + en_H11: "a3-hanako", + en_H12: "a3-hanako", + en_H12a: "a3-hanako", + en_H12b: "a3-hanako", + en_H12c: "a3-hanako", + en_H13: "a3-hanako", + en_H14: "a3-hanako", + en_H15: "a3-hanako", + en_H16: "a3-hanako", + en_H17: "a3-hanako", + en_H18: "a3-hanako", + en_H19: "a3-hanako", + en_H20: "a3-hanako", + en_H20_1: "a3-hanako", + en_H20_2: "a3-hanako", + en_H21: "a4-hanako", + en_H22: "a4-hanako", + en_H22a: "a4-hanako", + en_H22b: "a4-hanako", + en_H22c: "a4-hanako", + en_H23: "a4-hanako", + en_H24: "a4-hanako", + en_H25: "a4-hanako", + en_H25a: "a4-hanako", + en_H25c: "a4-hanako", + en_H26: "a4-hanako", + en_H27: "a4-hanako", + en_H28: "a4-hanako", + en_H29: "a4-hanako", + en_H29h: "a4-hanako", + en_H29x: "a4-hanako", + en_H2: "a2-hanako", + en_H30: "a4-hanako", + en_H31: "a4-hanako", + en_H3: "a2-hanako", + en_H4: "a2-hanako", + en_H5_1: "a2-hanako", + en_H5_2: "a2-hanako", + en_H6: "a2-hanako", + en_H7: "a2-hanako", + en_H7a: "a2-hanako", + en_H7b: "a2-hanako", + en_H7c: "a2-hanako", + en_H8: "a2-hanako", + en_H9: "a2-hanako", + en_L10: "a3-lilly", + en_L10a: "a3-lilly", + en_L10b: "a3-lilly", + en_L10c: "a3-lilly", + en_L10d: "a3-lilly", + en_L10e: "a3-lilly", + en_L10f: "a3-lilly", + en_L11: "a3-lilly", + en_L12: "a3-lilly", + en_L13: "a3-lilly", + en_L14: "a3-lilly", + en_L15: "a3-lilly", + en_L15a: "a3-lilly", + en_L15b: "a3-lilly", + en_L15c: "a3-lilly", + en_L16: "a3-lilly", + en_L17: "a3-lilly", + en_L17h: "a3-lilly", + en_L18: "a3-lilly", + en_L19: "a3-lilly", + en_L19h: "a3-lilly", + en_L1: "a2-lilly", + en_L20: "a3-lilly", + en_L20a: "a3-lilly", + en_L20b: "a3-lilly", + en_L20c: "a3-lilly", + en_L21: "a4-lilly", + en_L22: "a4-lilly", + en_L23: "a4-lilly", + en_L24: "a4-lilly", + en_L24a: "a4-lilly", + en_L24b: "a4-lilly", + en_L24c: "a4-lilly", + en_L25: "a4-lilly", + en_L26: "a4-lilly", + en_L26h: "a4-lilly", + en_L26x: "a4-lilly", + en_L27: "a4-lilly", + en_L28: "a4-lilly", + en_L29: "a4-lilly", + en_L2: "a2-lilly", + en_L30: "a4-lilly", + en_L31: "a4-lilly", + en_L32: "a4-lilly", + en_L33: "a4-lilly", + en_L3: "a2-lilly", + en_L4: "a2-lilly", + en_L5: "a2-lilly", + en_L6a: "a2-lilly", + en_L6b: "a2-lilly", + en_L6c: "a2-lilly", + en_L6i: "a2-lilly", + en_L7: "a2-lilly", + en_L8: "a2-lilly", + en_L9: "a3-lilly", + en_NOP1: "a1-monday", + en_NOP2: "a1-monday", + en_R10: "a2-rin", + en_R11: "a2-rin", + en_R11a: "a2-rin", + en_R11b: "a2-rin", + en_R11c: "a2-rin", + en_R11d: "a2-rin", + en_R11e: "a2-rin", + en_R11f: "a2-rin", + en_R11g: "a2-rin", + en_R11h: "a2-rin", + en_R11i: "a2-rin", + en_R11j: "a2-rin", + en_R12: "a2-rin", + en_R12a: "a2-rin", + en_R12b: "a2-rin", + en_R12c: "a2-rin", + en_R12d: "a2-rin", + en_R12e: "a2-rin", + en_R12f: "a2-rin", + en_R13: "a2-rin", + en_R14: "a2-rin", + en_R15: "a2-rin", + en_R16: "a2-rin", + en_R16a: "a2-rin", + en_R16b: "a2-rin", + en_R16c: "a2-rin", + en_R16d: "a2-rin", + en_R16e: "a2-rin", + en_R17: "a3-rin", + en_R18: "a3-rin", + en_R19: "a3-rin", + en_R19a: "a3-rin", + en_R19b: "a3-rin", + en_R1: "a2-rin", + en_R20: "a3-rin", + en_R20a: "a3-rin", + en_R20b: "a3-rin", + en_R20c: "a3-rin", + en_R21: "a3-rin", + en_R21a: "a3-rin", + en_R21b: "a3-rin", + en_R21c: "a3-rin", + en_R22: "a3-rin", + en_R23: "a3-rin", + en_R23_2: "a3-rin", + en_R24: "a3-rin", + en_R25: "a3-rin", + en_R26: "a3-rin", + en_R26a: "a3-rin", + en_R26b: "a3-rin", + en_R26c: "a3-rin", + en_R27: "a3-rin", + en_R27h: "a3-rin", + en_R27x: "a3-rin", + en_R28: "a3-rin", + en_R28a: "a3-rin", + en_R28b: "a3-rin", + en_R28c: "a3-rin", + en_R29: "a3-rin", + en_R2: "a2-rin", + en_R2a: "a2-rin", + en_R2b: "a2-rin", + en_R2c: "a2-rin", + en_R30: "a4-rin", + en_R30x: "a4-rin", + en_R30y: "a4-rin", + en_R30z: "a4-rin", + en_R31: "a4-rin", + en_R32: "a4-rin", + en_R32a: "a4-rin", + en_R32b: "a4-rin", + en_R33: "a4-rin", + en_R34: "a4-rin", + en_R35: "a4-rin", + en_R36: "a4-rin", + en_R36a: "a4-rin", + en_R36x: "a4-rin", + en_R37: "a4-rin", + en_R38: "a4-rin", + en_R39: "a4-rin", + en_R3: "a2-rin", + en_R40: "a4-rin", + en_R41: "a4-rin", + en_R41h: "a4-rin", + en_R42: "a4-rin", + en_R4: "a2-rin", + en_R5: "a2-rin", + en_R6: "a2-rin", + en_R6a: "a2-rin", + en_R6b: "a2-rin", + en_R6c: "a2-rin", + en_R7: "a2-rin", + en_R8: "a2-rin", + en_R9: "a2-rin", + en_R9a: "a2-rin", + en_R9b: "a2-rin", + en_R9c: "a2-rin", + en_S10: "a2-shizune", + en_S11: "a2-shizune", + en_S12: "a2-shizune", + en_S13: "a2-shizune", + en_S14: "a2-shizune", + en_S15: "a2-shizune", + en_S16: "a2-shizune", + en_S17: "a3-shizune", + en_S17a: "a3-shizune", + en_S17x: "a3-shizune", + en_S18: "a3-shizune", + en_S19: "a3-shizune", + en_S20: "a3-shizune", + en_S21: "a3-shizune", + en_S22: "a3-shizune", + en_S22a: "a3-shizune", + en_S22b: "a3-shizune", + en_S22c: "a3-shizune", + en_S22h: "a3-shizune", + en_S22x: "a3-shizune", + en_S23: "a3-shizune", + en_S23a: "a3-shizune", + en_S23x: "a3-shizune", + en_S24: "a3-shizune", + en_S25: "a3-shizune", + en_S26: "a3-shizune", + en_S26a: "a3-shizune", + en_S26b: "a3-shizune", + en_S26c: "a3-shizune", + en_S27: "a3-shizune", + en_S28: "a3-shizune", + en_S28a: "a3-shizune", + en_S28b: "a3-shizune", + en_S28h: "a3-shizune", + en_S29: "a3-shizune", + en_S29a: "a3-shizune", + en_S29b: "a3-shizune", + en_S29x: "a3-shizune", + en_S29xa: "a3-shizune", + en_S29xb: "a3-shizune", + en_S29xba: "a3-shizune", + en_S29xbb: "a3-shizune", + en_S29xbc: "a3-shizune", + en_S29y: "a3-shizune", + en_S29ya: "a3-shizune", + en_S29yb: "a3-shizune", + en_S30: "a4-shizune", + en_S31: "a4-shizune", + en_S32: "a4-shizune", + en_S33: "a4-shizune", + en_S34: "a4-shizune", + en_S34a: "a4-shizune", + en_S34b: "a4-shizune", + en_S34c: "a4-shizune", + en_S35: "a4-shizune", + en_S35h: "a4-shizune", + en_S35x: "a4-shizune", + en_S36: "a4-shizune", + en_S37: "a4-shizune", + en_S38: "a4-shizune", + en_S39: "a4-shizune", + en_S40: "a4-shizune", + en_S8: "a2-shizune", + en_S9: "a2-shizune", + en_choice2A27: "a1-friday", + en_choiceA10a: "a1-wednesday", + en_choiceA10b: "a1-wednesday", + en_choiceA10c: "a1-wednesday", + en_choiceA17: "a1-wednesday", + en_choiceA1: "a1-monday", + en_choiceA21: "a1-thursday", + en_choiceA25: "a1-friday", + en_choiceA26: "a1-friday", + en_choiceA27: "a1-friday", + en_choiceA30: "a1-friday", + en_choiceA33: "a1-saturday", + en_choiceA35: "a1-saturday", + en_choiceA3: "a1-monday", + en_choiceA6: "a1-tuesday", + en_choiceA8: "a1-tuesday", + en_choiceA9: "a1-tuesday", + en_choiceE11: "a2-emi", + en_choiceE17: "a3-emi", + en_choiceE24: "a3-emi", + en_choiceE25: "a3-emi", + en_choiceE26: "a3-emi", + en_choiceE27: "a3-emi", + en_choiceH12: "a3-hanako", + en_choiceH20: "a3-hanako", + en_choiceH22: "a4-hanako", + en_choiceH4: "a2-hanako", + en_choiceL10_1: "a3-lilly", + en_choiceL10_2: "a3-lilly", + en_choiceL15: "a3-lilly", + en_choiceL20: "a3-lilly", + en_choiceL24: "a4-lilly", + en_choiceL6_1: "a2-lilly", + en_choiceR11aaa: "a2-rin", + en_choiceR11aab: "a2-rin", + en_choiceR11aba: "a2-rin", + en_choiceR11abb: "a2-rin", + en_choiceR11baa: "a2-rin", + en_choiceR11bab: "a2-rin", + en_choiceR11bba: "a2-rin", + en_choiceR11bbb: "a2-rin", + en_choiceR16: "a2-rin", + en_choiceR20: "a3-rin", + en_choiceR21: "a3-rin", + en_choiceR26: "a3-rin", + en_choiceR28_1: "a3-rin", + en_choiceR28_2: "a3-rin", + en_choiceR2: "a2-rin", + en_choiceR32: "a4-rin", + en_choiceR6: "a2-rin", + en_choiceR9: "a2-rin", + en_choiceS28: "a3-shizune", + fr_A10: "a1-wednesday_FR", + fr_A10a: "a1-wednesday_FR", + fr_A10b: "a1-wednesday_FR", + fr_A10c: "a1-wednesday_FR", + fr_A11: "a1-wednesday_FR", + fr_A11a: "a1-wednesday_FR", + fr_A11b: "a1-wednesday_FR", + fr_A11c: "a1-wednesday_FR", + fr_A11d: "a1-wednesday_FR", + fr_A11x: "a1-wednesday_FR", + fr_A11y: "a1-wednesday_FR", + fr_A12: "a1-wednesday_FR", + fr_A13: "a1-wednesday_FR", + fr_A15: "a1-wednesday_FR", + fr_A16: "a1-wednesday_FR", + fr_A17: "a1-wednesday_FR", + fr_A17a: "a1-wednesday_FR", + fr_A17b: "a1-wednesday_FR", + fr_A17c: "a1-wednesday_FR", + fr_A18: "a1-wednesday_FR", + fr_A19: "a1-thursday_FR", + fr_A19a: "a1-thursday_FR", + fr_A19b: "a1-thursday_FR", + fr_A19c: "a1-thursday_FR", + fr_A19d: "a1-thursday_FR", + fr_A19e: "a1-thursday_FR", + fr_A19f: "a1-thursday_FR", + fr_A19g: "a1-thursday_FR", + fr_A19h: "a1-thursday_FR", + fr_A19i: "a1-thursday_FR", + fr_A19j: "a1-thursday_FR", + fr_A1: "a1-monday_FR", + fr_A1a: "a1-monday_FR", + fr_A1b: "a1-monday_FR", + fr_A1c: "a1-monday_FR", + fr_A20: "a1-thursday_FR", + fr_A21: "a1-thursday_FR", + fr_A21a: "a1-thursday_FR", + fr_A21b: "a1-thursday_FR", + fr_A21c: "a1-thursday_FR", + fr_A21d: "a1-thursday_FR", + fr_A22: "a1-thursday_FR", + fr_A22a: "a1-thursday_FR", + fr_A22b: "a1-thursday_FR", + fr_A23: "a1-thursday_FR", + fr_A23a: "a1-thursday_FR", + fr_A24: "a1-thursday_FR", + fr_A24a: "a1-thursday_FR", + fr_A24b: "a1-thursday_FR", + fr_A24c: "a1-thursday_FR", + fr_A24d: "a1-thursday_FR", + fr_A24e: "a1-thursday_FR", + fr_A25: "a1-friday_FR", + fr_A25a: "a1-friday_FR", + fr_A25b: "a1-friday_FR", + fr_A26: "a1-friday_FR", + fr_A26a: "a1-friday_FR", + fr_A26b: "a1-friday_FR", + fr_A26c: "a1-friday_FR", + fr_A26d: "a1-friday_FR", + fr_A26e: "a1-friday_FR", + fr_A27: "a1-friday_FR", + fr_A27a: "a1-friday_FR", + fr_A27b: "a1-friday_FR", + fr_A27c: "a1-friday_FR", + fr_A27d: "a1-friday_FR", + fr_A27e: "a1-friday_FR", + fr_A27f: "a1-friday_FR", + fr_A27h: "a1-friday_FR", + fr_A27i: "a1-friday_FR", + fr_A28: "a1-friday_FR", + fr_A28a: "a1-friday_FR", + fr_A28b: "a1-friday_FR", + fr_A29: "a1-friday_FR", + fr_A29a: "a1-friday_FR", + fr_A29b: "a1-friday_FR", + fr_A29c: "a1-friday_FR", + fr_A29x: "a1-friday_FR", + fr_A2: "a1-monday_FR", + fr_A2a: "a1-monday_FR", + fr_A2b: "a1-monday_FR", + fr_A2c: "a1-monday_FR", + fr_A2d: "a1-monday_FR", + fr_A2e: "a1-monday_FR", + fr_A2f: "a1-monday_FR", + fr_A30: "a1-friday_FR", + fr_A30a: "a1-friday_FR", + fr_A30b: "a1-friday_FR", + fr_A30c: "a1-friday_FR", + fr_A30d: "a1-friday_FR", + fr_A31: "a1-saturday_FR", + fr_A31b: "a1-saturday_FR", + fr_A31c: "a1-saturday_FR", + fr_A31d: "a1-saturday_FR", + fr_A31e: "a1-saturday_FR", + fr_A32: "a1-saturday_FR", + fr_A32a: "a1-saturday_FR", + fr_A32b: "a1-saturday_FR", + fr_A33: "a1-saturday_FR", + fr_A33a: "a1-saturday_FR", + fr_A33b: "a1-saturday_FR", + fr_A34: "a1-saturday_FR", + fr_A34a: "a1-saturday_FR", + fr_A34b: "a1-saturday_FR", + fr_A35: "a1-saturday_FR", + fr_A35a: "a1-saturday_FR", + fr_A36: "a1-saturday_FR", + fr_A37: "a1-saturday_FR", + fr_A38: "a1-sunday_FR", + fr_A38a: "a1-sunday_FR", + fr_A38b: "a1-sunday_FR", + fr_A38c: "a1-sunday_FR", + fr_A38d: "a1-sunday_FR", + fr_A38e: "a1-sunday_FR", + fr_A39: "a1-sunday_FR", + fr_A3: "a1-monday_FR", + fr_A3a: "a1-monday_FR", + fr_A3b: "a1-monday_FR", + fr_A3c: "a1-monday_FR", + fr_A3d: "a1-monday_FR", + fr_A40: "a1-sunday_FR", + fr_A41a: "a1-sunday_FR", + fr_A41b: "a1-sunday_FR", + fr_A42: "a1-sunday_FR", + fr_A43: "a1-sunday_FR", + fr_A44: "a1-sunday_FR", + fr_A4: "a1-monday_FR", + fr_A5: "a1-tuesday_FR", + fr_A6: "a1-tuesday_FR", + fr_A6a: "a1-tuesday_FR", + fr_A6b: "a1-tuesday_FR", + fr_A6c: "a1-tuesday_FR", + fr_A7: "a1-tuesday_FR", + fr_A8: "a1-tuesday_FR", + fr_A8a: "a1-tuesday_FR", + fr_A8aa: "a1-tuesday_FR", + fr_A8ab: "a1-tuesday_FR", + fr_A8b: "a1-tuesday_FR", + fr_A8c: "a1-tuesday_FR", + fr_A8d: "a1-tuesday_FR", + fr_A8e: "a1-tuesday_FR", + fr_A8f: "a1-tuesday_FR", + fr_A9: "a1-tuesday_FR", + fr_A9a: "a1-tuesday_FR", + fr_A9b: "a1-tuesday_FR", + fr_A9c: "a1-tuesday_FR", + fr_E10: "a2-emi_FR", + fr_E11a: "a2-emi_FR", + fr_E11b: "a2-emi_FR", + fr_E11c: "a2-emi_FR", + fr_E11d: "a2-emi_FR", + fr_E11x: "a2-emi_FR", + fr_E11y: "a2-emi_FR", + fr_E11z: "a2-emi_FR", + fr_E12a: "a2-emi_FR", + fr_E12b: "a2-emi_FR", + fr_E12c: "a2-emi_FR", + fr_E12d: "a2-emi_FR", + fr_E13: "a2-emi_FR", + fr_E14: "a2-emi_FR", + fr_E15: "a2-emi_FR", + fr_E16: "a3-emi_FR", + fr_E17: "a3-emi_FR", + fr_E17a: "a3-emi_FR", + fr_E17b: "a3-emi_FR", + fr_E17x: "a3-emi_FR", + fr_E18: "a3-emi_FR", + fr_E18a: "a3-emi_FR", + fr_E18b: "a3-emi_FR", + fr_E18x: "a3-emi_FR", + fr_E19: "a3-emi_FR", + fr_E20: "a3-emi_FR", + fr_E20h: "a3-emi_FR", + fr_E20x: "a3-emi_FR", + fr_E21: "a3-emi_FR", + fr_E21h: "a3-emi_FR", + fr_E21x: "a3-emi_FR", + fr_E22: "a3-emi_FR", + fr_E23: "a3-emi_FR", + fr_E24: "a3-emi_FR", + fr_E24a: "a3-emi_FR", + fr_E24b: "a3-emi_FR", + fr_E24c: "a3-emi_FR", + fr_E25: "a3-emi_FR", + fr_E25a: "a3-emi_FR", + fr_E25b: "a3-emi_FR", + fr_E25c: "a3-emi_FR", + fr_E26: "a3-emi_FR", + fr_E26a: "a3-emi_FR", + fr_E26b: "a3-emi_FR", + fr_E26c: "a3-emi_FR", + fr_E26d: "a3-emi_FR", + fr_E26e: "a3-emi_FR", + fr_E26f: "a3-emi_FR", + fr_E27: "a3-emi_FR", + fr_E27a: "a3-emi_FR", + fr_E27b: "a3-emi_FR", + fr_E28: "a4-emi_FR", + fr_E29: "a4-emi_FR", + fr_E30: "a4-emi_FR", + fr_E30a: "a4-emi_FR", + fr_E30b: "a4-emi_FR", + fr_E30c: "a4-emi_FR", + fr_E30d: "a4-emi_FR", + fr_E30e: "a4-emi_FR", + fr_E31: "a4-emi_FR", + fr_E31h: "a4-emi_FR", + fr_E31x: "a4-emi_FR", + fr_E32: "a4-emi_FR", + fr_E3: "a2-emi_FR", + fr_E4: "a2-emi_FR", + fr_E5: "a2-emi_FR", + fr_E6: "a2-emi_FR", + fr_E7: "a2-emi_FR", + fr_E8: "a2-emi_FR", + fr_E9: "a2-emi_FR", + fr_H10: "a2-hanako_FR", + fr_H11: "a3-hanako_FR", + fr_H12: "a3-hanako_FR", + fr_H12a: "a3-hanako_FR", + fr_H12b: "a3-hanako_FR", + fr_H12c: "a3-hanako_FR", + fr_H13: "a3-hanako_FR", + fr_H14: "a3-hanako_FR", + fr_H15: "a3-hanako_FR", + fr_H16: "a3-hanako_FR", + fr_H17: "a3-hanako_FR", + fr_H18: "a3-hanako_FR", + fr_H19: "a3-hanako_FR", + fr_H20: "a3-hanako_FR", + fr_H20_1: "a3-hanako_FR", + fr_H20_2: "a3-hanako_FR", + fr_H21: "a4-hanako_FR", + fr_H22: "a4-hanako_FR", + fr_H22a: "a4-hanako_FR", + fr_H22b: "a4-hanako_FR", + fr_H22c: "a4-hanako_FR", + fr_H23: "a4-hanako_FR", + fr_H24: "a4-hanako_FR", + fr_H25: "a4-hanako_FR", + fr_H25a: "a4-hanako_FR", + fr_H25c: "a4-hanako_FR", + fr_H26: "a4-hanako_FR", + fr_H27: "a4-hanako_FR", + fr_H28: "a4-hanako_FR", + fr_H29: "a4-hanako_FR", + fr_H29h: "a4-hanako_FR", + fr_H29x: "a4-hanako_FR", + fr_H2: "a2-hanako_FR", + fr_H30: "a4-hanako_FR", + fr_H31: "a4-hanako_FR", + fr_H3: "a2-hanako_FR", + fr_H4: "a2-hanako_FR", + fr_H5_1: "a2-hanako_FR", + fr_H5_2: "a2-hanako_FR", + fr_H6: "a2-hanako_FR", + fr_H7: "a2-hanako_FR", + fr_H7a: "a2-hanako_FR", + fr_H7b: "a2-hanako_FR", + fr_H7c: "a2-hanako_FR", + fr_H8: "a2-hanako_FR", + fr_H9: "a2-hanako_FR", + fr_L10: "a3-lilly_FR", + fr_L10a: "a3-lilly_FR", + fr_L10b: "a3-lilly_FR", + fr_L10c: "a3-lilly_FR", + fr_L10d: "a3-lilly_FR", + fr_L10e: "a3-lilly_FR", + fr_L10f: "a3-lilly_FR", + fr_L11: "a3-lilly_FR", + fr_L12: "a3-lilly_FR", + fr_L13: "a3-lilly_FR", + fr_L14: "a3-lilly_FR", + fr_L15: "a3-lilly_FR", + fr_L15a: "a3-lilly_FR", + fr_L15b: "a3-lilly_FR", + fr_L15c: "a3-lilly_FR", + fr_L16: "a3-lilly_FR", + fr_L17: "a3-lilly_FR", + fr_L17h: "a3-lilly_FR", + fr_L18: "a3-lilly_FR", + fr_L19: "a3-lilly_FR", + fr_L19h: "a3-lilly_FR", + fr_L1: "a2-lilly_FR", + fr_L20: "a3-lilly_FR", + fr_L20a: "a3-lilly_FR", + fr_L20b: "a3-lilly_FR", + fr_L20c: "a3-lilly_FR", + fr_L21: "a4-lilly_FR", + fr_L22: "a4-lilly_FR", + fr_L23: "a4-lilly_FR", + fr_L24: "a4-lilly_FR", + fr_L24a: "a4-lilly_FR", + fr_L24b: "a4-lilly_FR", + fr_L24c: "a4-lilly_FR", + fr_L25: "a4-lilly_FR", + fr_L26: "a4-lilly_FR", + fr_L26h: "a4-lilly_FR", + fr_L26x: "a4-lilly_FR", + fr_L27: "a4-lilly_FR", + fr_L28: "a4-lilly_FR", + fr_L29: "a4-lilly_FR", + fr_L2: "a2-lilly_FR", + fr_L30: "a4-lilly_FR", + fr_L31: "a4-lilly_FR", + fr_L32: "a4-lilly_FR", + fr_L33: "a4-lilly_FR", + fr_L3: "a2-lilly_FR", + fr_L4: "a2-lilly_FR", + fr_L5: "a2-lilly_FR", + fr_L6a: "a2-lilly_FR", + fr_L6b: "a2-lilly_FR", + fr_L6c: "a2-lilly_FR", + fr_L6i: "a2-lilly_FR", + fr_L7: "a2-lilly_FR", + fr_L8: "a2-lilly_FR", + fr_L9: "a3-lilly_FR", + fr_NOP1: "a1-monday_FR", + fr_NOP2: "a1-monday_FR", + fr_R10: "a2-rin_FR", + fr_R11: "a2-rin_FR", + fr_R11a: "a2-rin_FR", + fr_R11b: "a2-rin_FR", + fr_R11c: "a2-rin_FR", + fr_R11d: "a2-rin_FR", + fr_R11e: "a2-rin_FR", + fr_R11f: "a2-rin_FR", + fr_R11g: "a2-rin_FR", + fr_R11h: "a2-rin_FR", + fr_R11i: "a2-rin_FR", + fr_R11j: "a2-rin_FR", + fr_R12: "a2-rin_FR", + fr_R12a: "a2-rin_FR", + fr_R12b: "a2-rin_FR", + fr_R12c: "a2-rin_FR", + fr_R12d: "a2-rin_FR", + fr_R12e: "a2-rin_FR", + fr_R12f: "a2-rin_FR", + fr_R13: "a2-rin_FR", + fr_R14: "a2-rin_FR", + fr_R15: "a2-rin_FR", + fr_R16: "a2-rin_FR", + fr_R16a: "a2-rin_FR", + fr_R16b: "a2-rin_FR", + fr_R16c: "a2-rin_FR", + fr_R16d: "a2-rin_FR", + fr_R16e: "a2-rin_FR", + fr_R17: "a3-rin_FR", + fr_R18: "a3-rin_FR", + fr_R19: "a3-rin_FR", + fr_R19a: "a3-rin_FR", + fr_R19b: "a3-rin_FR", + fr_R1: "a2-rin_FR", + fr_R20: "a3-rin_FR", + fr_R20a: "a3-rin_FR", + fr_R20b: "a3-rin_FR", + fr_R20c: "a3-rin_FR", + fr_R21: "a3-rin_FR", + fr_R21a: "a3-rin_FR", + fr_R21b: "a3-rin_FR", + fr_R21c: "a3-rin_FR", + fr_R22: "a3-rin_FR", + fr_R23: "a3-rin_FR", + fr_R23_2: "a3-rin_FR", + fr_R24: "a3-rin_FR", + fr_R25: "a3-rin_FR", + fr_R26: "a3-rin_FR", + fr_R26a: "a3-rin_FR", + fr_R26b: "a3-rin_FR", + fr_R26c: "a3-rin_FR", + fr_R27: "a3-rin_FR", + fr_R27h: "a3-rin_FR", + fr_R27x: "a3-rin_FR", + fr_R28: "a3-rin_FR", + fr_R28a: "a3-rin_FR", + fr_R28b: "a3-rin_FR", + fr_R28c: "a3-rin_FR", + fr_R29: "a3-rin_FR", + fr_R2: "a2-rin_FR", + fr_R2a: "a2-rin_FR", + fr_R2b: "a2-rin_FR", + fr_R2c: "a2-rin_FR", + fr_R30: "a4-rin_FR", + fr_R30x: "a4-rin_FR", + fr_R30y: "a4-rin_FR", + fr_R30z: "a4-rin_FR", + fr_R31: "a4-rin_FR", + fr_R32: "a4-rin_FR", + fr_R32a: "a4-rin_FR", + fr_R32b: "a4-rin_FR", + fr_R33: "a4-rin_FR", + fr_R34: "a4-rin_FR", + fr_R35: "a4-rin_FR", + fr_R36: "a4-rin_FR", + fr_R36a: "a4-rin_FR", + fr_R36x: "a4-rin_FR", + fr_R37: "a4-rin_FR", + fr_R38: "a4-rin_FR", + fr_R39: "a4-rin_FR", + fr_R3: "a2-rin_FR", + fr_R40: "a4-rin_FR", + fr_R41: "a4-rin_FR", + fr_R41h: "a4-rin_FR", + fr_R42: "a4-rin_FR", + fr_R4: "a2-rin_FR", + fr_R5: "a2-rin_FR", + fr_R6: "a2-rin_FR", + fr_R6a: "a2-rin_FR", + fr_R6b: "a2-rin_FR", + fr_R6c: "a2-rin_FR", + fr_R7: "a2-rin_FR", + fr_R8: "a2-rin_FR", + fr_R9: "a2-rin_FR", + fr_R9a: "a2-rin_FR", + fr_R9b: "a2-rin_FR", + fr_R9c: "a2-rin_FR", + fr_S10: "a2-shizune_FR", + fr_S11: "a2-shizune_FR", + fr_S12: "a2-shizune_FR", + fr_S13: "a2-shizune_FR", + fr_S14: "a2-shizune_FR", + fr_S15: "a2-shizune_FR", + fr_S16: "a2-shizune_FR", + fr_S17: "a3-shizune_FR", + fr_S17a: "a3-shizune_FR", + fr_S17x: "a3-shizune_FR", + fr_S18: "a3-shizune_FR", + fr_S19: "a3-shizune_FR", + fr_S20: "a3-shizune_FR", + fr_S21: "a3-shizune_FR", + fr_S22: "a3-shizune_FR", + fr_S22a: "a3-shizune_FR", + fr_S22b: "a3-shizune_FR", + fr_S22c: "a3-shizune_FR", + fr_S22h: "a3-shizune_FR", + fr_S22x: "a3-shizune_FR", + fr_S23: "a3-shizune_FR", + fr_S23a: "a3-shizune_FR", + fr_S23x: "a3-shizune_FR", + fr_S24: "a3-shizune_FR", + fr_S25: "a3-shizune_FR", + fr_S26: "a3-shizune_FR", + fr_S26a: "a3-shizune_FR", + fr_S26b: "a3-shizune_FR", + fr_S26c: "a3-shizune_FR", + fr_S27: "a3-shizune_FR", + fr_S28: "a3-shizune_FR", + fr_S28a: "a3-shizune_FR", + fr_S28b: "a3-shizune_FR", + fr_S28h: "a3-shizune_FR", + fr_S29: "a3-shizune_FR", + fr_S29a: "a3-shizune_FR", + fr_S29b: "a3-shizune_FR", + fr_S29x: "a3-shizune_FR", + fr_S29xa: "a3-shizune_FR", + fr_S29xb: "a3-shizune_FR", + fr_S29xba: "a3-shizune_FR", + fr_S29xbb: "a3-shizune_FR", + fr_S29xbc: "a3-shizune_FR", + fr_S29y: "a3-shizune_FR", + fr_S29ya: "a3-shizune_FR", + fr_S29yb: "a3-shizune_FR", + fr_S30: "a4-shizune_FR", + fr_S31: "a4-shizune_FR", + fr_S32: "a4-shizune_FR", + fr_S33: "a4-shizune_FR", + fr_S34: "a4-shizune_FR", + fr_S34a: "a4-shizune_FR", + fr_S34b: "a4-shizune_FR", + fr_S34c: "a4-shizune_FR", + fr_S35: "a4-shizune_FR", + fr_S35h: "a4-shizune_FR", + fr_S35x: "a4-shizune_FR", + fr_S36: "a4-shizune_FR", + fr_S37: "a4-shizune_FR", + fr_S38: "a4-shizune_FR", + fr_S39: "a4-shizune_FR", + fr_S40: "a4-shizune_FR", + fr_S8: "a2-shizune_FR", + fr_S9: "a2-shizune_FR", + fr_choice2A27: "a1-friday_FR", + fr_choiceA10a: "a1-wednesday_FR", + fr_choiceA10b: "a1-wednesday_FR", + fr_choiceA10c: "a1-wednesday_FR", + fr_choiceA17: "a1-wednesday_FR", + fr_choiceA1: "a1-monday_FR", + fr_choiceA21: "a1-thursday_FR", + fr_choiceA25: "a1-friday_FR", + fr_choiceA26: "a1-friday_FR", + fr_choiceA27: "a1-friday_FR", + fr_choiceA30: "a1-friday_FR", + fr_choiceA33: "a1-saturday_FR", + fr_choiceA35: "a1-saturday_FR", + fr_choiceA3: "a1-monday_FR", + fr_choiceA6: "a1-tuesday_FR", + fr_choiceA8: "a1-tuesday_FR", + fr_choiceA9: "a1-tuesday_FR", + fr_choiceE11: "a2-emi_FR", + fr_choiceE17: "a3-emi_FR", + fr_choiceE24: "a3-emi_FR", + fr_choiceE25: "a3-emi_FR", + fr_choiceE26: "a3-emi_FR", + fr_choiceE27: "a3-emi_FR", + fr_choiceH12: "a3-hanako_FR", + fr_choiceH20: "a3-hanako_FR", + fr_choiceH22: "a4-hanako_FR", + fr_choiceH4: "a2-hanako_FR", + fr_choiceL10_1: "a3-lilly_FR", + fr_choiceL10_2: "a3-lilly_FR", + fr_choiceL15: "a3-lilly_FR", + fr_choiceL20: "a3-lilly_FR", + fr_choiceL24: "a4-lilly_FR", + fr_choiceL6_1: "a2-lilly_FR", + fr_choiceR11aaa: "a2-rin_FR", + fr_choiceR11aab: "a2-rin_FR", + fr_choiceR11aba: "a2-rin_FR", + fr_choiceR11abb: "a2-rin_FR", + fr_choiceR11baa: "a2-rin_FR", + fr_choiceR11bab: "a2-rin_FR", + fr_choiceR11bba: "a2-rin_FR", + fr_choiceR11bbb: "a2-rin_FR", + fr_choiceR16: "a2-rin_FR", + fr_choiceR20: "a3-rin_FR", + fr_choiceR21: "a3-rin_FR", + fr_choiceR26: "a3-rin_FR", + fr_choiceR28_1: "a3-rin_FR", + fr_choiceR28_2: "a3-rin_FR", + fr_choiceR2: "a2-rin_FR", + fr_choiceR32: "a4-rin_FR", + fr_choiceR6: "a2-rin_FR", + fr_choiceR9: "a2-rin_FR", + fr_choiceS28: "a3-shizune_FR" +} -- cgit v1.2.3-54-g00ecf