From 47097d9e8fc3618410e4c2bc5cc32169fc2b0a0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Tue, 5 Nov 2013 11:20:35 +0100 Subject: [PATCH] Update ace editor Using https://github.com/ajaxorg/ace-builds/commit/45d3068aa7190f08396bcfe134e505fe144c1ccb --- .../erp5_ace_editor/ace/ace.js.xml | 2569 +++-- .../erp5_ace_editor/ace/ext-chromevox.js.xml | 581 ++ .../ace/ext-elastic_tabstops_lite.js.xml | 2 +- .../erp5_ace_editor/ace/ext-emmet.js.xml | 900 +- .../ace/ext-keybinding_menu.js.xml | 6 +- .../ace/ext-language_tools.js.xml | 1664 +++ .../erp5_ace_editor/ace/ext-modelist.js.xml | 43 +- .../erp5_ace_editor/ace/ext-old_ie.js.xml | 543 + .../erp5_ace_editor/ace/ext-options.js.xml | 2 +- .../erp5_ace_editor/ace/ext-searchbox.js.xml | 77 +- .../ace/ext-settings_menu.js.xml | 45 +- .../erp5_ace_editor/ace/ext-spellcheck.js.xml | 7 +- .../erp5_ace_editor/ace/ext-split.js.xml | 315 + .../ace/ext-static_highlight.js.xml | 74 +- .../erp5_ace_editor/ace/ext-statusbar.js.xml | 2 +- .../erp5_ace_editor/ace/ext-textarea.js.xml | 36 +- .../erp5_ace_editor/ace/ext-themelist.js.xml | 4 +- .../erp5_ace_editor/ace/ext-whitespace.js.xml | 22 +- .../ace/keybinding-emacs.js.xml | 10 +- .../erp5_ace_editor/ace/keybinding-vim.js.xml | 51 +- .../erp5_ace_editor/ace/mode-abap.js.xml | 6 +- .../ace/mode-actionscript.js.xml | 7 +- .../erp5_ace_editor/ace/mode-ada.js.xml | 6 +- .../erp5_ace_editor/ace/mode-asciidoc.js.xml | 8 +- .../ace/mode-assembly_x86.js.xml | 7 +- .../ace/mode-autohotkey.js.xml | 7 +- .../erp5_ace_editor/ace/mode-batchfile.js.xml | 10 +- .../erp5_ace_editor/ace/mode-c9search.js.xml | 6 +- .../erp5_ace_editor/ace/mode-c_cpp.js.xml | 10 +- .../erp5_ace_editor/ace/mode-clojure.js.xml | 8 +- .../erp5_ace_editor/ace/mode-cobol.js.xml | 6 +- .../erp5_ace_editor/ace/mode-coffee.js.xml | 8 +- .../ace/mode-coldfusion.js.xml | 587 +- .../erp5_ace_editor/ace/mode-csharp.js.xml | 124 +- .../erp5_ace_editor/ace/mode-css.js.xml | 181 +- .../erp5_ace_editor/ace/mode-curly.js.xml | 881 +- .../erp5_ace_editor/ace/mode-d.js.xml | 7 +- .../erp5_ace_editor/ace/mode-dart.js.xml | 20 +- .../erp5_ace_editor/ace/mode-diff.js.xml | 9 +- .../erp5_ace_editor/ace/mode-django.js.xml | 848 +- .../erp5_ace_editor/ace/mode-dot.js.xml | 9 +- .../erp5_ace_editor/ace/mode-ejs.js.xml | 861 +- .../erp5_ace_editor/ace/mode-erlang.js.xml | 12 +- .../erp5_ace_editor/ace/mode-forth.js.xml | 7 +- .../erp5_ace_editor/ace/mode-ftl.js.xml | 567 +- .../erp5_ace_editor/ace/mode-glsl.js.xml | 13 +- .../erp5_ace_editor/ace/mode-golang.js.xml | 69 +- .../erp5_ace_editor/ace/mode-groovy.js.xml | 28 +- .../erp5_ace_editor/ace/mode-haml.js.xml | 10 +- .../ace/mode-handlebars.js.xml | 2442 +++++ .../erp5_ace_editor/ace/mode-haskell.js.xml | 7 +- .../erp5_ace_editor/ace/mode-haxe.js.xml | 9 +- .../erp5_ace_editor/ace/mode-html.js.xml | 843 +- .../ace/mode-html_completions.js.xml | 353 + .../erp5_ace_editor/ace/mode-html_ruby.js.xml | 907 +- .../erp5_ace_editor/ace/mode-ini.js.xml | 189 +- .../erp5_ace_editor/ace/mode-jack.js.xml | 650 ++ .../erp5_ace_editor/ace/mode-jade.js.xml | 636 +- .../erp5_ace_editor/ace/mode-java.js.xml | 29 +- .../ace/mode-javascript.js.xml | 26 +- .../erp5_ace_editor/ace/mode-json.js.xml | 6 +- .../erp5_ace_editor/ace/mode-jsoniq.js.xml | 114 +- .../erp5_ace_editor/ace/mode-jsp.js.xml | 571 +- .../erp5_ace_editor/ace/mode-jsx.js.xml | 8 +- .../erp5_ace_editor/ace/mode-julia.js.xml | 7 +- .../erp5_ace_editor/ace/mode-latex.js.xml | 6 +- .../erp5_ace_editor/ace/mode-less.js.xml | 8 +- .../erp5_ace_editor/ace/mode-liquid.js.xml | 564 +- .../erp5_ace_editor/ace/mode-lisp.js.xml | 8 +- .../ace/mode-livescript.js.xml | 2 +- .../erp5_ace_editor/ace/mode-logiql.js.xml | 11 +- .../erp5_ace_editor/ace/mode-lsl.js.xml | 275 +- .../erp5_ace_editor/ace/mode-lua.js.xml | 19 +- .../erp5_ace_editor/ace/mode-luapage.js.xml | 898 +- .../erp5_ace_editor/ace/mode-lucene.js.xml | 2 +- .../erp5_ace_editor/ace/mode-makefile.js.xml | 38 +- .../erp5_ace_editor/ace/mode-markdown.js.xml | 995 +- .../erp5_ace_editor/ace/mode-matlab.js.xml | 6 +- .../erp5_ace_editor/ace/mode-mushcode.js.xml | 12 +- .../ace/mode-mushcode_high_rules.js.xml | 6 +- .../erp5_ace_editor/ace/mode-mysql.js.xml | 8 +- .../erp5_ace_editor/ace/mode-nix.js.xml | 930 ++ .../ace/mode-objectivec.js.xml | 8 +- .../erp5_ace_editor/ace/mode-ocaml.js.xml | 9 +- .../erp5_ace_editor/ace/mode-pascal.js.xml | 7 +- .../erp5_ace_editor/ace/mode-perl.js.xml | 17 +- .../erp5_ace_editor/ace/mode-pgsql.js.xml | 16 +- .../erp5_ace_editor/ace/mode-php.js.xml | 572 +- .../ace/mode-plain_text.js.xml | 94 + .../ace/mode-powershell.js.xml | 8 +- .../erp5_ace_editor/ace/mode-prolog.js.xml | 7 +- .../ace/mode-properties.js.xml | 9 +- .../erp5_ace_editor/ace/mode-protobuf.js.xml | 880 ++ .../erp5_ace_editor/ace/mode-python.js.xml | 10 +- .../erp5_ace_editor/ace/mode-r.js.xml | 36 +- .../erp5_ace_editor/ace/mode-rdoc.js.xml | 41 +- .../erp5_ace_editor/ace/mode-rhtml.js.xml | 884 +- .../erp5_ace_editor/ace/mode-ruby.js.xml | 8 +- .../erp5_ace_editor/ace/mode-rust.js.xml | 7 +- .../erp5_ace_editor/ace/mode-sass.js.xml | 6 +- .../erp5_ace_editor/ace/mode-scad.js.xml | 8 +- .../erp5_ace_editor/ace/mode-scala.js.xml | 28 +- .../erp5_ace_editor/ace/mode-scheme.js.xml | 8 +- .../erp5_ace_editor/ace/mode-scss.js.xml | 8 +- .../erp5_ace_editor/ace/mode-sh.js.xml | 36 +- .../erp5_ace_editor/ace/mode-sjs.js.xml | 1150 +++ .../erp5_ace_editor/ace/mode-snippets.js.xml | 13 +- .../ace/mode-soy_template.js.xml | 2715 +++++ .../erp5_ace_editor/ace/mode-space.js.xml | 203 + .../erp5_ace_editor/ace/mode-sql.js.xml | 6 +- .../erp5_ace_editor/ace/mode-stylus.js.xml | 183 +- .../erp5_ace_editor/ace/mode-svg.js.xml | 264 +- .../erp5_ace_editor/ace/mode-tcl.js.xml | 8 +- .../erp5_ace_editor/ace/mode-tex.js.xml | 38 +- .../erp5_ace_editor/ace/mode-text.js.xml | 2 +- .../erp5_ace_editor/ace/mode-textile.js.xml | 6 +- .../erp5_ace_editor/ace/mode-tmsnippet.js.xml | 2 +- .../erp5_ace_editor/ace/mode-toml.js.xml | 78 +- .../erp5_ace_editor/ace/mode-twig.js.xml | 603 +- .../ace/mode-typescript.js.xml | 29 +- .../erp5_ace_editor/ace/mode-vbscript.js.xml | 10 +- .../erp5_ace_editor/ace/mode-velocity.js.xml | 994 +- .../erp5_ace_editor/ace/mode-verilog.js.xml | 6 +- .../erp5_ace_editor/ace/mode-vhdl.js.xml | 182 + .../erp5_ace_editor/ace/mode-xml.js.xml | 213 +- .../erp5_ace_editor/ace/mode-xquery.js.xml | 114 +- .../erp5_ace_editor/ace/mode-yaml.js.xml | 8 +- .../erp5_ace_editor/ace/theme-ambiance.js.xml | 2 +- .../erp5_ace_editor/ace/theme-chaos.js.xml | 2 +- .../erp5_ace_editor/ace/theme-chrome.js.xml | 14 +- .../erp5_ace_editor/ace/theme-clouds.js.xml | 13 +- .../ace/theme-clouds_midnight.js.xml | 13 +- .../erp5_ace_editor/ace/theme-cobalt.js.xml | 17 +- .../ace/theme-crimson_editor.js.xml | 10 +- .../erp5_ace_editor/ace/theme-dawn.js.xml | 17 +- .../ace/theme-dreamweaver.js.xml | 14 +- .../erp5_ace_editor/ace/theme-eclipse.js.xml | 6 +- .../erp5_ace_editor/ace/theme-github.js.xml | 10 +- .../ace/theme-idle_fingers.js.xml | 16 +- .../erp5_ace_editor/ace/theme-kr.js.xml | 15 +- .../ace/theme-merbivore.js.xml | 13 +- .../ace/theme-merbivore_soft.js.xml | 13 +- .../ace/theme-mono_industrial.js.xml | 13 +- .../erp5_ace_editor/ace/theme-monokai.js.xml | 17 +- .../ace/theme-pastel_on_dark.js.xml | 13 +- .../ace/theme-solarized_dark.js.xml | 16 +- .../ace/theme-solarized_light.js.xml | 13 +- .../erp5_ace_editor/ace/theme-terminal.js.xml | 15 +- .../erp5_ace_editor/ace/theme-textmate.js.xml | 165 +- .../erp5_ace_editor/ace/theme-tomorrow.js.xml | 18 +- .../ace/theme-tomorrow_night.js.xml | 15 +- .../ace/theme-tomorrow_night_blue.js.xml | 15 +- .../ace/theme-tomorrow_night_bright.js.xml | 18 +- .../ace/theme-tomorrow_night_eighties.js.xml | 18 +- .../erp5_ace_editor/ace/theme-twilight.js.xml | 17 +- .../ace/theme-vibrant_ink.js.xml | 10 +- .../erp5_ace_editor/ace/theme-xcode.js.xml | 10 +- .../erp5_ace_editor/ace/worker-coffee.js.xml | 1064 +- .../erp5_ace_editor/ace/worker-css.js.xml | 412 +- .../ace/worker-javascript.js.xml | 8931 ++++++++++++----- .../erp5_ace_editor/ace/worker-json.js.xml | 409 +- .../erp5_ace_editor/ace/worker-lua.js.xml | 761 +- .../erp5_ace_editor/ace/worker-php.js.xml | 654 +- .../erp5_ace_editor/ace/worker-xquery.js.xml | 791 +- bt5/erp5_ace_editor/bt/change_log | 3 + bt5/erp5_ace_editor/bt/description | 2 +- bt5/erp5_ace_editor/bt/revision | 2 +- 167 files changed, 34761 insertions(+), 10210 deletions(-) create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-chromevox.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-language_tools.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-old_ie.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-split.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-handlebars.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html_completions.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jack.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-nix.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-plain_text.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-protobuf.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sjs.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-soy_template.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-space.js.xml create mode 100644 bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-vhdl.js.xml diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ace.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ace.js.xml index 0aeaff1686..c470867974 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ace.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ace.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155552.54</string> </value> + <value> <string>ts83646622.73</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>545508</int> </value> + <value> <int>580350</int> </value> </item> <item> <key> <string>title</string> </key> @@ -246,7 +246,7 @@ exports.edit = function(el) {\n var _id = el;\n var el = document.getElementById(_id);\n if (!el)\n - throw "ace.edit can\'t find div #" + _id;\n + throw new Error("ace.edit can\'t find div #" + _id);\n }\n \n if (el.env && el.env.editor instanceof Editor)\n @@ -1303,7 +1303,7 @@ exports.addListener = function(elem, type, callback) {\n }\n if (elem.attachEvent) {\n var wrapper = function() {\n - callback(window.event);\n + callback.call(elem, window.event);\n };\n callback._wrapper = wrapper;\n elem.attachEvent("on" + type, wrapper);\n @@ -1350,51 +1350,25 @@ exports.getButton = function(e) {\n }\n };\n \n -if (document.documentElement.setCapture) {\n - exports.capture = function(el, eventHandler, releaseCaptureHandler) {\n - var called = false;\n - function onReleaseCapture(e) {\n - eventHandler(e);\n +exports.capture = function(el, eventHandler, releaseCaptureHandler) {\n + function onMouseUp(e) {\n + eventHandler && eventHandler(e);\n + releaseCaptureHandler && releaseCaptureHandler(e);\n \n - if (!called) {\n - called = true;\n - releaseCaptureHandler(e);\n - }\n -\n - exports.removeListener(el, "mousemove", eventHandler);\n - exports.removeListener(el, "mouseup", onReleaseCapture);\n - exports.removeListener(el, "losecapture", onReleaseCapture);\n -\n - el.releaseCapture();\n - }\n -\n - exports.addListener(el, "mousemove", eventHandler);\n - exports.addListener(el, "mouseup", onReleaseCapture);\n - exports.addListener(el, "losecapture", onReleaseCapture);\n - el.setCapture();\n - };\n -}\n -else {\n - exports.capture = function(el, eventHandler, releaseCaptureHandler) {\n - function onMouseUp(e) {\n - eventHandler && eventHandler(e);\n - releaseCaptureHandler && releaseCaptureHandler(e);\n -\n - document.removeEventListener("mousemove", eventHandler, true);\n - document.removeEventListener("mouseup", onMouseUp, true);\n -\n - e.stopPropagation();\n - }\n + exports.removeListener(document, "mousemove", eventHandler, true);\n + exports.removeListener(document, "mouseup", onMouseUp, true);\n + exports.removeListener(document, "dragstart", onMouseUp, true);\n + }\n \n - document.addEventListener("mousemove", eventHandler, true);\n - document.addEventListener("mouseup", onMouseUp, true);\n - };\n -}\n + exports.addListener(document, "mousemove", eventHandler, true);\n + exports.addListener(document, "mouseup", onMouseUp, true);\n + exports.addListener(document, "dragstart", onMouseUp, true);\n +};\n \n exports.addMouseWheelListener = function(el, callback) {\n - var factor = 8;\n - var listener = function(e) {\n - if (e.wheelDelta !== undefined) {\n + if ("onmousewheel" in el) {\n + var factor = 8;\n + exports.addListener(el, "mousewheel", function(e) {\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n @@ -1402,8 +1376,16 @@ exports.addMouseWheelListener = function(el, callback) {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n - }\n - else {\n + callback(e);\n + });\n + } else if ("onwheel" in el) {\n + exports.addListener(el, "wheel", function(e) {\n + e.wheelX = (e.deltaX || 0) * 5;\n + e.wheelY = (e.deltaY || 0) * 5;\n + callback(e);\n + });\n + } else {\n + exports.addListener(el, "DOMMouseScroll", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n @@ -1411,11 +1393,9 @@ exports.addMouseWheelListener = function(el, callback) {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n - }\n - callback(e);\n - };\n - exports.addListener(el, "DOMMouseScroll", listener);\n - exports.addListener(el, "mousewheel", listener);\n + callback(e);\n + });\n + }\n };\n \n exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbackName) {\n @@ -1430,21 +1410,22 @@ exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbac exports.addListener(el, "mousedown", function(e) {\n if (exports.getButton(e) != 0) {\n clicks = 0;\n + } else if (e.detail > 1) {\n + clicks++;\n + if (clicks > 4)\n + clicks = 1;\n } else {\n - var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n -\n - if (!timer || isNewClick)\n - clicks = 0;\n -\n - clicks += 1;\n -\n - if (timer)\n - clearTimeout(timer)\n - timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\n + clicks = 1;\n }\n - if (clicks == 1) {\n - startX = e.clientX;\n - startY = e.clientY;\n + if (useragent.isIE) {\n + var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n + if (isNewClick) {\n + clicks = 1;\n + }\n + if (clicks == 1) {\n + startX = e.clientX;\n + startY = e.clientY;\n + }\n }\n \n eventHandler[callbackName]("mousedown", e);\n @@ -1477,6 +1458,29 @@ function normalizeCommandKeys(callback, e, keyCode) {\n | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n }\n \n + if (!useragent.isMac && pressedKeys) {\n + if (pressedKeys[91] || pressedKeys[92])\n + hashId |= 8;\n + if (pressedKeys.altGr) {\n + if ((3 & hashId) != 3)\n + pressedKeys.altGr = 0\n + else\n + return;\n + }\n + if (keyCode === 18 || keyCode === 17) {\n + var location = e.location || e.keyLocation;\n + if (keyCode === 17 && location === 1) {\n + ts = e.timeStamp;\n + } else if (keyCode === 18 && hashId === 3 && location === 2) {\n + var dt = -ts;\n + ts = e.timeStamp;\n + dt += ts;\n + if (dt < 3)\n + pressedKeys.altGr = true;\n + }\n + }\n + }\n + \n if (keyCode in keys.MODIFIER_KEYS) {\n switch (keys.MODIFIER_KEYS[keyCode]) {\n case "Alt":\n @@ -1495,19 +1499,28 @@ function normalizeCommandKeys(callback, e, keyCode) {\n keyCode = 0;\n }\n \n - if (!useragent.isMac && pressedKeys[91] || pressedKeys[92])\n - hashId |= 8;\n -\n - if (hashId & 8 && (keyCode == 91 || keyCode == 93)) {\n + if (hashId & 8 && (keyCode === 91 || keyCode === 93)) {\n keyCode = 0;\n }\n + \n + if (!hashId && keyCode === 13) {\n + if (e.location || e.keyLocation === 3) {\n + callback(e, hashId, -keyCode)\n + if (e.defaultPrevented)\n + return;\n + }\n + }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n + \n + \n + \n return callback(e, hashId, keyCode);\n }\n \n -var pressedKeys = Object.create(null);\n +var pressedKeys = null;\n +var ts = 0;\n exports.addCommandKeyListener = function(el, callback) {\n var addListener = exports.addListener;\n if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) {\n @@ -1539,9 +1552,12 @@ exports.addCommandKeyListener = function(el, callback) {\n pressedKeys[e.keyCode] = null;\n });\n \n - addListener(el, "focus", function(e) {\n + if (!pressedKeys) {\n pressedKeys = Object.create(null);\n - });\n + addListener(window, "focus", function(e) {\n + pressedKeys = Object.create(null);\n + });\n + }\n }\n };\n \n @@ -1619,6 +1635,7 @@ var Keys = (function() {\n 103: "Numpad7",\n 104: "Numpad8",\n 105: "Numpad9",\n + \'-13\': "NumpadEnter",\n 112: "F1",\n 113: "F2",\n 114: "F3",\n @@ -1773,6 +1790,20 @@ var Editor = function(renderer, session) {\n this.$search = new Search().set({\n wrap: true\n });\n +\n + this.$historyTracker = this.$historyTracker.bind(this);\n + this.commands.on("exec", this.$historyTracker);\n +\n + this.$initOperationListeners();\n + \n + this._$emitInputEvent = lang.delayedCall(function() {\n + this._signal("input", {});\n + this.session.bgTokenizer && this.session.bgTokenizer.scheduleStart();\n + }.bind(this));\n + \n + this.on("change", function(_, _self) {\n + _self._$emitInputEvent.schedule(31);\n + });\n \n this.setSession(session || new EditSession(""));\n config.resetOptions(this);\n @@ -1782,6 +1813,114 @@ var Editor = function(renderer, session) {\n (function(){\n \n oop.implement(this, EventEmitter);\n +\n + this.$initOperationListeners = function() {\n + function last(a) {return a[a.length - 1]};\n +\n + this.selections = [];\n + this.commands.on("exec", function(e) {\n + this.startOperation(e);\n +\n + var command = e.command;\n + if (command.group == "fileJump") {\n + var prev = this.prevOp;\n + if (!prev || prev.command.group != "fileJump") {\n + this.lastFileJumpPos = last(this.selections)\n + }\n + } else {\n + this.lastFileJumpPos = null;\n + }\n + }.bind(this), true);\n +\n + this.commands.on("afterExec", function(e) {\n + var command = e.command;\n +\n + if (command.group == "fileJump") {\n + if (this.lastFileJumpPos && !this.curOp.selectionChanged) {\n + this.selection.fromJSON(this.lastFileJumpPos);\n + return\n + }\n + }\n + this.endOperation(e);\n + }.bind(this), true);\n +\n + this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n +\n + this.on("change", function() {\n + this.curOp || this.startOperation();\n + this.curOp.docChanged = true;\n + }.bind(this), true);\n +\n + this.on("changeSelection", function() {\n + this.curOp || this.startOperation();\n + this.curOp.selectionChanged = true;\n + }.bind(this), true);\n + }\n +\n + this.curOp = null;\n + this.prevOp = {};\n + this.startOperation = function(commadEvent) {\n + if (this.curOp) {\n + if (!commadEvent || this.curOp.command)\n + return;\n + this.prevOp = this.curOp;\n + }\n + if (!commadEvent) {\n + this.previousCommand = null;\n + commadEvent = {};\n + }\n +\n + this.$opResetTimer.schedule();\n + this.curOp = {\n + command: commadEvent.command || {},\n + args: commadEvent.args\n + };\n +\n + this.selections.push(this.selection.toJSON());\n + };\n +\n + this.endOperation = function() {\n + if (this.curOp) {\n + this.prevOp = this.curOp;\n + this.curOp = null;\n + }\n + };\n +\n + this.$historyTracker = function(e) {\n + if (!this.$mergeUndoDeltas)\n + return;\n +\n +\n + var prev = this.prevOp;\n + var mergeableCommands = ["backspace", "del", "insertstring"];\n + var shouldMerge = prev.command && (e.command.name == prev.command.name);\n + if (e.command.name == "insertstring") {\n + var text = e.args;\n + if (this.mergeNextCommand === undefined)\n + this.mergeNextCommand = true;\n +\n + shouldMerge = shouldMerge\n + && this.mergeNextCommand // previous command allows to coalesce with\n + && (!/\\s/.test(text) || /\\s/.test(prev.args)) // previous insertion was of same type\n +\n + this.mergeNextCommand = true;\n + } else {\n + shouldMerge = shouldMerge\n + && mergeableCommands.indexOf(e.command.name) !== -1// the command is mergeable\n + }\n +\n + if (\n + this.$mergeUndoDeltas != "always"\n + && Date.now() - this.sequenceStartTime > 2000\n + ) {\n + shouldMerge = false; // the sequence is too long\n + }\n +\n + if (shouldMerge)\n + this.session.mergeUndoDeltas = true;\n + else if (mergeableCommands.indexOf(e.command.name) !== -1)\n + this.sequenceStartTime = Date.now();\n + };\n this.setKeyboardHandler = function(keyboardHandler) {\n if (!keyboardHandler) {\n this.keyBinding.setKeyboardHandler(null);\n @@ -1793,7 +1932,7 @@ var Editor = function(renderer, session) {\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n });\n } else {\n - delete this.$keybindingId;\n + this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n }\n };\n @@ -2046,6 +2185,8 @@ var Editor = function(renderer, session) {\n if (this.$highlightActiveLine) {\n if ((this.$selectionStyle != "line" || !this.selection.isMultiLine()))\n highlight = this.getCursorPosition();\n + if (this.renderer.$maxLines && this.session.getLength() === 1)\n + highlight = false;\n }\n \n if (session.$highlightLineMarker && !highlight) {\n @@ -2153,13 +2294,12 @@ var Editor = function(renderer, session) {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n -\n + this.getSelectedText = function() {\n + return this.session.getTextRange(this.getSelectionRange());\n + };\n this.getCopyText = function() {\n - var text = "";\n - if (!this.selection.isEmpty())\n - text = this.session.getTextRange(this.getSelectionRange());\n -\n - this._emit("copy", text);\n + var text = this.getSelectedText();\n + this._signal("copy", text);\n return text;\n };\n this.onCopy = function() {\n @@ -2186,13 +2326,21 @@ var Editor = function(renderer, session) {\n \n if (this.getBehavioursEnabled()) {\n var transform = mode.transformAction(session.getState(cursor.row), \'insertion\', this, session, text);\n - if (transform)\n + if (transform) {\n + if (text !== transform.text) {\n + this.session.mergeUndoDeltas = false;\n + this.$mergeNextCommand = false;\n + }\n text = transform.text;\n - }\n \n - text = text.replace("\\t", this.session.getTabString());\n + }\n + }\n + \n + if (text == "\\t")\n + text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n - cursor = this.session.remove(this.getSelectionRange());\n + var range = this.getSelectionRange();\n + cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite()) {\n @@ -2201,6 +2349,13 @@ var Editor = function(renderer, session) {\n this.session.remove(range);\n }\n \n + if (text == "\\n" || text == "\\r\\n") {\n + var line = session.getLine(cursor.row)\n + if (cursor.column > line.search(/\\S|$/)) {\n + var d = line.substr(cursor.column).search(/\\S|$/);\n + session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n + }\n + }\n this.clearSelection();\n \n var start = cursor.column;\n @@ -2222,41 +2377,11 @@ var Editor = function(renderer, session) {\n transform.selection[3]));\n }\n }\n +\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n \n - this.moveCursorTo(cursor.row+1, 0);\n -\n - var size = session.getTabSize();\n - var minIndent = Number.MAX_VALUE;\n -\n - for (var row = cursor.row + 1; row <= end.row; ++row) {\n - var indent = 0;\n -\n - line = session.getLine(row);\n - for (var i = 0; i < line.length; ++i)\n - if (line.charAt(i) == \'\\t\')\n - indent += size;\n - else if (line.charAt(i) == \' \')\n - indent += 1;\n - else\n - break;\n - if (/[^\\s]/.test(line))\n - minIndent = Math.min(indent, minIndent);\n - }\n -\n - for (var row = cursor.row + 1; row <= end.row; ++row) {\n - var outdent = minIndent;\n -\n - line = session.getLine(row);\n - for (var i = 0; i < line.length && outdent > 0; ++i)\n - if (line.charAt(i) == \'\\t\')\n - outdent -= size;\n - else if (line.charAt(i) == \' \')\n - outdent -= 1;\n - session.remove(new Range(row, 0, row, i));\n - }\n - session.indentRows(cursor.row + 1, end.row, lineIndent);\n + session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n @@ -2395,6 +2520,16 @@ var Editor = function(renderer, session) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, \'deletion\', this, session, range);\n +\n + if (range.end.column == 0) {\n + var text = session.getTextRange(range);\n + if (text[text.length - 1] == "\\n") {\n + var line = session.getLine(range.end.row)\n + if (/^\\s+$/.test(line)) {\n + range.end.column = line.length\n + }\n + }\n + }\n if (new_range)\n range = new_range;\n }\n @@ -2494,23 +2629,37 @@ var Editor = function(renderer, session) {\n var session = this.session;\n var range = this.getSelectionRange();\n \n - if (range.start.row < range.end.row || range.start.column < range.end.column) {\n + if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, "\\t");\n + return;\n + } else if (range.start.column < range.end.column) {\n + var text = session.getTextRange(range)\n + if (!/^\\s+$/.test(text)) {\n + var rows = this.$getSelectedRows();\n + session.indentRows(rows.first, rows.last, "\\t");\n + return;\n + }\n + }\n + \n + var line = session.getLine(range.start.row)\n + var position = range.start;\n + var size = session.getTabSize();\n + var column = session.documentToScreenColumn(position.row, position.column);\n +\n + if (this.session.getUseSoftTabs()) {\n + var count = (size - column % size);\n + var indentString = lang.stringRepeat(" ", count);\n } else {\n - var indentString;\n -\n - if (this.session.getUseSoftTabs()) {\n - var size = session.getTabSize(),\n - position = this.getCursorPosition(),\n - column = session.documentToScreenColumn(position.row, position.column),\n - count = (size - column % size);\n -\n - indentString = lang.stringRepeat(" ", count);\n - } else\n - indentString = "\\t";\n - return this.insert(indentString);\n + var count = column % size;\n + while (line[range.start.column] == " " && count) {\n + range.start.column--;\n + count--;\n + }\n + this.selection.setSelectionRange(range);\n + indentString = "\\t";\n }\n + return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n @@ -2646,8 +2795,8 @@ var Editor = function(renderer, session) {\n return this.session.moveLinesUp(firstRow, lastRow);\n });\n };\n - this.moveText = function(range, toPosition) {\n - return this.session.moveText(range, toPosition);\n + this.moveText = function(range, toPosition, copy) {\n + return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(function(firstRow, lastRow) {\n @@ -2710,30 +2859,7 @@ var Editor = function(renderer, session) {\n };\n \n this.onCompositionUpdate = function(text) {\n - this.renderer.setCompositionText(tex - -]]></string> </value> - </item> - <item> - <key> <string>next</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="Pdata" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> <string encoding="cdata"><![CDATA[ - -t);\n + this.renderer.setCompositionText(text);\n };\n \n this.onCompositionEnd = function() {\n @@ -3165,7 +3291,10 @@ config.defineOptions(Editor.prototype, "editor", {\n initialValue: true\n },\n readOnly: {\n - set: function(readOnly) { this.$resetCursorStyle(); },\n + set: function(readOnly) {\n + this.textInput.setReadOnly(readOnly); \n + this.$resetCursorStyle(); \n + },\n initialValue: false\n },\n cursorStyle: {\n @@ -3173,10 +3302,15 @@ config.defineOptions(Editor.prototype, "editor", {\n values: ["ace", "slim", "smooth", "wide"],\n initialValue: "ace"\n },\n + mergeUndoDeltas: {\n + values: [false, true, "always"],\n + initialValue: true\n + },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n \n hScrollBarAlwaysVisible: "renderer",\n + vScrollBarAlwaysVisible: "renderer",\n highlightGutterLine: "renderer",\n animatedScroll: "renderer",\n showInvisibles: "renderer",\n @@ -3189,9 +3323,14 @@ config.defineOptions(Editor.prototype, "editor", {\n displayIndentGuides: "renderer",\n fontSize: "renderer",\n fontFamily: "renderer",\n + maxLines: "renderer",\n + minLines: "renderer",\n + scrollPastEnd: "renderer",\n + fixedWidthGutter: "renderer",\n \n scrollSpeed: "$mouseHandler",\n dragDelay: "$mouseHandler",\n + dragEnabled: "$mouseHandler",\n focusTimout: "$mouseHandler",\n \n firstLineNumber: "session",\n @@ -3396,6 +3535,7 @@ var BROKEN_SETDATA = useragent.isChrome < 18;\n var TextInput = function(parentNode, host) {\n var text = dom.createElement("textarea");\n text.className = "ace_text-input";\n +\n if (useragent.isTouchPad)\n text.setAttribute("x-palm-disable-auto-cap", true);\n \n @@ -3404,7 +3544,7 @@ var TextInput = function(parentNode, host) {\n text.autocapitalize = "off";\n text.spellcheck = false;\n \n - text.style.bottom = "2000em";\n + text.style.opacity = "0";\n parentNode.insertBefore(text, parentNode.firstChild);\n \n var PLACEHOLDER = "\\x01\\x01";\n @@ -3519,10 +3659,13 @@ var TextInput = function(parentNode, host) {\n if (inComposition && (!text.value || keytable[e.keyCode]))\n setTimeout(onCompositionEnd, 0);\n if ((text.value.charCodeAt(0)||0) < 129) {\n - return;\n + return syncProperty.call();\n }\n inComposition ? onCompositionUpdate() : onCompositionStart();\n });\n + event.addListener(text, "keydown", function (e) {\n + syncProperty.schedule(50);\n + });\n }\n \n var onSelect = function(e) {\n @@ -3553,17 +3696,17 @@ var TextInput = function(parentNode, host) {\n if (data)\n host.onPaste(data);\n pasted = false;\n - } else if (data == PLACEHOLDER[0]) {\n + } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu)\n host.execCommand("del", {source: "ace"});\n } else {\n if (data.substring(0, 2) == PLACEHOLDER)\n data = data.substr(2);\n - else if (data[0] == PLACEHOLDER[0])\n + else if (data.charAt(0) == PLACEHOLDER.charAt(0))\n data = data.substr(1);\n - else if (data[data.length - 1] == PLACEHOLDER[0])\n + else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n - if (data[data.length - 1] == PLACEHOLDER[0])\n + if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n \n if (data)\n @@ -3698,11 +3841,37 @@ var TextInput = function(parentNode, host) {\n \n var onCompositionUpdate = function() {\n if (!inComposition) return;\n - host.onCompositionUpdate(text.value);\n + var val = text.value.replace(/\\x01/g, "");\n + if (inComposition.lastValue === val) return;\n + \n + host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n - inComposition.lastValue = text.value.replace(/\\x01/g, "")\n - if (inComposition.lastValue) {\n + inComposition.lastValue = val;\n + if (inComposi + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +tion.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n @@ -3716,6 +3885,7 @@ var TextInput = function(parentNode, host) {\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function() {\n + timer = null;\n var str = text.value.replace(/\\x01/g, "");\n if (inComposition)\n return\n @@ -3727,14 +3897,15 @@ var TextInput = function(parentNode, host) {\n }\n });\n inputHandler = function compositionInputHandler(str) {\n - clearTimeout(timer);\n + if (timer)\n + clearTimeout(timer);\n str = str.replace(/\\x01/g, "");\n if (str == c.lastValue)\n return "";\n - if (c.lastValue)\n + if (c.lastValue && timer)\n host.undo();\n return str;\n - } \n + };\n host.onCompositionEnd();\n host.removeListener("mousedown", onCompositionEnd);\n if (e.type == "compositionend" && c.range) {\n @@ -3747,7 +3918,12 @@ var TextInput = function(parentNode, host) {\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n \n event.addListener(text, "compositionstart", onCompositionStart);\n - event.addListener(text, useragent.isGecko ? "text" : "keyup", function(){syncComposition.schedule()});\n + if (useragent.isGecko) {\n + event.addListener(text, "text", function(){syncComposition.schedule()});\n + } else {\n + event.addListener(text, "keyup", function(){syncComposition.schedule()});\n + event.addListener(text, "keydown", function(){syncComposition.schedule()});\n + }\n event.addListener(text, "compositionend", onCompositionEnd);\n \n this.getElement = function() {\n @@ -3766,7 +3942,7 @@ var TextInput = function(parentNode, host) {\n text.style.cssText = "z-index:100000;" + (useragent.isIE ? "opacity:0.1;" : "");\n \n resetSelection(host.selection.isEmpty());\n - host._emit("nativecontextmenu", {target: host});\n + host._emit("nativecontextmenu", {target: host, domEvent: e});\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n @@ -3800,18 +3976,20 @@ var TextInput = function(parentNode, host) {\n }\n }, 0);\n }\n - if (!useragent.isGecko) {\n - event.addListener(text, "contextmenu", function(e) {\n + if (!useragent.isGecko || useragent.isMac) {\n + var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n - });\n + };\n + event.addListener(host.renderer.scroller, "contextmenu", onContextMenu);\n + event.addListener(text, "contextmenu", onContextMenu);\n }\n };\n \n exports.TextInput = TextInput;\n });\n \n -define(\'ace/mouse/mouse_handler\', [\'require\', \'exports\', \'module\' , \'ace/lib/event\', \'ace/lib/useragent\', \'ace/mouse/default_handlers\', \'ace/mouse/default_gutter_handler\', \'ace/mouse/mouse_event\', \'ace/mouse/dragdrop\', \'ace/config\'], function(require, exports, module) {\n +define(\'ace/mouse/mouse_handler\', [\'require\', \'exports\', \'module\' , \'ace/lib/event\', \'ace/lib/useragent\', \'ace/mouse/default_handlers\', \'ace/mouse/default_gutter_handler\', \'ace/mouse/mouse_event\', \'ace/mouse/dragdrop_handler\', \'ace/config\'], function(require, exports, module) {\n \n \n var event = require("../lib/event");\n @@ -3819,7 +3997,7 @@ var useragent = require("../lib/useragent");\n var DefaultHandlers = require("./default_handlers").DefaultHandlers;\n var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler;\n var MouseEvent = require("./mouse_event").MouseEvent;\n -var DragdropHandler = require("./dragdrop").DragdropHandler;\n +var DragdropHandler = require("./dragdrop_handler").DragdropHandler;\n var config = require("../config");\n \n var MouseHandler = function(editor) {\n @@ -3828,16 +4006,15 @@ var MouseHandler = function(editor) {\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n -\n - event.addListener(editor.container, "mousedown", function(e) {\n - editor.focus();\n - return event.preventDefault(e);\n - });\n \n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"));\n event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"));\n event.addMultiMouseDownListener(mouseTarget, [300, 300, 250], this, "onMouseEvent");\n + if (editor.renderer.scrollBarV) {\n + event.addMultiMouseDownListener(editor.renderer.scrollBarV.inner, [300, 300, 250], this, "onMouseEvent");\n + event.addMultiMouseDownListener(editor.renderer.scrollBarH.inner, [300, 300, 250], this, "onMouseEvent");\n + }\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"));\n \n var gutterEl = editor.renderer.$gutter;\n @@ -3845,6 +4022,15 @@ var MouseHandler = function(editor) {\n event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick"));\n event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick"));\n event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove"));\n +\n + event.addListener(mouseTarget, "mousedown", function(e) {\n + editor.focus();\n + });\n +\n + event.addListener(gutterEl, "mousedown", function(e) {\n + editor.focus();\n + return event.preventDefault(e);\n + });\n };\n \n (function() {\n @@ -3873,13 +4059,10 @@ var MouseHandler = function(editor) {\n this.state = state;\n };\n \n - this.captureMouse = function(ev, state) {\n - if (state)\n - this.setState(state);\n -\n + this.captureMouse = function(ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n - \n +\n this.isMousePressed = true;\n var renderer = this.editor.renderer;\n if (renderer.$keepTextAreaAtCursor)\n @@ -3889,6 +4072,7 @@ var MouseHandler = function(editor) {\n var onMouseMove = function(e) {\n self.x = e.clientX;\n self.y = e.clientY;\n + mouseMoveHandler && mouseMoveHandler(e);\n };\n \n var onCaptureEnd = function(e) {\n @@ -3901,15 +4085,15 @@ var MouseHandler = function(editor) {\n renderer.$moveTextAreaToCursor();\n }\n self.isMousePressed = false;\n - self.onMouseEvent("mouseup", e)\n + self.onMouseEvent("mouseup", e);\n };\n \n var onCaptureInterval = function() {\n self[self.state] && self[self.state]();\n };\n - \n +\n if (useragent.isOldIE && ev.domEvent.type == "dblclick") {\n - return setTimeout(function() {onCaptureEnd(ev.domEvent);});\n + return setTimeout(function() {onCaptureEnd(ev);});\n }\n \n event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n @@ -3920,6 +4104,7 @@ var MouseHandler = function(editor) {\n config.defineOptions(MouseHandler.prototype, "mouseHandler", {\n scrollSpeed: {initialValue: 2},\n dragDelay: {initialValue: 150},\n + dragEnabled: {initialValue: true},\n focusTimout: {initialValue: 0}\n });\n \n @@ -3927,10 +4112,11 @@ config.defineOptions(MouseHandler.prototype, "mouseHandler", {\n exports.MouseHandler = MouseHandler;\n });\n \n -define(\'ace/mouse/default_handlers\', [\'require\', \'exports\', \'module\' , \'ace/lib/dom\', \'ace/lib/useragent\'], function(require, exports, module) {\n +define(\'ace/mouse/default_handlers\', [\'require\', \'exports\', \'module\' , \'ace/lib/dom\', \'ace/lib/event\', \'ace/lib/useragent\'], function(require, exports, module) {\n \n \n var dom = require("../lib/dom");\n +var event = require("../lib/event");\n var useragent = require("../lib/useragent");\n \n var DRAG_OFFSET = 0; // pixels\n @@ -3945,8 +4131,8 @@ function DefaultHandlers(mouseHandler) {\n editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler));\n \n - var exports = ["select", "startSelect", "drag", "dragEnd", "dragWait",\n - "dragWaitEnd", "startDrag", "focusWait"];\n + var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd",\n + "selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"];\n \n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n @@ -3979,9 +4165,10 @@ function DefaultHandlers(mouseHandler) {\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n + this.mousedownEvent.time = (new Date()).getTime();\n this.setState("focusWait");\n this.captureMouse(ev);\n - return ev.preventDefault();\n + return;\n }\n }\n \n @@ -3989,22 +4176,28 @@ function DefaultHandlers(mouseHandler) {\n this.startSelect(pos);\n } else if (inSelection) {\n this.mousedownEvent.time = (new Date()).getTime();\n - this.setState("dragWait");\n + this.startSelect(pos);\n }\n -\n this.captureMouse(ev);\n return ev.preventDefault();\n };\n \n this.startSelect = function(pos) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n - if (this.mousedownEvent.getShiftKey()) {\n - this.editor.selection.selectToPosition(pos);\n - }\n - else if (!this.$clickSelection) {\n - this.editor.moveCursorToPosition(pos);\n - this.editor.selection.clearSelection();\n + var editor = this.editor;\n + setTimeout(function(){\n + if (this.mousedownEvent.getShiftKey()) {\n + editor.selection.selectToPosition(pos);\n + }\n + else if (!this.$clickSelection) {\n + editor.moveCursorToPosition(pos);\n + editor.selection.clearSelection();\n + }\n + }.bind(this), 0);\n + if (editor.renderer.scroller.setCapture) {\n + editor.renderer.scroller.setCapture();\n }\n + editor.setStyle("ace_selecting");\n this.setState("select");\n };\n \n @@ -4063,32 +4256,14 @@ function DefaultHandlers(mouseHandler) {\n editor.renderer.scrollCursorIntoView();\n };\n \n - this.startDrag = function() {\n - var editor = this.editor;\n - this.setState("drag");\n - this.dragRange = editor.getSelectionRange();\n - var style = editor.getSelectionStyle();\n - this.dragSelectionMarker = editor.session.addMarker(this.dragRange, "ace_selection", style);\n - editor.clearSelection();\n - dom.addCssClass(editor.container, "ace_dragging");\n - if (!this.$dragKeybinding) {\n - this.$dragKeybinding = {\n - handleKeyboard: function(data, hashId, keyString, keyCode) {\n - if (keyString == "esc")\n - return {command: this.command};\n - },\n - command: {\n - exec: function(editor) {\n - var self = editor.$mouseHandler;\n - self.dragCursor = null;\n - self.dragEnd();\n - self.startSelect();\n - }\n - }\n - }\n + this.selectEnd =\n + this.selectAllEnd =\n + this.selectByWordsEnd =\n + this.selectByLinesEnd = function() {\n + this.editor.unsetStyle("ace_selecting");\n + if (this.editor.renderer.scroller.releaseCapture) {\n + this.editor.renderer.scroller.releaseCapture();\n }\n -\n - editor.keyBinding.addKeyboardHandler(this.$dragKeybinding);\n };\n \n this.focusWait = function() {\n @@ -4098,59 +4273,6 @@ function DefaultHandlers(mouseHandler) {\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n -\n - this.dragWait = function(e) {\n - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n - var time = (new Date()).getTime();\n - var editor = this.editor;\n -\n - if (distance > DRAG_OFFSET) {\n - this.startSelect(this.mousedownEvent.getDocumentPosition());\n - } else if (time - this.mousedownEvent.time > editor.$mouseHandler.$dragDelay) {\n - this.startDrag();\n - }\n - };\n -\n - this.dragWaitEnd = function(e) {\n - this.mousedownEvent.domEvent = e;\n - this.startSelect();\n - };\n -\n - this.drag = function() {\n - var editor = this.editor;\n - this.dragCursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n - editor.moveCursorToPosition(this.dragCursor);\n - editor.renderer.scrollCursorIntoView();\n - };\n -\n - this.dragEnd = function(e) {\n - var editor = this.editor;\n - var dragCursor = this.dragCursor;\n - var dragRange = this.dragRange;\n - dom.removeCssClass(editor.container, "ace_dragging");\n - editor.session.removeMarker(this.dragSelectionMarker);\n - editor.keyBinding.removeKeyboardHandler(this.$dragKeybinding);\n -\n - if (!dragCursor)\n - return;\n -\n - editor.clearSelection();\n - if (e && (e.ctrlKey || e.altKey)) {\n - var session = editor.session;\n - var newRange = dragRange;\n - newRange.end = session.insert(dragCursor, session.getTextRange(dragRange));\n - newRange.start = dragCursor;\n - } else if (dragRange.contains(dragCursor.row, dragCursor.column)) {\n - return;\n - } else {\n - var newRange = editor.moveText(dragRange, dragCursor);\n - }\n -\n - if (!newRange)\n - return;\n -\n - editor.selection.setSelectionRange(newRange);\n - };\n \n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n @@ -4185,7 +4307,7 @@ function DefaultHandlers(mouseHandler) {\n \n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n - this.setState("null");\n + this.setState("selectAll");\n };\n \n this.onMouseWheel = function(ev) {\n @@ -4237,7 +4359,7 @@ function GutterHandler(mouseHandler) {\n var gutter = editor.renderer.$gutterLayer;\n \n mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) {\n - if (!editor.isFocused())\n + if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n \n @@ -4256,7 +4378,8 @@ function GutterHandler(mouseHandler) {\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n - mouseHandler.captureMouse(e, "selectByLines");\n + mouseHandler.setState("selectByLines");\n + mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n \n @@ -4311,11 +4434,12 @@ function GutterHandler(mouseHandler) {\n var rect = editor.renderer.$gutter.getBoundingClientRect();\n tooltip.style.left = e.x + 15 + "px";\n if (e.y + 3 * editor.renderer.lineHeight + 15 < rect.bottom) {\n - tooltip.style.bottom = "";\n + tooltip.style.bottom = "";\n tooltip.style.top = e.y + 15 + "px";\n } else {\n - tooltip.style.top = "";\n - tooltip.style.bottom = rect.bottom - e.y + 5 + "px";\n + tooltip.style.top = "";\n + var innerHeight = window.innerHeight || document.documentElement.clientHeight;\n + tooltip.style.bottom = innerHeight - e.y + 5 + "px";\n }\n }\n \n @@ -4349,7 +4473,8 @@ function GutterHandler(mouseHandler) {\n hideTooltip();\n }, 50);\n });\n -\n + \n + editor.on("changeSession", hideTooltip);\n }\n \n exports.GutterHandler = GutterHandler;\n @@ -4404,18 +4529,15 @@ var MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n \n var editor = this.editor;\n \n - if (editor.getReadOnly()) {\n +\n + var selectionRange = editor.getSelectionRange();\n + if (selectionRange.isEmpty())\n this.$inSelection = false;\n - }\n else {\n - var selectionRange = editor.getSelectionRange();\n - if (selectionRange.isEmpty())\n - this.$inSelection = false;\n - else {\n - var pos = this.getDocumentPosition();\n - this.$inSelection = selectionRange.contains(pos.row, pos.column);\n - }\n + var pos = this.getDocumentPosition();\n + this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n +\n return this.$inSelection;\n };\n this.getButton = function() {\n @@ -4433,82 +4555,250 @@ var MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n \n });\n \n -define(\'ace/mouse/dragdrop\', [\'require\', \'exports\', \'module\' , \'ace/lib/event\'], function(require, exports, module) {\n +define(\'ace/mouse/dragdrop_handler\', [\'require\', \'exports\', \'module\' , \'ace/lib/dom\', \'ace/lib/event\', \'ace/lib/useragent\'], function(require, exports, module) {\n \n \n +var dom = require("../lib/dom");\n var event = require("../lib/event");\n +var useragent = require("../lib/useragent");\n +\n +var AUTOSCROLL_DELAY = 200;\n +var SCROLL_CURSOR_DELAY = 200;\n +var SCROLL_CURSOR_HYSTERESIS = 5;\n +\n +function DragdropHandler(mouseHandler) {\n \n -var DragdropHandler = function(mouseHandler) {\n var editor = mouseHandler.editor;\n +\n + var blankImage = dom.createElement("img");\n + blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";\n + if (useragent.isOpera)\n + blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;";\n +\n + var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"];\n +\n + exports.forEach(function(x) {\n + mouseHandler[x] = this[x];\n + }, this);\n + editor.addEventListener("mousedown", this.onMouseDown.bind(mouseHandler));\n +\n +\n + var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n + var dragOperation;\n + var isInternal;\n + var autoScrollStartTime;\n + var cursorMovedTime;\n + var cursorPointOnCaretMoved;\n +\n + this.onDragStart = function(e) {\n + if (this.cancelDrag || !mouseTarget.draggable) {\n + var self = this;\n + setTimeout(function(){\n + self.startSelect();\n + self.captureMouse(e);\n + }, 0);\n + return e.preventDefault();\n + }\n + range = editor.getSelectionRange();\n \n - var mouseTarget = editor.container;\n - event.addListener(mouseTarget, "dragenter", function(e) {\n - if (editor.getReadOnly())\n - return;\n - var types = e.dataTransfer.types;\n - if (types && Array.prototype.indexOf.call(types, "text/plain") === -1)\n + var dataTransfer = e.dataTransfer;\n + dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove";\n + if (useragent.isOpera) {\n + editor.container.appendChild(blankImage);\n + blankImage._top = blankImage.offsetTop;\n + }\n + dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n + if (useragent.isOpera) {\n + editor.container.removeChild(blankImage);\n + }\n + dataTransfer.clearData();\n + dataTransfer.setData("Text", editor.session.getTextRange());\n +\n + isInternal = true;\n + this.setState("drag");\n + };\n +\n + this.onDragEnd = function(e) {\n + mouseTarget.draggable = false;\n + isInternal = false;\n + this.setState(null);\n + if (!editor.getReadOnly()) {\n + var dropEffect = e.dataTransfer.dropEffect;\n + if (!dragOperation && dropEffect == "move")\n + editor.session.remove(editor.getSelectionRange());\n + editor.renderer.$cursorLayer.setBlinking(true);\n + }\n + this.editor.unsetStyle("ace_dragging");\n + };\n +\n + this.onDragEnter = function(e) {\n + if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n + e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n - });\n + };\n \n - event.addListener(mouseTarget, "dragover", function(e) {\n - if (editor.getReadOnly())\n - return;\n - var types = e.dataTransfer.types;\n - if (types && Array.prototype.indexOf.call(types, "text/plain") === -1)\n + this.onDragOver = function(e) {\n + if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n + if (!dragSelectionMarker) {\n + addDragMarker();\n + counter++;\n + }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n x = e.clientX;\n y = e.clientY;\n - return event.preventDefault(e);\n - });\n \n - var onDragInterval = function() {\n - dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n - editor.moveCursorToPosition(dragCursor);\n - editor.renderer.scrollCursorIntoView();\n + e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n + return event.preventDefault(e);\n };\n \n - event.addListener(mouseTarget, "dragleave", function(e) {\n + this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n + dragOperation = null;\n return event.preventDefault(e);\n }\n - });\n + };\n \n - event.addListener(mouseTarget, "drop", function(e) {\n + this.onDrop = function(e) {\n if (!dragSelectionMarker)\n return;\n - range.end = editor.session.insert(dragCursor, e.dataTransfer.getData(\'Text\'));\n - range.start = dragCursor;\n + var dataTransfer = e.dataTransfer;\n + if (isInternal) {\n + switch (dragOperation) {\n + case "move":\n + if (range.contains(dragCursor.row, dragCursor.column)) {\n + range = {\n + start: dragCursor,\n + end: dragCursor\n + };\n + } else {\n + range = editor.moveText(range, dragCursor);\n + }\n + break;\n + case "copy":\n + range = editor.moveText(range, dragCursor, true);\n + break;\n + }\n + } else {\n + var dropData = dataTransfer.getData(\'Text\');\n + range = {\n + start: dragCursor,\n + end: editor.session.insert(dragCursor, dropData)\n + };\n + editor.focus();\n + dragOperation = null;\n + }\n clearDragMarker();\n - editor.focus();\n return event.preventDefault(e);\n - });\n + };\n +\n + event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler));\n + event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler));\n + event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler));\n + event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler));\n + event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler));\n + event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler));\n +\n + function scrollCursorIntoView(cursor, prevCursor) {\n + var now = new Date().getTime();\n + var vMovement = !prevCursor || cursor.row != prevCursor.row;\n + var hMovement = !prevCursor || cursor.column != prevCursor.column;\n + if (!cursorMovedTime || vMovement || hMovement) {\n + editor.$blockScrolling += 1;\n + editor.moveCursorToPosition(cursor);\n + editor.$blockScrolling -= 1;\n + cursorMovedTime = now;\n + cursorPointOnCaretMoved = {x: x, y: y};\n + } else {\n + var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n + if (distance > SCROLL_CURSOR_HYSTERESIS) {\n + cursorMovedTime = null;\n + } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n + editor.renderer.scrollCursorIntoView();\n + cursorMovedTime = null;\n + }\n + }\n + }\n +\n + function autoScroll(cursor, prevCursor) {\n + var now = new Date().getTime();\n + var lineHeight = editor.renderer.layerConfig.lineHeight;\n + var characterWidth = editor.renderer.layerConfig.characterWidth;\n + var editorRect = editor.renderer.scroller.getBoundingClientRect();\n + var offsets = {\n + x: {\n + left: x - editorRect.left,\n + right: editorRect.right - x\n + },\n + y: {\n + top: y - editorRect.top,\n + bottom: editorRect.bottom - y\n + }\n + };\n + var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n + var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n + var scrollCursor = {row: cursor.row, column: cursor.column};\n + if (nearestXOffset / characterWidth <= 2) {\n + scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n + }\n + if (nearestYOffset / lineHeight <= 1) {\n + scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n + }\n + var vScroll = cursor.row != scrollCursor.row;\n + var hScroll = cursor.column != scrollCursor.column;\n + var vMovement = !prevCursor || cursor.row != prevCursor.row;\n + if (vScroll || (hScroll && !vMovement)) {\n + if (!autoScrollStartTime)\n + autoScrollStartTime = now;\n + else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n + editor.renderer.scrollCursorIntoView(scrollCursor);\n + } else {\n + autoScrollStartTime = null;\n + }\n + }\n +\n + function onDragInterval() {\n + var prevCursor = dragCursor;\n + dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n + scrollCursorIntoView(dragCursor, prevCursor);\n + autoScroll(dragCursor, prevCursor);\n + }\n \n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle());\n editor.clearSelection();\n + if (editor.isFocused())\n + editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, "mousemove", onMouseMove);\n }\n +\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n + editor.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n + editor.$blockScrolling -= 1;\n + if (editor.isFocused() && !isInternal)\n + editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n + range = null;\n counter = 0;\n + autoScrollStartTime = null;\n + cursorMovedTime = null;\n event.removeListener(document, "mousemove", onMouseMove);\n }\n var onMouseMoveTimer = null;\n @@ -4520,9 +4810,120 @@ var DragdropHandler = function(mouseHandler) {\n }, 20);\n }\n }\n -};\n +\n + function canAccept(dataTransfer) {\n + var types = dataTransfer.types;\n + return !types || Array.prototype.some.call(types, function(type) {\n + return type == \'text/plain\' || type == \'Text\';\n + });\n + }\n +\n + function getDropEffect(e) {\n + var copyAllowed = [\'copy\', \'copymove\', \'all\', \'uninitialized\'];\n + var moveAllowed = [\'move\', \'copymove\', \'linkmove\', \'all\', \'uninitialized\'];\n +\n + var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n + var effectAllowed = "uninitialized";\n + try {\n + effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n + } catch (e) {}\n + var dropEffect = "none";\n +\n + if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n + dropEffect = "copy";\n + else if (moveAllowed.indexOf(effectAllowed) >= 0)\n + dropEffect = "move";\n + else if (copyAllowed.indexOf(effectAllowed) >= 0)\n + dropEffect = "copy";\n +\n + return dropEffect;\n + }\n +}\n +\n +(function() {\n +\n + this.dragWait = function() {\n + var interval = (new Date()).getTime() - this.mousedownEvent.time;\n + if (interval > this.editor.getDragDelay())\n + this.startDrag();\n + };\n +\n + this.dragWaitEnd = function() {\n + var target = this.editor.container;\n + target.draggable = false;\n + this.startSelect(this.mousedownEvent.getDocumentPosition());\n + this.selectEnd();\n + };\n +\n + this.dragReadyEnd = function(e) {\n + this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n + this.editor.unsetStyle("ace_dragging");\n + this.dragWaitEnd();\n + };\n +\n + this.startDrag = function(){\n + this.cancelDrag = false;\n + var target = this.editor.container;\n + target.draggable = true;\n + this.editor.renderer.$cursorLayer.setBlinking(false);\n + this.editor.setStyle("ace_dragging");\n + this.setState("dragReady");\n + };\n +\n + this.onMouseDrag = function(e) {\n + var target = this.editor.container;\n + if (useragent.isIE && this.state == "dragReady") {\n + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n + if (distance > 3)\n + target.dragDrop();\n + }\n + if (this.state === "dragWait") {\n + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n + if (distance > 0) {\n + target.draggable = false;\n + this.startSelect(this.mousedownEvent.getDocumentPosition());\n + }\n + }\n + };\n +\n + this.onMouseDown = function(e) {\n + if (!this.$dragEnabled)\n + return;\n + this.mousedownEvent = e;\n + var editor = this.editor;\n +\n + var inSelection = e.inSelection();\n + var button = e.getButton();\n + var clickCount = e.domEvent.detail || 1;\n + if (clickCount === 1 && button === 0 && inSelection) {\n + this.mousedownEvent.time = (new Date()).getTime();\n + var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n + if ("unselectable" in eventTarget)\n + eventTarget.unselectable = "on";\n + if (editor.getDragDelay()) {\n + if (useragent.isWebKit) {\n + self.cancelDrag = true;\n + var mouseTarget = editor.container;\n + mouseTarget.draggable = true;\n + }\n + this.setState("dragWait");\n + } else {\n + this.startDrag();\n + }\n + this.captureMouse(e, this.onMouseDrag.bind(this));\n + e.defaultPrevented = true;\n + }\n + };\n +\n +}).call(DragdropHandler.prototype);\n +\n +\n +function calcDistance(ax, ay, bx, by) {\n + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n +}\n \n exports.DragdropHandler = DragdropHandler;\n +\n });\n \n define(\'ace/config\', [\'require\', \'exports\', \'module\' , \'ace/lib/lang\', \'ace/lib/oop\', \'ace/lib/net\', \'ace/lib/event_emitter\'], function(require, exports, module) {\n @@ -4572,16 +4973,24 @@ exports.moduleUrl = function(name, component) {\n \n var parts = name.split("/");\n component = component || parts[parts.length - 2] || "";\n - var base = parts[parts.length - 1].replace(component, "").replace(/(^[\\-_])|([\\-_]$)/, "");\n + var sep = component == "snippets" ? "/" : "-";\n + var base = parts[parts.length - 1]; \n + if (sep == "-") {\n + var re = new RegExp("^" + component + "[\\\\-_]|[\\\\-_]" + component + "$", "g");\n + base = base.replace(re, "");\n + }\n \n - if (!base && parts.length > 1)\n + if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + "Path"];\n - if (path == null)\n + if (path == null) {\n path = options.basePath;\n + } else if (sep == "/") {\n + component = sep = "";\n + }\n if (path && path.slice(-1) != "/")\n path += "/";\n - return path + component + "-" + base + this.get("suffix");\n + return path + component + sep + base + this.get("suffix");\n };\n \n exports.setModuleUrl = function(name, subst) {\n @@ -4598,7 +5007,7 @@ exports.loadModule = function(moduleName, onLoad) {\n \n try {\n module = require(moduleName);\n - } catch (e) {};\n + } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n \n @@ -4698,8 +5107,11 @@ var optionsProvider = {\n if (this["$" + name] === value)\n return;\n var opt = this.$options[name];\n - if (!opt)\n + if (!opt) {\n + if (typeof console != "undefined" && console.warn)\n + console.warn(\'misspelled option "\' + name + \'"\');\n return undefined;\n + }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n \n @@ -4710,8 +5122,11 @@ var optionsProvider = {\n },\n getOption: function(name) {\n var opt = this.$options[name];\n - if (!opt)\n + if (!opt) {\n + if (typeof console != "undefined" && console.warn)\n + console.warn(\'misspelled option "\' + name + \'"\');\n return undefined;\n + }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this["$" + name];\n @@ -4750,7 +5165,7 @@ exports.setDefaultValue = function(path, name, value) {\n var opts = defaultOptions[path] || (defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n - exports.setDefaultValue(opts.forwardTo, name, value)\n + exports.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n @@ -4809,30 +5224,7 @@ EventEmitter._dispatchEvent = function(eventName, e) {\n this._defaultHandlers || (this._defaultHandlers = {});\n \n var listeners = this._eventRegistry[eventName] || [];\n - var defaultHand - -]]></string> </value> - </item> - <item> - <key> <string>next</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="Pdata" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> <string encoding="cdata"><![CDATA[ - -ler = this._defaultHandlers[eventName];\n + var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n \n @@ -4846,6 +5238,7 @@ ler = this._defaultHandlers[eventName];\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n \n + listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n @@ -4861,7 +5254,7 @@ EventEmitter._signal = function(eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n -\n + listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++)\n listeners[i](e, this);\n };\n @@ -5083,8 +5476,11 @@ var KeyBinding = function(editor) {\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); \n }\n - if (success && e && hashId != -1 && toExecute.passEvent != true)\n + if (success && e && hashId != -1 && \n + toExecute.passEvent != true && toExecute.command.passEvent != true\n + ) {\n event.stopEvent(e);\n + }\n if (success)\n break;\n }\n @@ -5313,10 +5709,11 @@ var EditSession = function(text, mode) {\n if (self.$deltas.length > 0) {\n undoManager.execute({\n action: "aceupdate",\n - args: [self.$deltas, self]\n + args: [self.$deltas, self],\n + merge: self.mergeUndoDeltas\n });\n }\n -\n + self.mergeUndoDeltas = false;\n self.$deltas = [];\n }\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n @@ -5346,7 +5743,7 @@ var EditSession = function(text, mode) {\n this.setOption("useSoftTabs", val);\n };\n this.getUseSoftTabs = function() {\n - return this.$useSoftTabs;\n + return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption("tabSize", tabSize)\n @@ -5487,7 +5884,30 @@ var EditSession = function(text, mode) {\n };\n this.clearAnnotations = function() {\n this.setAnnotations([]);\n - };\n + + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + };\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n @@ -5555,7 +5975,7 @@ var EditSession = function(text, mode) {\n this.$modes = {};\n this.$mode = null;\n this.$modeId = null;\n - this.setMode = function(mode) {\n + this.setMode = function(mode, cb) {\n if (mode && typeof mode === "object") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n @@ -5567,12 +5987,15 @@ var EditSession = function(text, mode) {\n if (!this.$modes["ace/mode/text"])\n this.$modes["ace/mode/text"] = new TextMode();\n \n - if (this.$modes[path] && !options)\n - return this.$onChangeMode(this.$modes[path]);\n + if (this.$modes[path] && !options) {\n + this.$onChangeMode(this.$modes[path]);\n + cb && cb();\n + return;\n + }\n this.$modeId = path;\n config.loadModule(["mode", path], function(m) {\n if (this.$modeId !== path)\n - return;\n + return cb && cb();\n if (this.$modes[path] && !options)\n return this.$onChangeMode(this.$modes[path]);\n if (m && m.Mode) {\n @@ -5581,7 +6004,8 @@ var EditSession = function(text, mode) {\n this.$modes[path] = m;\n m.$id = path;\n }\n - this.$onChangeMode(m)\n + this.$onChangeMode(m);\n + cb && cb();\n }\n }.bind(this));\n if (!this.$mode)\n @@ -5589,7 +6013,11 @@ var EditSession = function(text, mode) {\n };\n \n this.$onChangeMode = function(mode, $isPlaceholder) {\n - if (this.$mode === mode) return;\n + if (!$isPlaceholder)\n + this.$modeId = mode.$id;\n + if (this.$mode === mode) \n + return;\n +\n this.$mode = mode;\n \n this.$stopWorker();\n @@ -5619,9 +6047,9 @@ var EditSession = function(text, mode) {\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n \n -\n + this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n + \n if (!$isPlaceholder) {\n - this.$modeId = mode.$id;\n this.$setFolding(mode.foldingRules);\n this._emit("changeMode");\n this.bgTokenizer.start(0);\n @@ -5655,7 +6083,6 @@ var EditSession = function(text, mode) {\n \n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n - scrollTop = Math.round(Math.max(0, scrollTop));\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n \n @@ -5668,7 +6095,6 @@ var EditSession = function(text, mode) {\n \n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n - scrollLeft = Math.round(Math.max(0, scrollLeft));\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n \n @@ -5795,7 +6221,7 @@ var EditSession = function(text, mode) {\n var range, point;\n var lastDeltaIsInsert = false;\n if (isInsert(delta)) {\n - range = delta.range.clone();\n + range = Range.fromPoints(delta.range.start, delta.range.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.range.start, delta.range.start);\n @@ -5824,6 +6250,11 @@ var EditSession = function(text, mode) {\n }\n }\n if (lastUndoRange != null) {\n + if (Range.comparePoints(lastUndoRange.start, range.start) == 0) {\n + lastUndoRange.start.column += range.end.column - range.start.column;\n + lastUndoRange.end.column += range.end.column - range.start.column;\n + }\n +\n var cmp = lastUndoRange.compareRange(range);\n if (cmp == 1) {\n range.setStart(lastUndoRange.start);\n @@ -5858,7 +6289,7 @@ var EditSession = function(text, mode) {\n }\n }\n \n - this.insert(toRange.start, text);\n + toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n @@ -6034,8 +6465,10 @@ var EditSession = function(text, mode) {\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n - this.$wrapLimitRange.min = min;\n - this.$wrapLimitRange.max = max;\n + this.$wrapLimitRange = {\n + min: min,\n + max: max\n + };\n this.$modified = true;\n this._emit("changeWrapMode");\n }\n @@ -6213,7 +6646,7 @@ var EditSession = function(text, mode) {\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n - tokens = this.$getDisplayTokens(lang.stringTrimRight(lines[row]));\n + tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n @@ -6237,8 +6670,6 @@ var EditSession = function(text, mode) {\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n - while (tokens.length != 0 && tokens[tokens.length - 1] >= SPACE)\n - tokens.pop();\n \n wrapData[foldLine.start.row]\n = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n @@ -6264,6 +6695,8 @@ var EditSession = function(text, mode) {\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n +\n + var isCode = this.$wrapAsCode;\n \n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n @@ -6283,16 +6716,11 @@ var EditSession = function(text, mode) {\n \n while (displayLength - lastSplit > wrapLimit) {\n var split = lastSplit + wrapLimit;\n - if (tokens[split] >= SPACE) {\n - while (tokens[split] >= SPACE) {\n - split ++;\n - }\n + if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n - if (tokens[split] == PLACEHOLDER_START\n - || tokens[split] == PLACEHOLDER_BODY)\n - {\n + if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n @@ -6304,8 +6732,7 @@ var EditSession = function(text, mode) {\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n - if (tokens[split] != PLACEHOLDER_BODY)\n - {\n + if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n @@ -6315,12 +6742,21 @@ var EditSession = function(text, mode) {\n addSplit(split);\n continue;\n }\n - var minSplit = Math.max(split - 10, lastSplit - 1);\n + var minSplit = Math.max(split - (isCode ? 10 : wrapLimit-(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n - while (split > minSplit && tokens[split] == PUNCTUATION) {\n - split --;\n + if (isCode) {\n + while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n + split --;\n + }\n + while (split > minSplit && tokens[split] == PUNCTUATION) {\n + split --;\n + }\n + } else {\n + while (split > minSplit && tokens[split] < SPACE) {\n + split --;\n + }\n }\n if (split > minSplit) {\n addSplit(++split);\n @@ -6686,6 +7122,15 @@ config.defineOptions(EditSession.prototype, "session", {\n return this.getUseWrapMode() ? this.getWrapLimitRange().min || "free" : "off";\n },\n handlesSet: true\n + }, \n + wrapMethod: {\n + set: function(val) {\n + if (val == "auto")\n + this.$wrapAsCode = this.$mode.type != "text";\n + else\n + this.$wrapAsCode = val != "text";\n + },\n + initialValue: "auto"\n },\n firstLineNumber: {\n set: function() {this._emit("changeBreakpoint");},\n @@ -6853,36 +7298,15 @@ var Selection = function(session) {\n this.setSelectionAnchor(range.start.row, range.start.column);\n this.selectTo(range.end.row, range.end.column);\n }\n + if (this.getRange().isEmpty())\n + this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n \n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n - this.setSelectionAnchor(lead.r - -]]></string> </value> - </item> - <item> - <key> <string>next</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="Pdata" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> <string encoding="cdata"><![CDATA[ - -ow, lead.column);\n + this.setSelectionAnchor(lead.row, lead.column);\n \n mover.call(this);\n };\n @@ -6954,7 +7378,7 @@ ow, lead.column);\n } else {\n rowEnd = rowStart;\n }\n - if (excludeLastChar)\n + if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n @@ -7127,7 +7551,7 @@ ow, lead.column);\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n \n - if (index <= 1) {\n + if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n @@ -7163,11 +7587,11 @@ ow, lead.column);\n \n if (column == line.length) {\n var l = this.doc.getLength();\n - do { \n + do {\n row++;\n rightOfCursor = this.doc.getLine(row)\n } while (row < l && /^\\s*$/.test(rightOfCursor))\n - \n +\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = ""\n column = 0;\n @@ -7188,11 +7612,11 @@ ow, lead.column);\n \n var line = this.session.getLine(row).substring(0, column);\n if (column == 0) {\n - do { \n + do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line))\n - \n +\n column = line.length;\n if (!/\\s+$/.test(line))\n line = ""\n @@ -7280,6 +7704,52 @@ ow, lead.column);\n range.desiredColumn = this.$desiredColumn;\n return range;\n }\n +\n + this.toJSON = function() {\n + if (this.rangeCount) {\n + var data = this.ranges.map(function(r) {\n + var r1 = r.clone();\n + r1.isBackwards = r.cursor == r.start;\n + return r1;\n + });\n + } else {\n + var data = this.getRange();\n + data.isBackwards = this.isBackwards();\n + }\n + return data;\n + };\n +\n + this.fromJSON = function(data) {\n + if (data.start == undefined) {\n + if (this.rangeList) {\n + this.toSingleRange(data[0]);\n + for (var i = data.length; i--; ) {\n + var r = Range.fromPoints(data[i].start, data[i].end);\n + if (data.isBackwards)\n + r.cursor = r.start;\n + this.addRange(r, true);\n + }\n + return;\n + } else\n + data = data[0];\n + }\n + if (this.rangeList)\n + this.toSingleRange(data);\n + this.setSelectionRange(data, data.isBackwards);\n + };\n +\n + this.isEqual = function(data) {\n + if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n + return false;\n + if (!data.length || !this.ranges)\n + return this.getRange().isEqual(data);\n +\n + for (var i = this.ranges.length; i--; ) {\n + if (!this.ranges[i].isEqual(data[i]))\n + return false\n + }\n + return true;\n + }\n \n }).call(Selection.prototype);\n \n @@ -7402,7 +7872,30 @@ var Range = function(startRow, startColumn, endRow, endColumn) {\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n - if (this.isStart(row, column)) {\n + if (this.isStart( + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +row, column)) {\n return false;\n } else {\n return true;\n @@ -7537,7 +8030,7 @@ var TokenIterator = require("../token_iterator").TokenIterator;\n var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new TextHighlightRules().getRules());\n + this.HighlightRules = TextHighlightRules;\n this.$behaviour = new Behaviour();\n };\n \n @@ -7558,6 +8051,10 @@ var Mode = function() {\n );\n \n this.getTokenizer = function() {\n + if (!this.$tokenizer) {\n + this.$highlightRules = new this.HighlightRules();\n + this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n + }\n return this.$tokenizer;\n };\n \n @@ -7767,17 +8264,16 @@ var Mode = function() {\n };\n \n this.createModeDelegates = function (mapping) {\n - if (!this.$embeds) {\n - return;\n - }\n + this.$embeds = [];\n this.$modes = {};\n - for (var i = 0; i < this.$embeds.length; i++) {\n - if (mapping[this.$embeds[i]]) {\n - this.$modes[this.$embeds[i]] = new mapping[this.$embeds[i]]();\n + for (var i in mapping) {\n + if (mapping[i]) {\n + this.$embeds.push(i);\n + this.$modes[i] = new mapping[i]();\n }\n }\n \n - var delegations = [\'toggleCommentLines\', \'getNextLineIndent\', \'checkOutdent\', \'autoOutdent\', \'transformAction\'];\n + var delegations = [\'toggleCommentLines\', \'getNextLineIndent\', \'checkOutdent\', \'autoOutdent\', \'transformAction\', \'getCompletions\'];\n \n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n @@ -7821,6 +8317,52 @@ var Mode = function() {\n }\n }\n };\n + \n + this.getKeywords = function(append) {\n + if (!this.completionKeywords) {\n + var rules = this.$tokenizer.rules;\n + var completionKeywords = [];\n + for (var rule in rules) {\n + var ruleItr = rules[rule];\n + for (var r = 0, l = ruleItr.length; r < l; r++) {\n + if (typeof ruleItr[r].token === "string") {\n + if (/keyword|support|storage/.test(ruleItr[r].token))\n + completionKeywords.push(ruleItr[r].regex);\n + }\n + else if (typeof ruleItr[r].token === "object") {\n + for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n + if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n + var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n + completionKeywords.push(rule.substr(1, rule.length - 2));\n + }\n + }\n + }\n + }\n + }\n + this.completionKeywords = completionKeywords;\n + }\n + if (!append)\n + return this.$keywordList;\n + return completionKeywords.concat(this.$keywordList || []);\n + };\n + \n + this.$createKeywordList = function() {\n + if (!this.$highlightRules)\n + this.getTokenizer();\n + return this.$keywordList = this.$highlightRules.$keywordList || [];\n + }\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var keywords = this.$keywordList || this.$createKeywordList();\n + return keywords.map(function(word) {\n + return {\n + name: word,\n + value: word,\n + score: 0,\n + meta: "keyword"\n + };\n + });\n + };\n \n }).call(Mode.prototype);\n \n @@ -7905,6 +8447,10 @@ var Tokenizer = function(rules) {\n };\n \n (function() {\n + this.$setMaxTokenCount = function(m) {\n + MAX_TOKEN_COUNT = m | 0;\n + };\n + \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n @@ -8119,15 +8665,23 @@ var TextHighlightRules = function() {\n (function() {\n \n this.addRules = function(rules, prefix) {\n + if (!prefix) {\n + for (var key in rules)\n + this.$rules[key] = rules[key];\n + return;\n + }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next) {\n - if (typeof rule.next != "string")\n - rule.nextState = prefix + rule.nextState;\n - else\n - rule.next = prefix + rule.next;\n + if (typeof rule.next != "string") {\n + if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n + rule.nextState = prefix + rule.nextState;\n + } else {\n + if (rule.next.indexOf(prefix) !== 0)\n + rule.next = prefix + rule.next;\n + }\n \n }\n }\n @@ -8161,7 +8715,7 @@ var TextHighlightRules = function() {\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n - }\n + };\n \n this.getEmbeds = function() {\n return this.$embeds;\n @@ -8270,6 +8824,10 @@ var TextHighlightRules = function() {\n for (var i = list.length; i--; )\n keywords[list[i]] = className;\n });\n + if (Object.getPrototypeOf(keywords)) {\n + keywords.__proto__ = null;\n + }\n + this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken }\n @@ -8366,30 +8924,7 @@ addUnicodePackage({\n P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",\n Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",\n Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",\n - - -]]></string> </value> - </item> - <item> - <key> <string>next</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="6" aka="AAAAAAAAAAY="> - <pickle> - <global name="Pdata" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> <string encoding="cdata"><![CDATA[ - - Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",\n + Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",\n Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",\n Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21",\n Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F",\n @@ -8577,14 +9112,37 @@ var Document = function(text) {\n };\n this.getTextRange = function(range) {\n if (range.start.row == range.end.row) {\n - return this.$lines[range.start.row]\n + return this.getLine(range.start.row)\n .substring(range.start.column, range.end.column);\n }\n var lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || "").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n - lines[l] = lines[l].substring(0, range.end.column);\n + lines[l] + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + += lines[l].substring(0, range.end.column);\n return lines.join(this.getNewLineCharacter());\n };\n \n @@ -8688,6 +9246,8 @@ var Document = function(text) {\n return end;\n };\n this.remove = function(range) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n range.start = this.$clipPosition(range.start);\n range.end = this.$clipPosition(range.end);\n \n @@ -8771,6 +9331,8 @@ var Document = function(text) {\n this._emit("change", { data: delta });\n };\n this.replace = function(range, text) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n if (text.length == 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n @@ -8850,29 +9412,25 @@ var oop = require("./lib/oop");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n \n var Anchor = exports.Anchor = function(doc, row, column) {\n - this.document = doc;\n -\n + this.$onChange = this.onChange.bind(this);\n + this.attach(doc);\n + \n if (typeof column == "undefined")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n -\n - this.$onChange = this.onChange.bind(this);\n - doc.on("change", this.$onChange);\n };\n \n (function() {\n \n oop.implement(this, EventEmitter);\n -\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n -\n this.getDocument = function() {\n return this.document;\n };\n -\n + this.$insertRight = false;\n this.onChange = function(e) {\n var delta = e.data;\n var range = delta.range;\n @@ -8893,7 +9451,8 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n if (delta.action === "insertText") {\n if (start.row === row && start.column <= column) {\n - if (start.row === end.row) {\n + if (start.column === column && this.$insertRight) {\n + } else if (start.row === end.row) {\n column += end.column - start.column;\n } else {\n column -= start.column;\n @@ -8934,7 +9493,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n this.setPosition(row, column, true);\n };\n -\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n @@ -8961,10 +9519,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n value: pos\n });\n };\n -\n this.detach = function() {\n this.document.removeEventListener("change", this.$onChange);\n };\n + this.attach = function(doc) {\n + this.document = doc || this.document;\n + this.document.on("change", this.$onChange);\n + };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n \n @@ -9010,27 +9571,35 @@ var BackgroundTokenizer = function(tokenizer, editor) {\n if (!self.running) { return; }\n \n var workerStart = new Date();\n - var startLine = self.currentLine;\n + var currentLine = self.currentLine;\n + var endLine = -1;\n var doc = self.doc;\n \n - var processedLines = 0;\n + while (self.lines[currentLine])\n + currentLine++;\n +\n + var startLine = currentLine;\n \n var len = doc.getLength();\n - while (self.currentLine < len) {\n - self.$tokenizeRow(self.currentLine);\n - while (self.lines[self.currentLine])\n - self.currentLine++;\n + var processedLines = 0;\n + self.running = false;\n + while (currentLine < len) {\n + self.$tokenizeRow(currentLine);\n + endLine = currentLine;\n + do {\n + currentLine++;\n + } while (self.lines[currentLine]);\n processedLines ++;\n - if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) {\n - self.fireUpdateEvent(startLine, self.currentLine-1);\n + if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { \n self.running = setTimeout(self.$worker, 20);\n + self.currentLine = currentLine;\n return;\n }\n }\n -\n - self.running = false;\n -\n - self.fireUpdateEvent(startLine, len - 1);\n + self.currentLine = currentLine;\n + \n + if (startLine <= endLine)\n + self.fireUpdateEvent(startLine, endLine);\n };\n };\n \n @@ -9066,6 +9635,11 @@ var BackgroundTokenizer = function(tokenizer, editor) {\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n + \n + this.scheduleStart = function() {\n + if (!this.running)\n + this.running = setTimeout(this.$worker, 700);\n + }\n \n this.$updateOnChange = function(delta) {\n var range = delta.range;\n @@ -9087,7 +9661,6 @@ var BackgroundTokenizer = function(tokenizer, editor) {\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n \n this.stop();\n - this.running = setTimeout(this.$worker, 700);\n };\n this.stop = function() {\n if (this.running)\n @@ -9372,8 +9945,9 @@ function Folding() {\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n - if (startRow == endRow && endColumn - startColumn < 2)\n - throw "The range has to be at least 2 characters width";\n + if (!(startRow < endRow || \n + startRow == endRow && startColumn <= endColumn - 2))\n + throw new Error("The range has to be at least 2 characters width");\n \n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n @@ -9384,7 +9958,7 @@ function Folding() {\n (startFold && !startFold.range.isStart(startRow, startColumn))\n || (endFold && !endFold.range.isEnd(endRow, endColumn))\n ) {\n - throw "A fold can\'t intersect already existing fold" + fold.range + startFold.range;\n + throw new Error("A fold can\'t intersect already existing fold" + fold.range + startFold.range);\n }\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n @@ -9695,18 +10269,23 @@ function Folding() {\n depth = 100000; // JSON.stringify doesn\'t hanle Infinity\n var foldWidgets = this.foldWidgets;\n endRow = endRow || this.getLength();\n - for (var row = startRow || 0; row < endRow; row++) {\n + startRow = startRow || 0;\n + for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != "start")\n continue;\n \n var range = this.getFoldWidgetRange(row);\n - if (range && range.end.row <= endRow) try {\n + var rangeEndRow = range.end.row;\n + if (range && range.isMultiLine()\n + && rangeEndRow <= endRow\n + && range.start.row >= startRow\n + ) try {\n var fold = this.addFold("...", range);\n fold.collapseChildren = depth;\n + row = rangeEndRow;\n } catch(e) {}\n - row = range.end.row;\n }\n };\n this.$foldStyles = {\n @@ -9888,7 +10467,7 @@ function FoldLine(foldData, folds) {\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n - throw "Can\'t add a fold to this FoldLine as it has no connection";\n + throw new Error("Can\'t add a fold to this FoldLine as it has no connection");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n @@ -9910,7 +10489,7 @@ function FoldLine(foldData, folds) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n - throw "Trying to add fold to FoldRow that doesn\'t have a matching row";\n + throw new Error("Trying to add fold to FoldRow that doesn\'t have a matching row");\n }\n fold.foldLine = this;\n }\n @@ -10117,7 +10696,7 @@ oop.inherits(Fold, RangeList);\n return;\n \n if (!this.range.containsRange(fold))\n - throw "A fold can\'t intersect already existing fold" + fold.range + this.range;\n + throw new Error("A fold can\'t intersect already existing fold" + fold.range + this.range);\n consumeRange(fold, this.start);\n \n var row = fold.start.row, column = fold.start.column;\n @@ -10139,7 +10718,7 @@ oop.inherits(Fold, RangeList);\n var afterEnd = this.subFolds[j];\n \n if (cmp == 0)\n - throw "A fold can\'t intersect already existing fold" + fold.range + this.range;\n + throw new Error("A fold can\'t intersect already existing fold" + fold.range + this.range);\n \n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n @@ -10179,30 +10758,7 @@ define(\'ace/range_list\', [\'require\', \'exports\', \'module\' , \'ace/range\' var Range = require("./range").Range;\n var comparePoints = Range.comparePoints;\n \n -var RangeList = functio - -]]></string> </value> - </item> - <item> - <key> <string>next</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="7" aka="AAAAAAAAAAc="> - <pickle> - <global name="Pdata" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> <string encoding="cdata"><![CDATA[ - -n() {\n +var RangeList = function() {\n this.ranges = [];\n };\n \n @@ -10371,11 +10927,16 @@ n() {\n break;\n \n if (r.start.row == startRow && r.start.column >= start.column ) {\n - \n - r.start.column += colDiff;\n - r.start.row += lineDif;\n + if (r.start.column == start.column && this.$insertRight) {\n + } else {\n + r.start.column += colDiff;\n + r.start.row += lineDif;\n + }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n + if (r.end.column == start.column && this.$insertRight) {\n + continue;\n + }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \n if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n r.end.column -= colDiff;\n @@ -10657,7 +11218,30 @@ var Search = function() {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n - }\n + + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + }\n }\n \n if (range) {\n @@ -10876,12 +11460,8 @@ var HashHandler = require("../keyboard/hash_handler").HashHandler;\n var EventEmitter = require("../lib/event_emitter").EventEmitter;\n \n var CommandManager = function(platform, commands) {\n - this.platform = platform;\n - this.commands = this.byName = {};\n - this.commmandKeyBinding = {};\n -\n - this.addCommands(commands);\n -\n + HashHandler.call(this, commands, platform);\n + this.byName = this.commands;\n this.setDefaultHandler("exec", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n @@ -10981,7 +11561,26 @@ var useragent = require("../lib/useragent");\n function HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? "mac" : "win");\n this.commands = {};\n - this.commmandKeyBinding = {};\n + this.commandKeyBinding = {};\n + if (this.__defineGetter__ && this.__defineSetter__ && typeof console != "undefined" && console.error) {\n + var warned = false;\n + var warn = function() {\n + if (!warned) {\n + warned = true;\n + console.error("commmandKeyBinding has too many m\'s. use commandKeyBinding");\n + }\n + };\n + this.__defineGetter__("commmandKeyBinding", function() {\n + warn();\n + return this.commandKeyBinding;\n + });\n + this.__defineSetter__("commmandKeyBinding", function(val) {\n + warn();\n + return this.commandKeyBinding = val;\n + });\n + } else {\n + this.commmandKeyBinding = this.commandKeyBinding;\n + }\n \n this.addCommands(config);\n };\n @@ -11002,7 +11601,7 @@ function HashHandler(config, platform) {\n var name = (typeof command === \'string\' ? command : command.name);\n command = this.commands[name];\n delete this.commands[name];\n - var ckb = this.commmandKeyBinding;\n + var ckb = this.commandKeyBinding;\n for (var hashId in ckb) {\n for (var key in ckb[hashId]) {\n if (ckb[hashId][key] == command)\n @@ -11019,7 +11618,7 @@ function HashHandler(config, platform) {\n return;\n }\n \n - var ckb = this.commmandKeyBinding;\n + var ckb = this.commandKeyBinding;\n key.split("|").forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart, command);\n var hashId = binding.hashId;\n @@ -11030,6 +11629,9 @@ function HashHandler(config, platform) {\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n + if (!command)\n + return;\n + \n if (typeof command === "string")\n return this.bindKey(command, name);\n \n @@ -11092,7 +11694,7 @@ function HashHandler(config, platform) {\n };\n \n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n - var ckbr = this.commmandKeyBinding;\n + var ckbr = this.commandKeyBinding;\n return ckbr[hashId] && ckbr[hashId][keyString];\n };\n \n @@ -11197,13 +11799,15 @@ exports.commands = [{\n bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: "forEach",\n - readOnly: true\n + readOnly: true,\n + group: "fileJump"\n }, {\n name: "gotostart",\n bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: "forEach",\n - readOnly: true\n + readOnly: true,\n + group: "fileJump"\n }, {\n name: "selectup",\n bindKey: bindKey("Shift-Up", "Shift-Up"),\n @@ -11221,13 +11825,15 @@ exports.commands = [{\n bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: "forEach",\n - readOnly: true\n + readOnly: true,\n + group: "fileJump"\n }, {\n name: "gotoend",\n bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: "forEach",\n - readOnly: true\n + readOnly: true,\n + group: "fileJump"\n }, {\n name: "selectdown",\n bindKey: bindKey("Shift-Down", "Shift-Down"),\n @@ -11466,17 +12072,28 @@ exports.commands = [{\n exec: function(editor) { editor.moveLinesDown(); }\n }, {\n name: "del",\n - bindKey: bindKey("Delete", "Delete|Ctrl-D"),\n + bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"),\n exec: function(editor) { editor.remove("right"); },\n multiSelectAction: "forEach"\n }, {\n name: "backspace",\n bindKey: bindKey(\n - "Command-Backspace|Option-Backspace|Shift-Backspace|Backspace",\n - "Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H"\n + "Shift-Backspace|Backspace",\n + "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"\n ),\n exec: function(editor) { editor.remove("left"); },\n multiSelectAction: "forEach"\n +}, {\n + name: "cut_or_delete",\n + bindKey: bindKey("Shift-Delete", null),\n + exec: function(editor) { \n + if (editor.selection.isEmpty()) {\n + editor.remove("left");\n + } else {\n + return false;\n + }\n + },\n + multiSelectAction: "forEach"\n }, {\n name: "removetolinestart",\n bindKey: bindKey("Alt-Backspace", "Command-Backspace"),\n @@ -11560,6 +12177,9 @@ var UndoManager = function() {\n this.execute = function(options) {\n var deltas = options.args[0];\n this.$doc = options.args[1];\n + if (options.merge && this.hasUndo()){\n + deltas = this.$undoStack.pop().concat(deltas);\n + }\n this.$undoStack.push(deltas);\n this.$redoStack = [];\n \n @@ -11615,19 +12235,19 @@ var UndoManager = function() {\n exports.UndoManager = UndoManager;\n });\n \n -define(\'ace/virtual_renderer\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/dom\', \'ace/lib/event\', \'ace/lib/useragent\', \'ace/config\', \'ace/layer/gutter\', \'ace/layer/marker\', \'ace/layer/text\', \'ace/layer/cursor\', \'ace/scrollbar\', \'ace/renderloop\', \'ace/lib/event_emitter\'], function(require, exports, module) {\n +define(\'ace/virtual_renderer\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/dom\', \'ace/lib/useragent\', \'ace/config\', \'ace/layer/gutter\', \'ace/layer/marker\', \'ace/layer/text\', \'ace/layer/cursor\', \'ace/scrollbar\', \'ace/renderloop\', \'ace/lib/event_emitter\'], function(require, exports, module) {\n \n \n var oop = require("./lib/oop");\n var dom = require("./lib/dom");\n -var event = require("./lib/event");\n var useragent = require("./lib/useragent");\n var config = require("./config");\n var GutterLayer = require("./layer/gutter").Gutter;\n var MarkerLayer = require("./layer/marker").Marker;\n var TextLayer = require("./layer/text").Text;\n var CursorLayer = require("./layer/cursor").Cursor;\n -var ScrollBar = require("./scrollbar").ScrollBar;\n +var ScrollBarH = require("./scrollbar").ScrollBarH;\n +var ScrollBarV = require("./scrollbar").ScrollBarV;\n var RenderLoop = require("./renderloop").RenderLoop;\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n var editorCss = ".ace_editor {\\\n @@ -11637,6 +12257,10 @@ font-family: \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code font-size: 12px;\\\n line-height: normal;\\\n color: black;\\\n +-ms-user-select: none;\\\n +-moz-user-select: none;\\\n +-webkit-user-select: none;\\\n +user-select: none;\\\n }\\\n .ace_scroller {\\\n position: absolute;\\\n @@ -11652,6 +12276,25 @@ position: absolute;\\\n box-sizing: border-box;\\\n cursor: text;\\\n }\\\n +.ace_dragging, .ace_dragging * {\\\n +cursor: move !important;\\\n +}\\\n +.ace_dragging .ace_scroller:before{\\\n +position: absolute;\\\n +top: 0;\\\n +left: 0;\\\n +right: 0;\\\n +bottom: 0;\\\n +content: \'\';\\\n +background: rgba(250, 250, 250, 0.01);\\\n +z-index: 1000;\\\n +}\\\n +.ace_dragging.ace_dark .ace_scroller:before{\\\n +background: rgba(0, 0, 0, 0.01);\\\n +}\\\n +.ace_selecting, .ace_selecting * {\\\n +cursor: text !important;\\\n +}\\\n .ace_gutter {\\\n position: absolute;\\\n overflow : hidden;\\\n @@ -11694,15 +12337,26 @@ background-image: url(\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQC .ace_scrollbar {\\\n position: absolute;\\\n overflow-x: hidden;\\\n -overflow-y: scroll;\\\n +overflow-y: auto;\\\n right: 0;\\\n top: 0;\\\n bottom: 0;\\\n +z-index: 6;\\\n }\\\n .ace_scrollbar-inner {\\\n position: absolute;\\\n -width: 1px;\\\n +cursor: text;\\\n +left: 0;\\\n +top: 0;\\\n +}\\\n +.ace_scrollbar-h {\\\n +position: absolute;\\\n +overflow-x: auto;\\\n +overflow-y: hidden;\\\n +right: 0;\\\n left: 0;\\\n +bottom: 0;\\\n +z-index: 6;\\\n }\\\n .ace_print-margin {\\\n position: absolute;\\\n @@ -11724,12 +12378,14 @@ overflow: hidden;\\\n font: inherit;\\\n padding: 0 1px;\\\n margin: 0 -1px;\\\n +text-indent: -1em;\\\n }\\\n .ace_text-input.ace_composition {\\\n background: #f8f8f8;\\\n color: #111;\\\n z-index: 1000;\\\n opacity: 1;\\\n +text-indent: 0;\\\n }\\\n .ace_layer {\\\n z-index: 1;\\\n @@ -11767,6 +12423,14 @@ position: absolute;\\\n -moz-box-sizing: border-box;\\\n -webkit-box-sizing: border-box;\\\n box-sizing: border-box;\\\n +border-left: 2px solid\\\n +}\\\n +.ace_slim-cursors .ace_cursor {\\\n +border-left-width: 1px;\\\n +}\\\n +.ace_overwrite-cursors .ace_cursor {\\\n +border-left-width: 0px;\\\n +border-bottom: 1px solid;\\\n }\\\n .ace_hidden-cursors .ace_cursor {\\\n opacity: 0.2;\\\n @@ -11787,7 +12451,7 @@ border-left-width: 1px;\\\n .ace_line {\\\n white-space: nowrap;\\\n }\\\n -.ace_marker-layer .ace_step {\\\n +.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\n position: absolute;\\\n z-index: 3;\\\n }\\\n @@ -11840,9 +12504,6 @@ url(\\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%0 background-repeat: no-repeat, repeat-x;\\\n background-position: center center, top left;\\\n }\\\n -.ace_editor.ace_dragging .ace_content {\\\n -cursor: move;\\\n -}\\\n .ace_gutter-tooltip {\\\n background-color: #FFF;\\\n background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\n @@ -11855,7 +12516,7 @@ display: inline-block;\\\n max-width: 500px;\\\n padding: 4px;\\\n position: fixed;\\\n -z-index: 300;\\\n +z-index: 999999;\\\n -moz-box-sizing: border-box;\\\n -webkit-box-sizing: border-box;\\\n box-sizing: border-box;\\\n @@ -11885,30 +12546,7 @@ border-radius: 3px;\\\n border: 1px solid transparent;\\\n cursor: pointer;\\\n }\\\n -.ace_foldin - -]]></string> </value> - </item> - <item> - <key> <string>next</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAg=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="8" aka="AAAAAAAAAAg="> - <pickle> - <global name="Pdata" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> <string encoding="cdata"><![CDATA[ - -g-enabled .ace_fold-widget {\\\n +.ace_folding-enabled .ace_fold-widget {\\\n display: inline-block; \\\n }\\\n .ace_fold-widget.ace_end {\\\n @@ -11984,6 +12622,16 @@ font-weight: normal;\\\n .ace_italic {\\\n font-style: italic;\\\n }\\\n +.ace_error-marker {\\\n +background-color: rgba(255, 0, 0,0.2);\\\n +position: absolute;\\\n +z-index: 9;\\\n +}\\\n +.ace_highlight-marker {\\\n +background-color: rgba(255, 255, 0,0.2);\\\n +position: absolute;\\\n +z-index: 8;\\\n +}\\\n ";\n \n dom.importCssString(editorCss, "ace_editor");\n @@ -11992,7 +12640,7 @@ var VirtualRenderer = function(container, theme) {\n var _self = this;\n \n this.container = container || dom.createElement("div");\n - this.$keepTextAreaAtCursor = !useragent.isIE;\n + this.$keepTextAreaAtCursor = true;\n \n dom.addCssClass(this.container, "ace_editor");\n \n @@ -12022,21 +12670,22 @@ var VirtualRenderer = function(container, theme) {\n \n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n + this.$vScroll = false;\n \n - this.scrollBar = new ScrollBar(this.container);\n - this.scrollBar.addEventListener("scroll", function(e) {\n + this.scrollBar = \n + this.scrollBarV = new ScrollBarV(this.container, this);\n + this.scrollBarH = new ScrollBarH(this.container, this);\n + this.scrollBarV.addEventListener("scroll", function(e) {\n + if (!_self.$scrollAnimation)\n + _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n + });\n + this.scrollBarH.addEventListener("scroll", function(e) {\n if (!_self.$scrollAnimation)\n - _self.session.setScrollTop(e.data);\n + _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n \n this.scrollTop = 0;\n this.scrollLeft = 0;\n -\n - event.addListener(this.scroller, "scroll", function() {\n - var scrollLeft = _self.scroller.scrollLeft;\n - _self.scrollLeft = scrollLeft;\n - _self.session.setScrollLeft(scrollLeft);\n - });\n \n this.cursorPos = {\n row : 0,\n @@ -12046,6 +12695,7 @@ var VirtualRenderer = function(container, theme) {\n this.$textLayer.addEventListener("changeCharacterSize", function() {\n _self.updateCharacterSize();\n _self.onResize(true);\n + _self._signal("changeCharacterSize");\n });\n \n this.$size = {\n @@ -12061,13 +12711,22 @@ var VirtualRenderer = function(container, theme) {\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n - lineHeight : 1,\n - characterWidth : 1,\n + lineHeight : 0,\n + characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1\n };\n + \n + this.scrollMargin = {\n + left: 0,\n + right: 0,\n + top: 0,\n + bottom: 0,\n + v: 0,\n + h: 0\n + };\n \n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n @@ -12103,7 +12762,9 @@ var VirtualRenderer = function(container, theme) {\n this.setStyle("ace_nobold", !this.$allowBoldFonts);\n }\n \n + this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n + this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n };\n @@ -12160,78 +12821,123 @@ var VirtualRenderer = function(container, theme) {\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n - this.onResize = function(force, gutterWidth, width, height) {\n - var changes = 0;\n - var size = this.$size;\n \n + this.$changes = 0;\n + this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n - else if (this.resizing > 1)\n + else if (this.resizing > 0)\n this.resizing++;\n else\n - this.resizing = force ? 1 : 0;\n - if (!height)\n - height = dom.getInnerHeight(this.container);\n + this.resizing = force ? 1 : 0;\n + var el = this.container;\n + if (!height)\n + height = el.clientHeight || el.scrollHeight;\n + if (!width)\n + width = el.clientWidth || el.scrollWidth;\n +\n + var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n + \n + if (!this.$size.scrollerHeight || (!width && !height))\n + return this.resizing = 0;\n +\n + if (force)\n + this.$gutterLayer.$padding = null;\n +\n + if (force)\n + this.$renderChanges(changes, true);\n + else\n + this.$loop.schedule(changes | this.$changes);\n \n + if (this.resizing)\n + this.resizing = 0;\n + };\n + \n + this.$updateCachedSize = function(force, gutterWidth, width, height) {\n + var changes = 0;\n + var size = this.$size;\n + var oldSize = {\n + width: size.width,\n + height: size.height,\n + scrollerHeight: size.scrollerHeight,\n + scrollerWidth: size.scrollerWidth\n + };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes = this.CHANGE_SIZE;\n \n - size.scrollerHeight = this.scroller.clientHeight;\n - if (force || !size.scrollerHeight) {\n - size.scrollerHeight = size.height;\n - if (this.$horizScroll)\n - size.scrollerHeight -= this.scrollBar.getWidth();\n - }\n - this.scrollBar.setHeight(size.scrollerHeight);\n + size.scrollerHeight = size.height;\n + if (this.$horizScroll)\n + size.scrollerHeight -= this.scrollBarH.getHeight();\n + this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px";\n \n if (this.session) {\n this.session.setScrollTop(this.getScrollTop());\n - changes = changes | this.CHANGE_FULL;\n + changes = changes | this.CHANGE_SCROLL;\n }\n }\n \n - if (!width)\n - width = dom.getInnerWidth(this.container);\n -\n - if (width && (force || this.resizing > 1 || size.width != width)) {\n + if (width && (force || size.width != width)) {\n changes = this.CHANGE_SIZE;\n size.width = width;\n -\n - var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n + \n + if (gutterWidth == null)\n + gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n + \n + this.gutterWidth = gutterWidth;\n + \n + this.scrollBarH.element.style.left = \n this.scroller.style.left = gutterWidth + "px";\n - size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth());\n - this.scroller.style.right = this.scrollBar.getWidth() + "px";\n + size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \n + \n + this.scrollBarH.element.style.right = \n + this.scroller.style.right = this.scrollBarV.getWidth() + "px";\n + this.scroller.style.bottom = this.scrollBarH.getHeight() + "px";\n \n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\n changes = changes | this.CHANGE_FULL;\n }\n + \n + if (changes)\n + this._signal("resize", oldSize);\n \n - if (!this.$size.scrollerHeight)\n - return;\n -\n - if (force)\n - this.$renderChanges(changes, true);\n - else\n - this.$loop.schedule(changes);\n -\n - if (force)\n - this.$gutterLayer.$padding = null;\n -\n - if (force)\n - delete this.resizing;\n + return changes;\n };\n \n this.onGutterResize = function() {\n - var width = this.$size.width;\n - var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n - this.scroller.style.left = gutterWidth + "px";\n - this.$size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth());\n + var gutterWidth = this.$showGutter ? this.$gutter.offsetWidt + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAg=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="8" aka="AAAAAAAAAAg="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +h : 0;\n + if (gutterWidth != this.gutterWidth)\n + this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n \n if (this.session.getUseWrapMode() && this.adjustWrapLimit())\n this.$loop.schedule(this.CHANGE_FULL);\n - else\n + else {\n + this.$computeLayerConfig();\n this.$loop.schedule(this.CHANGE_MARKER);\n + }\n };\n this.adjustWrapLimit = function() {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n @@ -12388,41 +13094,73 @@ var VirtualRenderer = function(container, theme) {\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n + \n + this.setScrollMargin = function(top, bottom, left, right) {\n + var sm = this.scrollMargin;\n + sm.top = top|0;\n + sm.bottom = bottom|0;\n + sm.right = right|0;\n + sm.left = left|0;\n + sm.v = sm.top + sm.bottom;\n + sm.h = sm.left + sm.right;\n + this.updateFull();\n + };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption("hScrollBarAlwaysVisible", alwaysVisible);\n };\n + this.getVScrollBarAlwaysVisible = function() {\n + return this.$hScrollBarAlwaysVisible;\n + };\n + this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n + this.setOption("vScrollBarAlwaysVisible", alwaysVisible);\n + };\n \n - this.$updateScrollBar = function() {\n - this.scrollBar.setInnerHeight(this.layerConfig.maxHeight);\n - this.scrollBar.setScrollTop(this.scrollTop);\n + this.$updateScrollBarV = function() {\n + this.scrollBarV.setInnerHeight(this.layerConfig.maxHeight + this.scrollMargin.v);\n + this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n + };\n + this.$updateScrollBarH = function() {\n + this.scrollBarH.setInnerWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n + this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$renderChanges = function(changes, force) {\n - if (!force && (!changes || !this.session || !this.container.offsetWidth))\n - return;\n -\n + if (this.$changes) {\n + changes |= this.$changes;\n + this.$changes = 0;\n + }\n + if ((!this.session || !this.container.offsetWidth) || (!changes && !force)) {\n + this.$changes |= changes;\n + return; \n + } \n + if (!this.$size.width) {\n + this.$changes |= changes;\n + return this.onResize(true);\n + }\n + if (!this.lineHeight) {\n + this.$textLayer.checkForSizeChanges();\n + }\n + \n this._signal("beforeRender");\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n - changes & this.CHANGE_SCROLL\n + changes & this.CHANGE_SCROLL ||\n + changes & this.CHANGE_H_SCROLL\n )\n - this.$computeLayerConfig();\n + changes |= this.$computeLayerConfig();\n if (changes & this.CHANGE_H_SCROLL) {\n - this.scroller.scrollLeft = this.scrollLeft;\n - var scrollLeft = this.scroller.scrollLeft;\n - this.scrollLeft = scrollLeft;\n - this.session.setScrollLeft(scrollLeft);\n -\n - this.scroller.className = this.scrollLeft == 0 ? "ace_scroller" : "ace_scroller ace_scroll-left";\n + this.$updateScrollBarH();\n + this.content.style.marginLeft = -this.scrollLeft + "px";\n + this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left";\n }\n if (changes & this.CHANGE_FULL) {\n - this.$textLayer.checkForSizeChanges();\n - this.$updateScrollBar();\n + this.$updateScrollBarV();\n + this.$updateScrollBarH();\n this.$textLayer.update(this.layerConfig);\n if (this.$showGutter)\n this.$gutterLayer.update(this.layerConfig);\n @@ -12435,6 +13173,7 @@ var VirtualRenderer = function(container, theme) {\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n + this.$updateScrollBarV();\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(this.layerConfig);\n else\n @@ -12447,7 +13186,6 @@ var VirtualRenderer = function(container, theme) {\n this.$cursorLayer.update(this.layerConfig);\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this.$moveTextAreaToCursor();\n - this.$updateScrollBar();\n this._signal("afterRender");\n return;\n }\n @@ -12480,33 +13218,83 @@ var VirtualRenderer = function(container, theme) {\n this.$markerBack.update(this.layerConfig);\n }\n \n - if (changes & this.CHANGE_SIZE)\n - this.$updateScrollBar();\n + if (changes & this.CHANGE_SIZE || changes & this.CHANGE_LINES) {\n + this.$updateScrollBarV();\n + this.$updateScrollBarH();\n + }\n \n this._signal("afterRender");\n };\n \n + \n + this.$autosize = function(height, width) {\n + var height = this.session.getScreenLength() * this.lineHeight;\n + var maxHeight = this.$maxLines * this.lineHeight;\n + var desiredHeight = Math.max(\n + (this.$minLines||1) * this.lineHeight,\n + Math.min(maxHeight, height)\n + );\n + var vScroll = height > maxHeight;\n + \n + if (desiredHeight != this.desiredHeight ||\n + this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n + if (vScroll != this.$vScroll) {\n + this.$vScroll = vScroll;\n + this.scrollBarV.setVisible(vScroll);\n + }\n + \n + var w = this.container.clientWidth;\n + this.container.style.height = desiredHeight + "px";\n + this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n + this.desiredHeight = desiredHeight;\n + }\n + };\n + \n this.$computeLayerConfig = function() {\n - if (!this.$size.scrollerHeight)\n - return this.onResize(true);\n + if (this.$maxLines && this.lineHeight > 1)\n + this.$autosize();\n \n var session = this.session;\n + \n + var hideScrollbars = this.$size.height <= 2 * this.lineHeight;\n + var screenLines = this.session.getScreenLength()\n + var maxHeight = screenLines * this.lineHeight;\n \n var offset = this.scrollTop % this.lineHeight;\n var minHeight = this.$size.scrollerHeight + this.lineHeight;\n \n var longestLine = this.$getLongestLine();\n + \n + var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n + this.$size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n \n - var horizScroll = this.$hScrollBarAlwaysVisible || this.$size.scrollerWidth - longestLine < 0;\n - var horizScrollChanged = this.$horizScroll !== horizScroll;\n - this.$horizScroll = horizScroll;\n - if (horizScrollChanged) {\n - this.scroller.style.overflowX = horizScroll ? "scroll" : "hidden";\n - if (!horizScroll)\n - this.session.setScrollLeft(0);\n + var hScrollChanged = this.$horizScroll !== horizScroll;\n + if (hScrollChanged) {\n + this.$horizScroll = horizScroll;\n + this.scrollBarH.setVisible(horizScroll);\n + }\n + \n + if (!this.$maxLines && this.$scrollPastEnd) {\n + if (this.scrollTop > maxHeight - this.$size.scrollerHeight)\n + maxHeight += Math.min(\n + (this.$size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd,\n + this.scrollTop - maxHeight + this.$size.scrollerHeight\n + );\n + }\n + \n + var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n + this.$size.scrollerHeight - maxHeight < 0);\n + var vScrollChanged = this.$vScroll !== vScroll;\n + if (vScrollChanged) {\n + this.$vScroll = vScroll;\n + this.scrollBarV.setVisible(vScroll);\n }\n - var maxHeight = this.session.getScreenLength() * this.lineHeight;\n - this.session.setScrollTop(Math.max(0, Math.min(this.scrollTop, maxHeight - this.$size.scrollerHeight)));\n + \n + this.session.setScrollTop(Math.max(-this.scrollMargin.top,\n + Math.min(this.scrollTop, maxHeight - this.$size.scrollerHeight + this.scrollMargin.v)));\n +\n + this.session.setScrollLeft(Math.max(-this.scrollMargin.left, Math.min(this.scrollLeft, \n + longestLine + 2 * this.$padding - this.$size.scrollerWidth + this.scrollMargin.h)));\n \n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n @@ -12528,6 +13316,14 @@ var VirtualRenderer = function(container, theme) {\n \n offset = this.scrollTop - firstRowScreen * lineHeight;\n \n + var changes = 0;\n + if (hScrollChanged || vScrollChanged) {\n + changes = this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n + this._signal("scrollbarVisibilityChanged");\n + if (vScrollChanged)\n + longestLine = this.$getLongestLine();\n + }\n + \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n @@ -12546,8 +13342,8 @@ var VirtualRenderer = function(container, theme) {\n this.content.style.marginTop = (-offset) + "px";\n this.content.style.width = longestLine + 2 * this.$padding + "px";\n this.content.style.height = minHeight + "px";\n - if (horizScrollChanged)\n - this.onResize(true);\n +\n + return changes;\n };\n \n this.$updateLines = function() {\n @@ -12571,7 +13367,7 @@ var VirtualRenderer = function(container, theme) {\n \n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n - if (this.$textLayer.showInvisibles)\n + if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n \n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n @@ -12619,12 +13415,18 @@ var VirtualRenderer = function(container, theme) {\n \n var left = pos.left;\n var top = pos.top;\n + \n + var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n - if (this.scrollTop > top) {\n + if (scrollTop > top) {\n if (offset)\n top -= offset * this.$size.scrollerHeight;\n + if (top == 0)\n + top = - this.scrollMargin.top;\n + else if (top == 0)\n + top = + this.scrollMargin.bottom;\n this.session.setScrollTop(top);\n - } else if (this.scrollTop + this.$size.scrollerHeight < top + this.lineHeight) {\n + } else if (scrollTop + this.$size.scrollerHeight < top + this.lineHeight) {\n if (offset)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n @@ -12634,10 +13436,12 @@ var VirtualRenderer = function(container, theme) {\n \n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n - left = 0;\n + left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n + } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n + this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n @@ -12697,29 +13501,42 @@ var VirtualRenderer = function(container, theme) {\n \n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n - if (this.$animatedScroll) {\n - var _self = this;\n - var steps = _self.$calcSteps(fromValue, toValue);\n - this.$scrollAnimation = {from: fromValue, to: toValue};\n -\n - clearInterval(this.$timer);\n -\n - _self.session.setScrollTop(steps.shift());\n - this.$timer = setInterval(function() {\n - if (steps.length) {\n - _self.session.setScrollTop(steps.shift());\n - _self.session.$scrollTop = toValue;\n - } else if (toValue != null) {\n - _self.session.$scrollTop = -1;\n - _self.session.setScrollTop(toValue);\n - toValue = null;\n - } else {\n - _self.$timer = clearInterval(_self.$timer);\n - _self.$scrollAnimation = null;\n - callback && callback();\n - }\n - }, 10);\n + if (!this.$animatedScroll)\n + return;\n + var _self = this;\n + \n + if (fromValue == toValue)\n + return;\n + \n + if (this.$scrollAnimation) {\n + var oldSteps = this.$scrollAnimation.steps;\n + if (oldSteps.length) {\n + fromValue = oldSteps[0];\n + if (fromValue == toValue)\n + return;\n + }\n }\n + \n + var steps = _self.$calcSteps(fromValue, toValue);\n + this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n +\n + clearInterval(this.$timer);\n +\n + _self.session.setScrollTop(steps.shift());\n + this.$timer = setInterval(function() {\n + if (steps.length) {\n + _self.session.setScrollTop(steps.shift());\n + _self.session.$scrollTop = toValue;\n + } else if (toValue != null) {\n + _self.session.$scrollTop = -1;\n + _self.session.setScrollTop(toValue);\n + toValue = null;\n + } else {\n + _self.$timer = clearInterval(_self.$timer);\n + _self.$scrollAnimation = null;\n + callback && callback();\n + }\n + }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n @@ -12728,21 +13545,29 @@ var VirtualRenderer = function(container, theme) {\n }\n };\n this.scrollToX = function(scrollLeft) {\n - if (scrollLeft < 0)\n - scrollLeft = 0;\n -\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n + this.scrollTo = function(x, y) {\n + this.session.setScrollTop(y);\n + this.session.setScrollLeft(y);\n + };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function(deltaX, deltaY) {\n - if (deltaY < 0 && this.session.getScrollTop() >= 1)\n + if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n + return true;\n + if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n + - this.layerConfig.maxHeight - (this.$size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n + < -1 + this.scrollMargin.bottom)\n return true;\n - if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1)\n + if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n + return true;\n + if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n + - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n \n @@ -12810,7 +13635,7 @@ var VirtualRenderer = function(container, theme) {\n this.textarea.style.cssText = this.$composition.cssText;\n this.$composition = null;\n };\n - this.setTheme = function(theme) {\n + this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeValue = theme;\n _self._dispatchEvent(\'themeChange\',{theme:theme});\n @@ -12824,7 +13649,7 @@ var VirtualRenderer = function(container, theme) {\n \n function afterLoad(module) {\n if (_self.$themeValue != theme)\n - return;\n + return cb && cb();\n if (!module.cssClass)\n return;\n dom.importCssString(\n @@ -12841,7 +13666,7 @@ var VirtualRenderer = function(container, theme) {\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, "ace_dark", module.isDark);\n \n - var padding = module.padding || 4;\n + var padding = "padding" in module ? module.padding : 4;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n if (_self.$size) {\n @@ -12849,18 +13674,22 @@ var VirtualRenderer = function(container, theme) {\n _self.onResize();\n }\n \n - _self._dispatchEvent(\'themeLoaded\',{theme:module});\n + _self._dispatchEvent(\'themeLoaded\', {theme:module});\n + cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeValue;\n };\n - this.setStyle = function setStyle(style, include) {\n + this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include != false);\n };\n - this.unsetStyle = function unsetStyle(style) {\n + this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n + this.setMouseCursor = function(cursorStyle) {\n + this.content.style.cursor = cursorStyle;\n + };\n this.destroy = function() {\n this.$textLayer.destroy();\n this.$cursorLayer.destroy();\n @@ -12938,13 +13767,19 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", {\n value: true\n },\n hScrollBarAlwaysVisible: {\n - set: function(alwaysVisible) {\n - this.$hScrollBarAlwaysVisible = alwaysVisible;\n + set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n + vScrollBarAlwaysVisible: {\n + set: function(val) {\n + if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n + this.$loop.schedule(this.CHANGE_SCROLL);\n + },\n + initialValue: false\n + },\n fontSize: {\n set: function(size) {\n if (typeof size == "number")\n @@ -12959,6 +13794,33 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n + },\n + maxLines: {\n + set: function(val) {\n + this.updateFull();\n + }\n + },\n + minLines: {\n + set: function(val) {\n + this.updateFull();\n + }\n + },\n + scrollPastEnd: {\n + set: function(val) {\n + val = +val || 0;\n + if (this.$scrollPastEnd == val)\n + return;\n + this.$scrollPastEnd = val;\n + this.$loop.schedule(this.CHANGE_SCROLL);\n + },\n + initialValue: 0,\n + handlesSet: true\n + },\n + fixedWidthGutter: {\n + set: function(val) {\n + this.$gutterLayer.$fixedWidth = !!val;\n + this.$loop.schedule(this.CHANGE_GUTTER);\n + }\n }\n });\n \n @@ -12983,6 +13845,8 @@ var Gutter = function(parentEl) {\n \n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n +\n + this.$cells = [];\n };\n \n (function() {\n @@ -13052,11 +13916,9 @@ var Gutter = function(parentEl) {\n };\n \n this.update = function(config) {\n - var emptyAnno = {className: ""};\n - var html = [];\n - var i = config.firstRow;\n + var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n - var fold = this.session.getNextFoldLine(i);\n + var fold = this.session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var foldWidgets = this.$showFoldWidgets && this.session.foldWidgets;\n var breakpoints = this.session.$breakpoints;\n @@ -13064,57 +13926,100 @@ var Gutter = function(parentEl) {\n var firstLineNumber = this.session.$firstLineNumber;\n var lastLineNumber = 0;\n \n + var cell = null;\n + var index = -1;\n + var row = firstRow;\n while (true) {\n - if(i > foldStart) {\n - i = fold.end.row + 1;\n - fold = this.session.getNextFoldLine(i, fold);\n - foldStart = fold ?fold.start.row :Infinity;\n + if (row > foldStart) {\n + row = fold.end.row + 1;\n + fold = this.session.getNextFoldLine(row, fold);\n + foldStart = fold ? fold.start.row : Infinity;\n }\n - if(i > lastRow)\n + if (row > lastRow) {\n + while (this.$cells.length > index + 1) {\n + cell = this.$cells.pop();\n + this.element.removeChild(cell.element);\n + }\n break;\n + }\n \n - var annotation = this.$annotations[i] || emptyAnno;\n - html.push(\n - "<div class=\'ace_gutter-cell ",\n - breakpoints[i] || "", decorations[i] || "", annotation.className,\n - "\' style=\'height:", this.session.getRowLength(i) * config.lineHeight, "px;\'>", \n - lastLineNumber = i + firstLineNumber\n - );\n + cell = this.$cells[++index];\n + if (!cell) {\n + cell = {element: null, textNode: null, foldWidget: null};\n + cell.element = dom.createElement("div");\n + cell.textNode = document.createTextNode(\'\');\n + cell.element.appendChild(cell.textNode);\n + this.element.appendChild(cell.element);\n + this.$cells[index] = cell;\n + }\n +\n + var className = "ace_gutter-cell ";\n + if (breakpoints[row])\n + className += breakpoints[row];\n + if (decorations[row])\n + className += decorations[row];\n + if (this.$annotations[row])\n + className += this.$annotations[row].className;\n + if (cell.element.className != className)\n + cell.element.className = className;\n +\n + var height = this.session.getRowLength(row) * config.lineHeight + "px";\n + if (height != cell.element.style.height)\n + cell.element.style.height = height;\n +\n + var text = lastLineNumber = row + firstLineNumber;\n + if (text != cell.textNode.data)\n + cell.textNode.data = text;\n \n if (foldWidgets) {\n - var c = foldWidgets[i];\n + var c = foldWidgets[row];\n if (c == null)\n - c = foldWidgets[i] = this.session.getFoldWidget(i);\n - if (c)\n - html.push(\n - "<span class=\'ace_fold-widget ace_", c,\n - c == "start" && i == foldStart && i < fold.end.row ? " ace_closed" : " ace_open",\n - "\' style=\'height:", config.lineHeight, "px",\n - "\'></span>"\n - );\n + c = foldWidgets[row] = this.session.getFoldWidget(row);\n }\n \n - html.push("</div>");\n + if (c) {\n + if (!cell.foldWidget) {\n + cell.foldWidget = dom.createElement("span");\n + cell.element.appendChild(cell.foldWidget);\n + }\n + var className = "ace_fold-widget ace_" + c;\n + if (c == "start" && row == foldStart && row < fold.end.row)\n + className += " ace_closed";\n + else\n + className += " ace_open";\n + if (cell.foldWidget.className != className)\n + cell.foldWidget.className = className;\n +\n + var height = config.lineHeight + "px";\n + if (cell.foldWidget.style.height != height)\n + cell.foldWidget.style.height = height;\n + } else {\n + if (cell.foldWidget != null) {\n + cell.element.removeChild(cell.foldWidget);\n + cell.foldWidget = null;\n + }\n + }\n \n - i++;\n + row++;\n }\n \n - this.element = dom.setInnerHtml(this.element, html.join(""));\n this.element.style.height = config.minHeight + "px";\n - \n - if (this.session.$useWrapMode)\n +\n + if (this.$fixedWidth || this.session.$useWrapMode)\n lastLineNumber = this.session.getLength();\n - \n - var gutterWidth = ("" + lastLineNumber).length * config.characterWidth;\n +\n + var gutterWidth = lastLineNumber.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n - if (gutterWidth !== this.gutterWidth) {\n + if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.style.width = Math.ceil(this.gutterWidth) + "px";\n this._emit("changeGutterWidth", gutterWidth);\n }\n };\n \n + this.$fixedWidth = false;\n + \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n @@ -13134,9 +14039,9 @@ var Gutter = function(parentEl) {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n - this.$padding = {}\n - this.$padding.left = parseInt(style.paddingLeft) + 1;\n - this.$padding.right = parseInt(style.paddingRight); \n + this.$padding = {};\n + this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n + this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\n };\n \n @@ -13365,11 +14270,11 @@ var Text = function(parentEl) {\n };\n \n this.getLineHeight = function() {\n - return this.$characterSize.height || 1;\n + return this.$characterSize.height || 0;\n };\n \n this.getCharacterWidth = function() {\n - return this.$characterSize.width || 1;\n + return this.$characterSize.width || 0;\n };\n \n this.checkForSizeChanges = function() {\n @@ -13452,8 +14357,7 @@ var Text = function(parentEl) {\n style.position = "fixed";\n style.overflow = "visible";\n style.whiteSpace = "nowrap";\n -\n - measureNode.innerHTML = "X";\n + measureNode.innerHTML = lang.stringRepeat("X", 100);\n \n var container = this.element.parentNode;\n while (container && !dom.hasCssClass(container, "ace_editor"))\n @@ -13469,7 +14373,7 @@ var Text = function(parentEl) {\n \n var size = {\n height: rect.height,\n - width: rect.width\n + width: rect.width / 100\n };\n if (size.width == 0 || size.height == 0)\n return null;\n @@ -13739,39 +14643,16 @@ var Text = function(parentEl) {\n return screenColumn + value.length;\n };\n \n - this.renderIndentGuide = function(stringBuilder, value) {\n + this.renderIndentGuide = function(stringBuilder, value, max) {\n var cols = value.search(this.$indentGuideRe);\n - if (cols <= 0)\n + if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == " ") {\n cols -= cols % this.tabSize;\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize));\n return value.substr(cols);\n } else if (value[0] == "\\t") {\n - stringBuilde - -]]></string> </value> - </item> - <item> - <key> <string>next</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAk=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="9" aka="AAAAAAAAAAk="> - <pickle> - <global name="Pdata" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> <string encoding="cdata"><![CDATA[ - -r.push(lang.stringRepeat(this.$tabStrings["\\t"], cols));\n + stringBuilder.push(lang.stringRepeat(this.$tabStrings["\\t"], cols));\n return value.substr(cols);\n }\n return value;\n @@ -13788,7 +14669,7 @@ r.push(lang.stringRepeat(this.$tabStrings["\\t"], cols));\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n - value = this.renderIndentGuide(stringBuilder, value);\n + value = this.renderIndentGuide(stringBuilder, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n @@ -13846,7 +14727,30 @@ r.push(lang.stringRepeat(this.$tabStrings["\\t"], cols));\n foldLine = this.session.getFoldLine(row);\n \n if (foldLine)\n - var tokens = this.$getFoldLineTokens(row, foldLine);\n + var tokens = this.$getFoldLineTokens(row, f + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAk=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="9" aka="AAAAAAAAAAk="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +oldLine);\n else\n var tokens = this.session.getTokens(row);\n \n @@ -14149,7 +15053,7 @@ var oop = require("./lib/oop");\n var dom = require("./lib/dom");\n var event = require("./lib/event");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n -var ScrollBar = function(parent) {\n +var ScrollBarV = function(parent, renderer) {\n this.element = dom.createElement("div");\n this.element.className = "ace_scrollbar";\n \n @@ -14158,40 +15062,111 @@ var ScrollBar = function(parent) {\n this.element.appendChild(this.inner);\n \n parent.appendChild(this.element);\n + renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n + renderer.$scrollbarWidth = \n + this.width = dom.scrollbarWidth(parent.ownerDocument);\n + this.fullWidth = this.width;\n + this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + "px";\n + this.setVisible(false);\n + this.element.style.overflowY = "scroll";\n + \n + event.addListener(this.element, "scroll", this.onScrollV.bind(this));\n + event.addListener(this.element, "mousedown", event.preventDefault);\n +};\n +\n +var ScrollBarH = function(parent, renderer) {\n + this.element = dom.createElement("div");\n + this.element.className = "ace_scrollbar-h";\n +\n + this.inner = dom.createElement("div");\n + this.inner.className = "ace_scrollbar-inner";\n + this.element.appendChild(this.inner);\n \n - event.addListener(this.element, "scroll", this.onScroll.bind(this));\n + parent.appendChild(this.element);\n + this.height = renderer.$scrollbarWidth;\n + this.fullHeight = this.height;\n + this.inner.style.height =\n + this.element.style.height = (this.height || 15) + 5 + "px";\n + this.setVisible(false);\n + this.element.style.overflowX = "scroll";\n +\n + event.addListener(this.element, "scroll", this.onScrollH.bind(this));\n + event.addListener(this.element, "mousedown", event.preventDefault);\n };\n \n (function() {\n oop.implement(this, EventEmitter);\n - this.onScroll = function() {\n +\n + this.setVisible = function(show) {\n + if (show) {\n + this.element.style.display = "";\n + if (this.fullWidth)\n + this.width = this.fullWidth;\n + if (this.fullHeight)\n + this.height = this.fullHeight;\n + } else {\n + this.element.style.display = "none";\n + this.height = this.width = 0;\n + }\n + };\n + this.onScrollV = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n this._emit("scroll", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n + this.onScrollH = function() {\n + if (!this.skipEvent) {\n + this.scrollLeft = this.element.scrollLeft;\n + this._emit("scroll", {data: this.scrollLeft});\n + }\n + this.skipEvent = false;\n + };\n this.getWidth = function() {\n return this.width;\n };\n +\n + this.getHeight = function() {\n + return this.height;\n + };\n this.setHeight = function(height) {\n this.element.style.height = height + "px";\n };\n + \n + this.setWidth = function(width) {\n + this.element.style.width = width + "px";\n + };\n this.setInnerHeight = function(height) {\n this.inner.style.height = height + "px";\n };\n + \n + this.setInnerWidth = function(width) {\n + this.inner.style.width = width + "px";\n + };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = this.element.scrollTop = scrollTop;\n }\n };\n + this.setScrollLeft = function(scrollLeft) {\n + if (this.scrollLeft != scrollLeft) {\n + this.skipEvent = true;\n + this.scrollLeft = this.element.scrollLeft = scrollLeft;\n + }\n + };\n \n -}).call(ScrollBar.prototype);\n +}).call(ScrollBarV.prototype);\n +ScrollBarH.prototype = ScrollBarV.prototype;\n \n -exports.ScrollBar = ScrollBar;\n +\n +\n +exports.ScrollBar = ScrollBarV; // backward compatibility\n +exports.ScrollBarV = ScrollBarV;\n +exports.ScrollBarH = ScrollBarH;\n });\n \n define(\'ace/renderloop\', [\'require\', \'exports\', \'module\' , \'ace/lib/event\'], function(require, exports, module) {\n @@ -14231,7 +15206,7 @@ var RenderLoop = function(onRender, win) {\n exports.RenderLoop = RenderLoop;\n });\n \n -define(\'ace/multi_select\', [\'require\', \'exports\', \'module\' , \'ace/range_list\', \'ace/range\', \'ace/selection\', \'ace/mouse/multi_select_handler\', \'ace/lib/event\', \'ace/lib/lang\', \'ace/commands/multi_select_commands\', \'ace/search\', \'ace/edit_session\', \'ace/editor\'], function(require, exports, module) {\n +define(\'ace/multi_select\', [\'require\', \'exports\', \'module\' , \'ace/range_list\', \'ace/range\', \'ace/selection\', \'ace/mouse/multi_select_handler\', \'ace/lib/event\', \'ace/lib/lang\', \'ace/commands/multi_select_commands\', \'ace/search\', \'ace/edit_session\', \'ace/editor\', \'ace/config\'], function(require, exports, module) {\n \n var RangeList = require("./range_list").RangeList;\n var Range = require("./range").Range;\n @@ -14360,7 +15335,7 @@ var EditSession = require("./edit_session").EditSession;\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n - return this.rangeList.ranges.concat();\n + return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n \n this.splitIntoLines = function () {\n @@ -14629,7 +15604,7 @@ var Editor = require("./editor").Editor;\n this.multiSelect.toSingleRange();\n };\n \n - this.getCopyText = function() {\n + this.getSelectedText = function() {\n var text = "";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n @@ -14644,7 +15619,6 @@ var Editor = require("./editor").Editor;\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n - this._signal("copy", text);\n return text;\n };\n this.onPaste = function(text) {\n @@ -14771,8 +15745,9 @@ var Editor = require("./editor").Editor;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n var range = session.getWordRange(range.start.row, range.start.column);\n - range.cursor = range.end;\n + range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n + return;\n }\n var needle = session.getTextRange(range);\n \n @@ -14928,13 +15903,16 @@ exports.onSessionChange = function(e) {\n }\n };\n function MultiSelect(editor) {\n + if (editor.$multiselectOnSessionChange)\n + return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n + editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n \n - exports.onSessionChange.call(editor, editor);\n - editor.on("changeSession", exports.onSessionChange.bind(editor));\n + editor.$multiselectOnSessionChange(editor);\n + editor.on("changeSession", editor.$multiselectOnSessionChange);\n \n editor.on("mousedown", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n @@ -14945,23 +15923,22 @@ function MultiSelect(editor) {\n function addAltCursorListeners(editor){\n var el = editor.textInput.getElement();\n var altCursor = false;\n - var contentEl = editor.renderer.content;\n event.addListener(el, "keydown", function(e) {\n if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) {\n if (!altCursor) {\n - contentEl.style.cursor = "crosshair";\n + editor.renderer.setMouseCursor("crosshair");\n altCursor = true;\n }\n } else if (altCursor) {\n - contentEl.style.cursor = "";\n + reset();\n }\n });\n \n event.addListener(el, "keyup", reset);\n event.addListener(el, "blur", reset);\n - function reset() {\n + function reset(e) {\n if (altCursor) {\n - contentEl.style.cursor = "";\n + editor.renderer.setMouseCursor("");\n altCursor = false;\n }\n }\n @@ -14969,6 +15946,25 @@ function addAltCursorListeners(editor){\n \n exports.MultiSelect = MultiSelect;\n \n +\n +require("./config").defineOptions(Editor.prototype, "editor", {\n + enableMultiselect: {\n + set: function(val) {\n + MultiSelect(this);\n + if (val) {\n + this.on("changeSession", this.$multiselectOnSessionChange);\n + this.on("mousedown", onMouseDown);\n + } else {\n + this.off("changeSession", this.$multiselectOnSessionChange);\n + this.off("mousedown", onMouseDown);\n + }\n + },\n + value: true\n + }\n +})\n +\n +\n +\n });\n \n define(\'ace/mouse/multi_select_handler\', [\'require\', \'exports\', \'module\' , \'ace/lib/event\'], function(require, exports, module) {\n @@ -15248,6 +16244,7 @@ var WorkerClient = function(topLevelNamespaces, mod, classname) {\n \n this.terminate = function() {\n this._emit("terminate", {});\n + this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n this.$doc.removeEventListener("change", this.changeListener);\n @@ -15634,11 +16631,7 @@ background-color: #6B72E6;\\\n background-color: #FFFFFF;\\\n }\\\n .ace-tm .ace_cursor {\\\n -border-left: 2px solid black;\\\n -}\\\n -.ace-tm .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid black;\\\n +color: black;\\\n }\\\n .ace-tm .ace_invisible {\\\n color: rgb(191, 191, 191);\\\n @@ -15700,10 +16693,10 @@ color: rgb(104, 104, 91);\\\n .ace-tm .ace_entity.ace_name.ace_function {\\\n color: #0000A2;\\\n }\\\n -.ace-tm .ace_markup.ace_heading {\\\n +.ace-tm .ace_heading {\\\n color: rgb(12, 7, 255);\\\n }\\\n -.ace-tm .ace_markup.ace_list {\\\n +.ace-tm .ace_list {\\\n color:rgb(185, 6, 144);\\\n }\\\n .ace-tm .ace_meta.ace_tag {\\\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-chromevox.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-chromevox.js.xml new file mode 100644 index 0000000000..815cafcbe1 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-chromevox.js.xml @@ -0,0 +1,581 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.42</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>ext-chromevox.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +define(\'ace/ext/chromevox\', [\'require\', \'exports\', \'module\' , \'ace/editor\', \'ace/config\'], function(require, exports, module) {\n +var cvoxAce = {};\n +cvoxAce.SpeechProperty;\n +cvoxAce.Cursor;\n +cvoxAce.Token;\n +cvoxAce.Annotation;\n +var CONSTANT_PROP = {\n + \'rate\': 0.8,\n + \'pitch\': 0.4,\n + \'volume\': 0.9\n +};\n +var DEFAULT_PROP = {\n + \'rate\': 1,\n + \'pitch\': 0.5,\n + \'volume\': 0.9\n +};\n +var ENTITY_PROP = {\n + \'rate\': 0.8,\n + \'pitch\': 0.8,\n + \'volume\': 0.9\n +};\n +var KEYWORD_PROP = {\n + \'rate\': 0.8,\n + \'pitch\': 0.3,\n + \'volume\': 0.9\n +};\n +var STORAGE_PROP = {\n + \'rate\': 0.8,\n + \'pitch\': 0.7,\n + \'volume\': 0.9\n +};\n +var VARIABLE_PROP = {\n + \'rate\': 0.8,\n + \'pitch\': 0.8,\n + \'volume\': 0.9\n +};\n +var DELETED_PROP = {\n + \'punctuationEcho\': \'none\',\n + \'relativePitch\': -0.6\n +};\n +var ERROR_EARCON = \'ALERT_NONMODAL\';\n +var MODE_SWITCH_EARCON = \'ALERT_MODAL\';\n +var NO_MATCH_EARCON = \'INVALID_KEYPRESS\';\n +var INSERT_MODE_STATE = \'insertMode\';\n +var COMMAND_MODE_STATE = \'start\';\n +\n +var REPLACE_LIST = [\n + {\n + substr: \';\',\n + newSubstr: \' semicolon \'\n + },\n + {\n + substr: \':\',\n + newSubstr: \' colon \'\n + }\n +];\n +var Command = {\n + SPEAK_ANNOT: \'annots\',\n + SPEAK_ALL_ANNOTS: \'all_annots\',\n + TOGGLE_LOCATION: \'toggle_location\',\n + SPEAK_MODE: \'mode\',\n + SPEAK_ROW_COL: \'row_col\',\n + TOGGLE_DISPLACEMENT: \'toggle_displacement\',\n + FOCUS_TEXT: \'focus_text\'\n +};\n +var KEY_PREFIX = \'CONTROL + SHIFT \';\n +cvoxAce.editor = null;\n +var lastCursor = null;\n +var annotTable = {};\n +var shouldSpeakRowLocation = false;\n +var shouldSpeakDisplacement = false;\n +var changed = false;\n +var vimState = null;\n +var keyCodeToShortcutMap = {};\n +var cmdToShortcutMap = {};\n +var getKeyShortcutString = function(keyCode) {\n + return KEY_PREFIX + String.fromCharCode(keyCode);\n +};\n +var isVimMode = function() {\n + var keyboardHandler = cvoxAce.editor.keyBinding.getKeyboardHandler();\n + return keyboardHandler.$id === \'ace/keyboard/vim\';\n +};\n +var getCurrentToken = function(cursor) {\n + return cvoxAce.editor.getSession().getTokenAt(cursor.row, cursor.column + 1);\n +};\n +var getCurrentLine = function(cursor) {\n + return cvoxAce.editor.getSession().getLine(cursor.row);\n +};\n +var onRowChange = function(currCursor) {\n + if (annotTable[currCursor.row]) {\n + cvox.Api.playEarcon(ERROR_EARCON);\n + }\n + if (shouldSpeakRowLocation) {\n + cvox.Api.stop();\n + speakChar(currCursor);\n + speakTokenQueue(getCurrentToken(currCursor));\n + speakLine(currCursor.row, 1);\n + } else {\n + speakLine(currCursor.row, 0);\n + }\n +};\n +var isWord = function(cursor) {\n + var line = getCurrentLine(cursor);\n + var lineSuffix = line.substr(cursor.column - 1);\n + if (cursor.column === 0) {\n + lineSuffix = \' \' + line;\n + }\n + var firstWordRegExp = /^\\W(\\w+)/;\n + var words = firstWordRegExp.exec(lineSuffix);\n + return words !== null;\n +};\n +var rules = {\n + \'constant\': {\n + prop: CONSTANT_PROP\n + },\n + \'entity\': {\n + prop: ENTITY_PROP\n + },\n + \'keyword\': {\n + prop: KEYWORD_PROP\n + },\n + \'storage\': {\n + prop: STORAGE_PROP\n + },\n + \'variable\': {\n + prop: VARIABLE_PROP\n + },\n + \'meta\': {\n + prop: DEFAULT_PROP,\n + replace: [\n + {\n + substr: \'</\',\n + newSubstr: \' closing tag \'\n + },\n + {\n + substr: \'/>\',\n + newSubstr: \' close tag \'\n + },\n + {\n + substr: \'<\',\n + newSubstr: \' tag start \'\n + },\n + {\n + substr: \'>\',\n + newSubstr: \' tag end \'\n + }\n + ]\n + }\n +};\n +var DEFAULT_RULE = {\n + prop: DEFAULT_RULE\n +};\n +var expand = function(value, replaceRules) {\n + var newValue = value;\n + for (var i = 0; i < replaceRules.length; i++) {\n + var replaceRule = replaceRules[i];\n + var regexp = new RegExp(replaceRule.substr, \'g\');\n + newValue = newValue.replace(regexp, replaceRule.newSubstr);\n + }\n + return newValue;\n +};\n +var mergeTokens = function(tokens, start, end) {\n + var newToken = {};\n + newToken.value = \'\';\n + newToken.type = tokens[start].type;\n + for (var j = start; j < end; j++) {\n + newToken.value += tokens[j].value;\n + }\n + return newToken;\n +};\n +var mergeLikeTokens = function(tokens) {\n + if (tokens.length <= 1) {\n + return tokens;\n + }\n + var newTokens = [];\n + var lastLikeIndex = 0;\n + for (var i = 1; i < tokens.length; i++) {\n + var lastLikeToken = tokens[lastLikeIndex];\n + var currToken = tokens[i];\n + if (getTokenRule(lastLikeToken) !== getTokenRule(currToken)) {\n + newTokens.push(mergeTokens(tokens, lastLikeIndex, i));\n + lastLikeIndex = i;\n + }\n + }\n + newTokens.push(mergeTokens(tokens, lastLikeIndex, tokens.length));\n + return newTokens;\n +};\n +var isRowWhiteSpace = function(row) {\n + var line = cvoxAce.editor.getSession().getLine(row);\n + var whiteSpaceRegexp = /^\\s*$/;\n + return whiteSpaceRegexp.exec(line) !== null;\n +};\n +var speakLine = function(row, queue) {\n + var tokens = cvoxAce.editor.getSession().getTokens(row);\n + if (tokens.length === 0 || isRowWhiteSpace(row)) {\n + cvox.Api.playEarcon(\'EDITABLE_TEXT\');\n + return;\n + }\n + tokens = mergeLikeTokens(tokens);\n + var firstToken = tokens[0];\n + tokens = tokens.filter(function(token) {\n + return token !== firstToken;\n + });\n + speakToken_(firstToken, queue);\n + tokens.forEach(speakTokenQueue);\n +};\n +var speakTokenFlush = function(token) {\n + speakToken_(token, 0);\n +};\n +var speakTokenQueue = function(token) {\n + speakToken_(token, 1);\n +};\n +var getTokenRule = function(token) {\n + if (!token || !token.type) {\n + return;\n + }\n + var split = token.type.split(\'.\');\n + if (split.length === 0) {\n + return;\n + }\n + var type = split[0];\n + var rule = rules[type];\n + if (!rule) {\n + return DEFAULT_RULE;\n + }\n + return rule;\n +};\n +var speakToken_ = function(token, queue) {\n + var rule = getTokenRule(token);\n + var value = expand(token.value, REPLACE_LIST);\n + if (rule.replace) {\n + value = expand(value, rule.replace);\n + }\n + cvox.Api.speak(value, queue, rule.prop);\n +};\n +var speakChar = function(cursor) {\n + var line = getCurrentLine(cursor);\n + cvox.Api.speak(line[cursor.column], 1);\n +};\n +var speakDisplacement = function(lastCursor, currCursor) {\n + var line = getCurrentLine(currCursor);\n + var displace = line.substring(lastCursor.column, currCursor.column);\n + displace = displace.replace(/ /g, \' space \');\n + cvox.Api.speak(displace);\n +};\n +var speakCharOrWordOrLine = function(lastCursor, currCursor) {\n + if (Math.abs(lastCursor.column - currCursor.column) !== 1) {\n + var currLineLength = getCurrentLine(currCursor).length;\n + if (currCursor.column === 0 || currCursor.column === currLineLength) {\n + speakLine(currCursor.row, 0);\n + return;\n + }\n + if (isWord(currCursor)) {\n + cvox.Api.stop();\n + speakTokenQueue(getCurrentToken(currCursor));\n + return;\n + }\n + }\n + speakChar(currCursor);\n +};\n +var onColumnChange = function(lastCursor, currCursor) {\n + if (!cvoxAce.editor.selection.isEmpty()) {\n + speakDisplacement(lastCursor, currCursor);\n + cvox.Api.speak(\'selected\', 1);\n + }\n + else if (shouldSpeakDisplacement) {\n + speakDisplacement(lastCursor, currCursor);\n + } else {\n + speakCharOrWordOrLine(lastCursor, currCursor);\n + }\n +};\n +var onCursorChange = function(evt) {\n + if (changed) {\n + changed = false;\n + return;\n + }\n + var currCursor = cvoxAce.editor.selection.getCursor();\n + if (currCursor.row !== lastCursor.row) {\n + onRowChange(currCursor);\n + } else {\n + onColumnChange(lastCursor, currCursor);\n + }\n + lastCursor = currCursor;\n +};\n +var onSelectionChange = function(evt) {\n + if (cvoxAce.editor.selection.isEmpty()) {\n + cvox.Api.speak(\'unselected\');\n + }\n +};\n +var onChange = function(evt) {\n + var data = evt.data;\n + switch (data.action) {\n + case \'removeText\':\n + cvox.Api.speak(data.text, 0, DELETED_PROP);\n + changed = true;\n + break;\n + case \'insertText\':\n + cvox.Api.speak(data.text, 0);\n + changed = true;\n + break;\n + }\n +};\n +var isNewAnnotation = function(annot) {\n + var row = annot.row;\n + var col = annot.column;\n + return !annotTable[row] || !annotTable[row][col];\n +};\n +var populateAnnotations = function(annotations) {\n + annotTable = {};\n + for (var i = 0; i < annotations.length; i++) {\n + var annotation = annotations[i];\n + var row = annotation.row;\n + var col = annotation.column;\n + if (!annotTable[row]) {\n + annotTable[row] = {};\n + }\n + annotTable[row][col] = annotation;\n + }\n +};\n +var onAnnotationChange = function(evt) {\n + var annotations = cvoxAce.editor.getSession().getAnnotations();\n + var newAnnotations = annotations.filter(isNewAnnotation);\n + if (newAnnotations.length > 0) {\n + cvox.Api.playEarcon(ERROR_EARCON);\n + }\n + populateAnnotations(annotations);\n +};\n +var speakAnnot = function(annot) {\n + var annotText = annot.type + \' \' + annot.text + \' on \' +\n + rowColToString(annot.row, annot.column);\n + annotText = annotText.replace(\';\', \'semicolon\');\n + cvox.Api.speak(annotText, 1);\n +};\n +var speakAnnotsByRow = function(row) {\n + var annots = annotTable[row];\n + for (var col in annots) {\n + speakAnnot(annots[col]);\n + }\n +};\n +var rowColToString = function(row, col) {\n + return \'row \' + (row + 1) + \' column \' + (col + 1);\n +};\n +var speakCurrRowAndCol = function() {\n + cvox.Api.speak(rowColToString(lastCursor.row, lastCursor.column));\n +};\n +var speakAllAnnots = function() {\n + for (var row in annotTable) {\n + speakAnnotsByRow(row);\n + }\n +};\n +var speakMode = function() {\n + if (!isVimMode()) {\n + return;\n + }\n + switch (cvoxAce.editor.keyBinding.$data.state) {\n + case INSERT_MODE_STATE:\n + cvox.Api.speak(\'Insert mode\');\n + break;\n + case COMMAND_MODE_STATE:\n + cvox.Api.speak(\'Command mode\');\n + break;\n + }\n +};\n +var toggleSpeakRowLocation = function() {\n + shouldSpeakRowLocation = !shouldSpeakRowLocation;\n + if (shouldSpeakRowLocation) {\n + cvox.Api.speak(\'Speak location on row change enabled.\');\n + } else {\n + cvox.Api.speak(\'Speak location on row change disabled.\');\n + }\n +};\n +var toggleSpeakDisplacement = function() {\n + shouldSpeakDisplacement = !shouldSpeakDisplacement;\n + if (shouldSpeakDisplacement) {\n + cvox.Api.speak(\'Speak displacement on column changes.\');\n + } else {\n + cvox.Api.speak(\'Speak current character or word on column changes.\');\n + }\n +};\n +var onKeyDown = function(evt) {\n + if (evt.ctrlKey && evt.shiftKey) {\n + var shortcut = keyCodeToShortcutMap[evt.keyCode];\n + if (shortcut) {\n + shortcut.func();\n + }\n + }\n +};\n +var onChangeStatus = function(evt, editor) {\n + if (!isVimMode()) {\n + return;\n + }\n + var state = editor.keyBinding.$data.state;\n + if (state === vimState) {\n + return;\n + }\n + switch (state) {\n + case INSERT_MODE_STATE:\n + cvox.Api.playEarcon(MODE_SWITCH_EARCON);\n + cvox.Api.setKeyEcho(true);\n + break;\n + case COMMAND_MODE_STATE:\n + cvox.Api.playEarcon(MODE_SWITCH_EARCON);\n + cvox.Api.setKeyEcho(false);\n + break;\n + }\n + vimState = state;\n +};\n +var contextMenuHandler = function(evt) {\n + var cmd = evt.detail[\'customCommand\'];\n + var shortcut = cmdToShortcutMap[cmd];\n + if (shortcut) {\n + shortcut.func();\n + cvoxAce.editor.focus();\n + }\n +};\n +var initContextMenu = function() {\n + var ACTIONS = SHORTCUTS.map(function(shortcut) {\n + return {\n + desc: shortcut.desc + getKeyShortcutString(shortcut.keyCode),\n + cmd: shortcut.cmd\n + };\n + });\n + var body = document.querySelector(\'body\');\n + body.setAttribute(\'contextMenuActions\', JSON.stringify(ACTIONS));\n + body.addEventListener(\'ATCustomEvent\', contextMenuHandler, true);\n +};\n +var onFindSearchbox = function(evt) {\n + if (evt.match) {\n + speakLine(lastCursor.row, 0);\n + } else {\n + cvox.Api.playEarcon(NO_MATCH_EARCON);\n + }\n +};\n +var focus = function() {\n + cvoxAce.editor.focus();\n +};\n +var SHORTCUTS = [\n + {\n + keyCode: 49,\n + func: function() {\n + speakAnnotsByRow(lastCursor.row);\n + },\n + cmd: Command.SPEAK_ANNOT,\n + desc: \'Speak annotations on line\'\n + },\n + {\n + keyCode: 50,\n + func: speakAllAnnots,\n + cmd: Command.SPEAK_ALL_ANNOTS,\n + desc: \'Speak all annotations\'\n + },\n + {\n + keyCode: 51,\n + func: speakMode,\n + cmd: Command.SPEAK_MODE,\n + desc: \'Speak Vim mode\'\n + },\n + {\n + keyCode: 52,\n + func: toggleSpeakRowLocation,\n + cmd: Command.TOGGLE_LOCATION,\n + desc: \'Toggle speak row location\'\n + },\n + {\n + keyCode: 53,\n + func: speakCurrRowAndCol,\n + cmd: Command.SPEAK_ROW_COL,\n + desc: \'Speak row and column\'\n + },\n + {\n + keyCode: 54,\n + func: toggleSpeakDisplacement,\n + cmd: Command.TOGGLE_DISPLACEMENT,\n + desc: \'Toggle speak displacement\'\n + },\n + {\n + keyCode: 55,\n + func: focus,\n + cmd: Command.FOCUS_TEXT,\n + desc: \'Focus text\'\n + }\n +];\n +var onFocus = function() {\n + cvoxAce.editor = editor;\n + editor.getSession().selection.on(\'changeCursor\', onCursorChange);\n + editor.getSession().selection.on(\'changeSelection\', onSelectionChange);\n + editor.getSession().on(\'change\', onChange);\n + editor.getSession().on(\'changeAnnotation\', onAnnotationChange);\n + editor.on(\'changeStatus\', onChangeStatus);\n + editor.on(\'findSearchBox\', onFindSearchbox);\n + editor.container.addEventListener(\'keydown\', onKeyDown);\n +\n + lastCursor = editor.selection.getCursor();\n +};\n +var init = function(editor) {\n + onFocus();\n + SHORTCUTS.forEach(function(shortcut) {\n + keyCodeToShortcutMap[shortcut.keyCode] = shortcut;\n + cmdToShortcutMap[shortcut.cmd] = shortcut;\n + });\n +\n + editor.on(\'focus\', onFocus);\n + if (isVimMode()) {\n + cvox.Api.setKeyEcho(false);\n + }\n + initContextMenu();\n +};\n +function cvoxApiExists() {\n + return (typeof(cvox) !== \'undefined\') && cvox && cvox.Api;\n +}\n +var tries = 0;\n +var MAX_TRIES = 15;\n +function watchForCvoxLoad(editor) {\n + if (cvoxApiExists()) {\n + init(editor);\n + } else {\n + tries++;\n + if (tries >= MAX_TRIES) {\n + return;\n + }\n + window.setTimeout(watchForCvoxLoad, 500, editor);\n + }\n +}\n +\n +var Editor = require(\'../editor\').Editor;\n +require(\'../config\').defineOptions(Editor.prototype, \'editor\', {\n + enableChromevoxEnhancements: {\n + set: function(val) {\n + if (val) {\n + watchForCvoxLoad(this);\n + }\n + },\n + value: true // turn it on by default or check for window.cvox\n + }\n +});\n +\n +});\n + + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>13509</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-elastic_tabstops_lite.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-elastic_tabstops_lite.js.xml index 027679c5ac..62516f021d 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-elastic_tabstops_lite.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-elastic_tabstops_lite.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155552.62</string> </value> + <value> <string>ts83646622.78</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-emmet.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-emmet.js.xml index 09980b9f9a..9016ffe4ec 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-emmet.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-emmet.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155552.76</string> </value> + <value> <string>ts83646621.47</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -52,10 +52,12 @@ *\n * ***** END LICENSE BLOCK ***** */\n \n -define(\'ace/ext/emmet\', [\'require\', \'exports\', \'module\' , \'ace/keyboard/hash_handler\', \'ace/editor\', \'ace/config\'], function(require, exports, module) {\n +define(\'ace/ext/emmet\', [\'require\', \'exports\', \'module\' , \'ace/keyboard/hash_handler\', \'ace/editor\', \'ace/snippets\', \'ace/range\', \'ace/config\'], function(require, exports, module) {\n \n var HashHandler = require("ace/keyboard/hash_handler").HashHandler;\n var Editor = require("ace/editor").Editor;\n +var snippetManager = require("ace/snippets").snippetManager;\n +var Range = require("ace/range").Range;\n var emmet;\n \n Editor.prototype.indexToPosition = function(index) {\n @@ -116,39 +118,16 @@ AceEmmetEditor.prototype = {\n if (end == null)\n end = start == null ? this.getContent().length : start;\n if (start == null)\n - start = 0;\n - var utils = emmet.require("utils");\n - if (!noIndent) {\n - value = utils.padString(value, utils.getLinePaddingFromPosition(this.getContent(), start));\n - }\n - var tabstopData = emmet.require("tabStops").extract(value, {\n - escape: function(ch) {\n - return ch;\n - }\n - });\n -\n - value = tabstopData.text;\n - var firstTabStop = tabstopData.tabstops[0];\n -\n - if (firstTabStop) {\n - firstTabStop.start += start;\n - firstTabStop.end += start;\n - } else {\n - firstTabStop = {\n - start: value.length + start,\n - end: value.length + start\n - };\n - }\n -\n - var range = this.ace.getSelectionRange();\n - range.start = this.ace.indexToPosition(start);\n - range.end = this.ace.indexToPosition(end);\n -\n - this.ace.session.replace(range, value);\n -\n - range.start = this.ace.indexToPosition(firstTabStop.start);\n - range.end = this.ace.indexToPosition(firstTabStop.end);\n - this.ace.selection.setRange(range);\n + start = 0; \n + \n + var editor = this.ace;\n + var range = Range.fromPoints(editor.indexToPosition(start), editor.indexToPosition(end));\n + editor.session.remove(range);\n + \n + range.end = range.start;\n + \n + value = this.$updateTabstops(value);\n + snippetManager.insertSnippet(editor, value)\n },\n getContent: function(){\n return this.ace.getValue();\n @@ -194,6 +173,52 @@ AceEmmetEditor.prototype = {\n },\n getFilePath: function() {\n return "";\n + },\n + $updateTabstops: function(value) {\n + var base = 1000;\n + var zeroBase = 0;\n + var lastZero = null;\n + var range = emmet.require(\'range\');\n + var ts = emmet.require(\'tabStops\');\n + var settings = emmet.require(\'resources\').getVocabulary("user");\n + var tabstopOptions = {\n + tabstop: function(data) {\n + var group = parseInt(data.group, 10);\n + var isZero = group === 0;\n + if (isZero)\n + group = ++zeroBase;\n + else\n + group += base;\n +\n + var placeholder = data.placeholder;\n + if (placeholder) {\n + placeholder = ts.processText(placeholder, tabstopOptions);\n + }\n +\n + var result = \'${\' + group + (placeholder ? \':\' + placeholder : \'\') + \'}\';\n +\n + if (isZero) {\n + lastZero = range.create(data.start, result);\n + }\n +\n + return result\n + },\n + escape: function(ch) {\n + if (ch == \'$\') return \'\\\\$\';\n + if (ch == \'\\\\\') return \'\\\\\\\\\';\n + return ch;\n + }\n + };\n +\n + value = ts.processText(value, tabstopOptions);\n +\n + if (settings.variables[\'insert_final_tabstop\'] && !/\\$\\{0\\}$/.test(value)) {\n + value += \'${0}\';\n + } else if (lastZero) {\n + value = emmet.require(\'utils\').replaceSubstring(value, \'${0}\', lastZero);\n + }\n + \n + return value;\n }\n };\n \n @@ -267,7 +292,7 @@ var onChangeMode = function(e, target) {\n if (!editor)\n return;\n var modeId = editor.session.$modeId;\n - var enabled = modeId && /css|less|sass|html|php/.test(modeId);\n + var enabled = modeId && /css|less|scss|sass|stylus|html|php/.test(modeId);\n if (e.enableEmmet === false)\n enabled = false;\n if (enabled)\n @@ -292,6 +317,807 @@ require("ace/config").defineOptions(Editor.prototype, "editor", {\n exports.setCore = function(e) {emmet = e;};\n });\n \n +define(\'ace/snippets\', [\'require\', \'exports\', \'module\' , \'ace/lib/lang\', \'ace/range\', \'ace/keyboard/hash_handler\', \'ace/tokenizer\', \'ace/lib/dom\'], function(require, exports, module) {\n +\n +var lang = require("./lib/lang")\n +var Range = require("./range").Range\n +var HashHandler = require("./keyboard/hash_handler").HashHandler;\n +var Tokenizer = require("./tokenizer").Tokenizer;\n +var comparePoints = Range.comparePoints;\n +\n +var SnippetManager = function() {\n + this.snippetMap = {};\n + this.snippetNameMap = {};\n +};\n +\n +(function() {\n + this.getTokenizer = function() {\n + function TabstopToken(str, _, stack) {\n + str = str.substr(1);\n + if (/^\\d+$/.test(str) && !stack.inFormatString)\n + return [{tabstopId: parseInt(str, 10)}];\n + return [{text: str}]\n + }\n + function escape(ch) {\n + return "(?:[^\\\\\\\\" + ch + "]|\\\\\\\\.)";\n + }\n + SnippetManager.$tokenizer = new Tokenizer({\n + start: [\n + {regex: /:/, onMatch: function(val, state, stack) {\n + if (stack.length && stack[0].expectIf) {\n + stack[0].expectIf = false;\n + stack[0].elseBranch = stack[0];\n + return [stack[0]];\n + }\n + return ":";\n + }},\n + {regex: /\\\\./, onMatch: function(val, state, stack) {\n + var ch = val[1];\n + if (ch == "}" && stack.length) {\n + val = ch;\n + }else if ("`$\\\\".indexOf(ch) != -1) {\n + val = ch;\n + } else if (stack.inFormatString) {\n + if (ch == "n")\n + val = "\\n";\n + else if (ch == "t")\n + val = "\\n";\n + else if ("ulULE".indexOf(ch) != -1) {\n + val = {changeCase: ch, local: ch > "a"};\n + }\n + }\n +\n + return [val];\n + }},\n + {regex: /}/, onMatch: function(val, state, stack) {\n + return [stack.length ? stack.shift() : val];\n + }},\n + {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n + {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n + var t = TabstopToken(str.substr(1), state, stack);\n + stack.unshift(t[0]);\n + return t;\n + }, next: "snippetVar"},\n + {regex: /\\n/, token: "newline", merge: false}\n + ],\n + snippetVar: [\n + {regex: "\\\\|" + escape("\\\\|") + "*\\\\|", onMatch: function(val, state, stack) {\n + stack[0].choices = val.slice(1, -1).split(",");\n + }, next: "start"},\n + {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\\\w*):?",\n + onMatch: function(val, state, stack) {\n + var ts = stack[0];\n + ts.fmtString = val;\n +\n + val = this.splitRegex.exec(val);\n + ts.guard = val[1];\n + ts.fmt = val[2];\n + ts.flag = val[3];\n + return "";\n + }, next: "start"},\n + {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) {\n + stack[0].code = val.splice(1, -1);\n + return "";\n + }, next: "start"},\n + {regex: "\\\\?", onMatch: function(val, state, stack) {\n + if (stack[0])\n + stack[0].expectIf = true;\n + }, next: "start"},\n + {regex: "([^:}\\\\\\\\]|\\\\\\\\.)*:?", token: "", next: "start"}\n + ],\n + formatString: [\n + {regex: "/(" + escape("/") + "+)/", token: "regex"},\n + {regex: "", onMatch: function(val, state, stack) {\n + stack.inFormatString = true;\n + }, next: "start"}\n + ]\n + });\n + SnippetManager.prototype.getTokenizer = function() {\n + return SnippetManager.$tokenizer;\n + }\n + return SnippetManager.$tokenizer;\n + };\n +\n + this.tokenizeTmSnippet = function(str, startState) {\n + return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n + return x.value || x;\n + });\n + };\n +\n + this.$getDefaultValue = function(editor, name) {\n + if (/^[A-Z]\\d+$/.test(name)) {\n + var i = name.substr(1);\n + return (this.variables[name[0] + "__"] || {})[i];\n + }\n + if (/^\\d+$/.test(name)) {\n + return (this.variables.__ || {})[name];\n + }\n + name = name.replace(/^TM_/, "");\n +\n + if (!editor)\n + return;\n + var s = editor.session;\n + switch(name) {\n + case "CURRENT_WORD":\n + var r = s.getWordRange();\n + case "SELECTION":\n + case "SELECTED_TEXT":\n + return s.getTextRange(r);\n + case "CURRENT_LINE":\n + return s.getLine(editor.getCursorPosition().row);\n + case "PREV_LINE": // not possible in textmate\n + return s.getLine(editor.getCursorPosition().row - 1);\n + case "LINE_INDEX":\n + return editor.getCursorPosition().column;\n + case "LINE_NUMBER":\n + return editor.getCursorPosition().row + 1;\n + case "SOFT_TABS":\n + return s.getUseSoftTabs() ? "YES" : "NO";\n + case "TAB_SIZE":\n + return s.getTabSize();\n + case "FILENAME":\n + case "FILEPATH":\n + return "ace.ajax.org";\n + case "FULLNAME":\n + return "Ace";\n + }\n + };\n + this.variables = {};\n + this.getVariableValue = function(editor, varName) {\n + if (this.variables.hasOwnProperty(varName))\n + return this.variables[varName](editor, varName) || "";\n + return this.$getDefaultValue(editor, varName) || "";\n + };\n + this.tmStrFormat = function(str, ch, editor) {\n + var flag = ch.flag || "";\n + var re = ch.guard;\n + re = new RegExp(re, flag.replace(/[^gi]/, ""));\n + var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString");\n + var _self = this;\n + var formatted = str.replace(re, function() {\n + _self.variables.__ = arguments;\n + var fmtParts = _self.resolveVariables(fmtTokens, editor);\n + var gChangeCase = "E";\n + for (var i = 0; i < fmtParts.length; i++) {\n + var ch = fmtParts[i];\n + if (typeof ch == "object") {\n + fmtParts[i] = "";\n + if (ch.changeCase && ch.local) {\n + var next = fmtParts[i + 1];\n + if (next && typeof next == "string") {\n + if (ch.changeCase == "u")\n + fmtParts[i] = next[0].toUpperCase();\n + else\n + fmtParts[i] = next[0].toLowerCase();\n + fmtParts[i + 1] = next.substr(1);\n + }\n + } else if (ch.changeCase) {\n + gChangeCase = ch.changeCase;\n + }\n + } else if (gChangeCase == "U") {\n + fmtParts[i] = ch.toUpperCase();\n + } else if (gChangeCase == "L") {\n + fmtParts[i] = ch.toLowerCase();\n + }\n + }\n + return fmtParts.join("");\n + });\n + this.variables.__ = null;\n + return formatted;\n + };\n +\n + this.resolveVariables = function(snippet, editor) {\n + var result = [];\n + for (var i = 0; i < snippet.length; i++) {\n + var ch = snippet[i];\n + if (typeof ch == "string") {\n + result.push(ch);\n + } else if (typeof ch != "object") {\n + continue;\n + } else if (ch.skip) {\n + gotoNext(ch);\n + } else if (ch.processed < i) {\n + continue;\n + } else if (ch.text) {\n + var value = this.getVariableValue(editor, ch.text);\n + if (value && ch.fmtString)\n + value = this.tmStrFormat(value, ch);\n + ch.processed = i;\n + if (ch.expectIf == null) {\n + if (value) {\n + result.push(value);\n + gotoNext(ch);\n + }\n + } else {\n + if (value) {\n + ch.skip = ch.elseBranch;\n + } else\n + gotoNext(ch);\n + }\n + } else if (ch.tabstopId != null) {\n + result.push(ch);\n + } else if (ch.changeCase != null) {\n + result.push(ch);\n + }\n + }\n + function gotoNext(ch) {\n + var i1 = snippet.indexOf(ch, i + 1);\n + if (i1 != -1)\n + i = i1;\n + }\n + return result;\n + };\n +\n + this.insertSnippet = function(editor, snippetText) {\n + var cursor = editor.getCursorPosition();\n + var line = editor.session.getLine(cursor.row);\n + var indentString = line.match(/^\\s*/)[0];\n + var tabString = editor.session.getTabString();\n +\n + var tokens = this.tokenizeTmSnippet(snippetText);\n + tokens = this.resolveVariables(tokens, editor);\n + tokens = tokens.map(function(x) {\n + if (x == "\\n")\n + return x + indentString;\n + if (typeof x == "string")\n + return x.replace(/\\t/g, tabString);\n + return x;\n + });\n + var tabstops = [];\n + tokens.forEach(function(p, i) {\n + if (typeof p != "object")\n + return;\n + var id = p.tabstopId;\n + var ts = tabstops[id];\n + if (!ts) {\n + ts = tabstops[id] = [];\n + ts.index = id;\n + ts.value = "";\n + }\n + if (ts.indexOf(p) !== -1)\n + return;\n + ts.push(p);\n + var i1 = tokens.indexOf(p, i + 1);\n + if (i1 === -1)\n + return;\n +\n + var value = tokens.slice(i + 1, i1);\n + var isNested = value.some(function(t) {return typeof t === "object"}); \n + if (isNested && !ts.value) {\n + ts.value = value;\n + } else if (value.length && (!ts.value || typeof ts.value !== "string")) {\n + ts.value = value.join("");\n + }\n + });\n + tabstops.forEach(function(ts) {ts.length = 0});\n + var expanding = {};\n + function copyValue(val) {\n + var copy = []\n + for (var i = 0; i < val.length; i++) {\n + var p = val[i];\n + if (typeof p == "object") {\n + if (expanding[p.tabstopId])\n + continue;\n + var j = val.lastIndexOf(p, i - 1);\n + p = copy[j] || {tabstopId: p.tabstopId};\n + }\n + copy[i] = p;\n + }\n + return copy;\n + }\n + for (var i = 0; i < tokens.length; i++) {\n + var p = tokens[i];\n + if (typeof p != "object")\n + continue;\n + var id = p.tabstopId;\n + var i1 = tokens.indexOf(p, i + 1);\n + if (expanding[id] == p) { \n + expanding[id] = null;\n + continue;\n + }\n + \n + var ts = tabstops[id];\n + var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value);\n + arg.unshift(i + 1, Math.max(0, i1 - i));\n + arg.push(p);\n + expanding[id] = p;\n + tokens.splice.apply(tokens, arg);\n +\n + if (ts.indexOf(p) === -1)\n + ts.push(p);\n + };\n + var row = 0, column = 0;\n + var text = "";\n + tokens.forEach(function(t) {\n + if (typeof t === "string") {\n + if (t[0] === "\\n"){\n + column = t.length - 1;\n + row ++;\n + } else\n + column += t.length;\n + text += t;\n + } else {\n + if (!t.start)\n + t.start = {row: row, column: column};\n + else\n + t.end = {row: row, column: column};\n + }\n + });\n + var range = editor.getSelectionRange();\n + var end = editor.session.replace(range, text);\n +\n + var tabstopManager = new TabstopManager(editor);\n + tabstopManager.addTabstops(tabstops, range.start, end);\n + tabstopManager.tabNext();\n + };\n +\n + this.$getScope = function(editor) {\n + var scope = editor.session.$mode.$id || "";\n + scope = scope.split("/").pop();\n + if (scope === "html" || scope === "php") {\n + if (scope === "php") \n + scope = "html";\n + var c = editor.getCursorPosition()\n + var state = editor.session.getState(c.row);\n + if (typeof state === "object") {\n + state = state[0];\n + }\n + if (state.substring) {\n + if (state.substring(0, 3) == "js-")\n + scope = "javascript";\n + else if (state.substring(0, 4) == "css-")\n + scope = "css";\n + else if (state.substring(0, 4) == "php-")\n + scope = "php";\n + }\n + }\n + \n + return scope;\n + };\n +\n + this.expandWithTab = function(editor) {\n + var cursor = editor.getCursorPosition();\n + var line = editor.session.getLine(cursor.row);\n + var before = line.substring(0, cursor.column);\n + var after = line.substr(cursor.column);\n +\n + var scope = this.$getScope(editor);\n + var snippetMap = this.snippetMap;\n + var snippet;\n + [scope, "_"].some(function(scope) {\n + var snippets = snippetMap[scope];\n + if (snippets)\n + snippet = this.findMatchingSnippet(snippets, before, after);\n + return !!snippet;\n + }, this);\n + if (!snippet)\n + return false;\n +\n + editor.session.doc.removeInLine(cursor.row,\n + cursor.column - snippet.replaceBefore.length,\n + cursor.column + snippet.replaceAfter.length\n + );\n +\n + this.variables.M__ = snippet.matchBefore;\n + this.variables.T__ = snippet.matchAfter;\n + this.insertSnippet(editor, snippet.content);\n +\n + this.variables.M__ = this.variables.T__ = null;\n + return true;\n + };\n +\n + this.findMatchingSnippet = function(snippetList, before, after) {\n + for (var i = snippetList.length; i--;) {\n + var s = snippetList[i];\n + if (s.startRe && !s.startRe.test(before))\n + continue;\n + if (s.endRe && !s.endRe.test(after))\n + continue;\n + if (!s.startRe && !s.endRe)\n + continue;\n +\n + s.matchBefore = s.startRe ? s.startRe.exec(before) : [""];\n + s.matchAfter = s.endRe ? s.endRe.exec(after) : [""];\n + s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : "";\n + s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : "";\n + return s;\n + }\n + };\n +\n + this.snippetMap = {};\n + this.snippetNameMap = {};\n + this.register = function(snippets, scope) {\n + var snippetMap = this.snippetMap;\n + var snippetNameMap = this.snippetNameMap;\n + var self = this;\n + function wrapRegexp(src) {\n + if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n + src = "(?:" + src + ")"\n +\n + return src || "";\n + }\n + function guardedRegexp(re, guard, opening) {\n + re = wrapRegexp(re);\n + guard = wrapRegexp(guard);\n + if (opening) {\n + re = guard + re;\n + if (re && re[re.length - 1] != "$")\n + re = re + "$";\n + } else {\n + re = re + guard;\n + if (re && re[0] != "^")\n + re = "^" + re;\n + }\n + return new RegExp(re);\n + }\n +\n + function addSnippet(s) {\n + if (!s.scope)\n + s.scope = scope || "_";\n + scope = s.scope\n + if (!snippetMap[scope]) {\n + snippetMap[scope] = [];\n + snippetNameMap[scope] = {};\n + }\n +\n + var map = snippetNameMap[scope];\n + if (s.name) {\n + var old = map[s.name];\n + if (old)\n + self.unregister(old);\n + map[s.name] = s;\n + }\n + snippetMap[scope].push(s);\n +\n + if (s.tabTrigger && !s.trigger) {\n + if (!s.guard && /^\\w/.test(s.tabTrigger))\n + s.guard = "\\\\b";\n + s.trigger = lang.escapeRegExp(s.tabTrigger);\n + }\n +\n + s.startRe = guardedRegexp(s.trigger, s.guard, true);\n + s.triggerRe = new RegExp(s.trigger, "", true);\n +\n + s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n + s.endTriggerRe = new RegExp(s.endTrigger, "", true);\n + };\n +\n + if (snippets.content)\n + addSnippet(snippets);\n + else if (Array.isArray(snippets))\n + snippets.forEach(addSnippet);\n + };\n + this.unregister = function(snippets, scope) {\n + var snippetMap = this.snippetMap;\n + var snippetNameMap = this.snippetNameMap;\n +\n + function removeSnippet(s) {\n + var nameMap = snippetNameMap[s.scope||scope];\n + if (nameMap && nameMap[s.name]) {\n + delete nameMap[s.name];\n + var map = snippetMap[s.scope||scope];\n + var i = map && map.indexOf(s);\n + if (i >= 0)\n + map.splice(i, 1);\n + }\n + }\n + if (snippets.content)\n + removeSnippet(snippets);\n + else if (Array.isArray(snippets))\n + snippets.forEach(removeSnippet);\n + };\n + this.parseSnippetFile = function(str) {\n + str = str.replace(/\\r/g, "");\n + var list = [], snippet = {};\n + var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n + var m;\n + while (m = re.exec(str)) {\n + if (m[1]) {\n + try {\n + snippet = JSON.parse(m[1])\n + list.push(snippet);\n + } catch (e) {}\n + } if (m[4]) {\n + snippet.content = m[4].replace(/^\\t/gm, "");\n + list.push(snippet);\n + snippet = {};\n + } else {\n + var key = m[2], val = m[3];\n + if (key == "regex") {\n + var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n + snippet.guard = guardRe.exec(val)[1];\n + snippet.trigger = guardRe.exec(val)[1];\n + snippet.endTrigger = guardRe.exec(val)[1];\n + snippet.endGuard = guardRe.exec(val)[1];\n + } else if (key == "snippet") {\n + snippet.tabTrigger = val.match(/^\\S*/)[0];\n + if (!snippet.name)\n + snippet.name = val;\n + } else {\n + snippet[key] = val;\n + }\n + }\n + }\n + return list;\n + };\n + this.getSnippetByName = function(name, editor) {\n + var scope = editor && this.$getScope(editor);\n + var snippetMap = this.snippetNameMap;\n + var snippet;\n + [scope, "_"].some(function(scope) {\n + var snippets = snippetMap[scope];\n + if (snippets)\n + snippet = snippets[name];\n + return !!snippet;\n + }, this);\n + return snippet;\n + };\n +\n +}).call(SnippetManager.prototype);\n +\n +\n +var TabstopManager = function(editor) {\n + if (editor.tabstopManager)\n + return editor.tabstopManager;\n + editor.tabstopManager = this;\n + this.$onChange = this.onChange.bind(this);\n + this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n + this.$onChangeSession = this.onChangeSession.bind(this);\n + this.$onAfterExec = this.onAfterExec.bind(this);\n + this.attach(editor);\n +};\n +(function() {\n + this.attach = function(editor) {\n + this.index = -1;\n + this.ranges = [];\n + this.tabstops = [];\n + this.selectedTabstop = null;\n +\n + this.editor = editor;\n + this.editor.on("change", this.$onChange);\n + this.editor.on("changeSelection", this.$onChangeSelection);\n + this.editor.on("changeSession", this.$onChangeSession);\n + this.editor.commands.on("afterExec", this.$onAfterExec);\n + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n + };\n + this.detach = function() {\n + this.tabstops.forEach(this.removeTabstopMarkers, this);\n + this.ranges = null;\n + this.tabstops = null;\n + this.selectedTabstop = null;\n + this.editor.removeListener("change", this.$onChange);\n + this.editor.removeListener("changeSelection", this.$onChangeSelection);\n + this.editor.removeListener("changeSession", this.$onChangeSession);\n + this.editor.commands.removeListener("afterExec", this.$onAfterExec);\n + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n + this.editor.tabstopManager = null;\n + this.editor = null;\n + };\n +\n + this.onChange = function(e) {\n + var changeRange = e.data.range;\n + var isRemove = e.data.action[0] == "r";\n + var start = changeRange.start;\n + var end = changeRange.end;\n + var startRow = start.row;\n + var endRow = end.row;\n + var lineDif = endRow - startRow;\n + var colDiff = end.column - start.column;\n +\n + if (isRemove) {\n + lineDif = -lineDif;\n + colDiff = -colDiff;\n + }\n + if (!this.$inChange && isRemove) {\n + var ts = this.selectedTabstop;\n + var changedOutside = !ts.some(function(r) {\n + return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n + });\n + if (changedOutside)\n + return this.detach();\n + }\n + var ranges = this.ranges;\n + for (var i = 0; i < ranges.length; i++) {\n + var r = ranges[i];\n + if (r.end.row < start.row)\n + continue;\n +\n + if (comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n + this.removeRange(r);\n + i--;\n + continue;\n + }\n +\n + if (r.start.row == startRow && r.start.column > start.column)\n + r.start.column += colDiff;\n + if (r.end.row == startRow && r.end.column >= start.column)\n + r.end.column += colDiff;\n + if (r.start.row >= startRow)\n + r.start.row += lineDif;\n + if (r.end.row >= startRow)\n + r.end.row += lineDif;\n +\n + if (comparePoints(r.start, r.end) > 0)\n + this.removeRange(r);\n + }\n + if (!ranges.length)\n + this.detach();\n + };\n + this.updateLinkedFields = function() {\n + var ts = this.selectedTabstop;\n + if (!ts.hasLinkedRanges)\n + return;\n + this.$inChange = true;\n + var session = this.editor.session;\n + var text = session.getTextRange(ts.firstNonLinked);\n + for (var i = ts.length; i--;) {\n + var range = ts[i];\n + if (!range.linked)\n + continue;\n + var fmt = exports.snippetManager.tmStrFormat(text, range.original)\n + session.replace(range, fmt);\n + }\n + this.$inChange = false;\n + };\n + this.onAfterExec = function(e) {\n + if (e.command && !e.command.readOnly)\n + this.updateLinkedFields();\n + };\n + this.onChangeSelection = function() {\n + if (!this.editor)\n + return\n + var lead = this.editor.selection.lead;\n + var anchor = this.editor.selection.anchor;\n + var isEmpty = this.editor.selection.isEmpty();\n + for (var i = this.ranges.length; i--;) {\n + if (this.ranges[i].linked)\n + continue;\n + var containsLead = this.ranges[i].contains(lead.row, lead.column);\n + var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n + if (containsLead && containsAnchor)\n + return;\n + }\n + this.detach();\n + };\n + this.onChangeSession = function() {\n + this.detach();\n + };\n + this.tabNext = function(dir) {\n + var max = this.tabstops.length - 1;\n + var index = this.index + (dir || 1);\n + index = Math.min(Math.max(index, 0), max);\n + this.selectTabstop(index);\n + if (index == max)\n + this.detach();\n + };\n + this.selectTabstop = function(index) {\n + var ts = this.tabstops[this.index];\n + if (ts)\n + this.addTabstopMarkers(ts);\n + this.index = index;\n + ts = this.tabstops[this.index];\n + if (!ts || !ts.length)\n + return;\n + \n + this.selectedTabstop = ts;\n + if (!this.editor.inVirtualSelectionMode) { \n + var sel = this.editor.multiSelect;\n + sel.toSingleRange(ts.firstNonLinked.clone());\n + for (var i = ts.length; i--;) {\n + if (ts.hasLinkedRanges && ts[i].linked)\n + continue;\n + sel.addRange(ts[i].clone(), true);\n + }\n + } else {\n + this.editor.selection.setRange(ts.firstNonLinked);\n + }\n + \n + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n + };\n + this.addTabstops = function(tabstops, start, end) {\n + if (!tabstops[0]) {\n + var p = Range.fromPoints(end, end);\n + moveRelative(p.start, start);\n + moveRelative(p.end, start);\n + tabstops[0] = [p];\n + tabstops[0].index = 0;\n + }\n +\n + var i = this.index;\n + var arg = [i, 0];\n + var ranges = this.ranges;\n + var editor = this.editor;\n + tabstops.forEach(function(ts) {\n + for (var i = ts.length; i--;) {\n + var p = ts[i];\n + var range = Range.fromPoints(p.start, p.end || p.start);\n + movePoint(range.start, start);\n + movePoint(range.end, start);\n + range.original = p;\n + range.tabstop = ts;\n + ranges.push(range);\n + ts[i] = range;\n + if (p.fmtString) {\n + range.linked = true;\n + ts.hasLinkedRanges = true;\n + } else if (!ts.firstNonLinked)\n + ts.firstNonLinked = range;\n + }\n + if (!ts.firstNonLinked)\n + ts.hasLinkedRanges = false;\n + arg.push(ts);\n + this.addTabstopMarkers(ts);\n + }, this);\n + arg.push(arg.splice(2, 1)[0]);\n + this.tabstops.splice.apply(this.tabstops, arg);\n + };\n +\n + this.addTabstopMarkers = function(ts) {\n + var session = this.editor.session;\n + ts.forEach(function(range) {\n + if (!range.markerId)\n + range.markerId = session.addMarker(range, "ace_snippet-marker", "text");\n + });\n + };\n + this.removeTabstopMarkers = function(ts) {\n + var session = this.editor.session;\n + ts.forEach(function(range) {\n + session.removeMarker(range.markerId);\n + range.markerId = null;\n + });\n + };\n + this.removeRange = function(range) {\n + var i = range.tabstop.indexOf(range);\n + range.tabstop.splice(i, 1);\n + i = this.ranges.indexOf(range);\n + this.ranges.splice(i, 1);\n + this.editor.session.removeMarker(range.markerId);\n + };\n +\n + this.keyboardHandler = new HashHandler();\n + this.keyboardHandler.bindKeys({\n + "Tab": function(ed) {\n + ed.tabstopManager.tabNext(1);\n + },\n + "Shift-Tab": function(ed) {\n + ed.tabstopManager.tabNext(-1);\n + },\n + "Esc": function(ed) {\n + ed.tabstopManager.detach();\n + },\n + "Return": function(ed) {\n + return false;\n + }\n + });\n +}).call(TabstopManager.prototype);\n +\n +\n +var movePoint = function(point, diff) {\n + if (point.row == 0)\n + point.column += diff.column;\n + point.row += diff.row;\n +};\n +\n +var moveRelative = function(point, start) {\n + if (point.row == start.row)\n + point.column -= start.column;\n + point.row -= start.row;\n +};\n +\n +\n +require("./lib/dom").importCssString("\\\n +.ace_snippet-marker {\\\n + -moz-box-sizing: border-box;\\\n + box-sizing: border-box;\\\n + background: rgba(194, 193, 208, 0.09);\\\n + border: 1px dotted rgba(211, 208, 235, 0.62);\\\n + position: absolute;\\\n +}");\n +\n +exports.snippetManager = new SnippetManager();\n +\n +\n +});\n ]]></string> </value> @@ -302,7 +1128,7 @@ exports.setCore = function(e) {emmet = e;};\n </item> <item> <key> <string>size</string> </key> - <value> <int>9678</int> </value> + <value> <int>39213</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-keybinding_menu.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-keybinding_menu.js.xml index ca22e0f7c5..b0338a51ef 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-keybinding_menu.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-keybinding_menu.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155552.86</string> </value> + <value> <string>ts83646622.76</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -198,7 +198,7 @@ module.exports.getEditorKeybordShortcuts = function(editor) {\n var keybindings = [];\n var commandMap = {};\n editor.keyBinding.$handlers.forEach(function(handler) {\n - var ckb = handler.commmandKeyBinding;\n + var ckb = handler.commandKeyBinding;\n for (var i in ckb) {\n var modifier = parseInt(i);\n if (modifier == -1) {\n @@ -238,7 +238,7 @@ module.exports.getEditorKeybordShortcuts = function(editor) {\n </item> <item> <key> <string>size</string> </key> - <value> <int>7803</int> </value> + <value> <int>7802</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-language_tools.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-language_tools.js.xml new file mode 100644 index 0000000000..83bb88cdbc --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-language_tools.js.xml @@ -0,0 +1,1664 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Cacheable__manager_id</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.4</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>ext-language_tools.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2012, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/ext/language_tools\', [\'require\', \'exports\', \'module\' , \'ace/snippets\', \'ace/autocomplete\', \'ace/config\', \'ace/autocomplete/text_completer\', \'ace/editor\'], function(require, exports, module) {\n +\n +\n +var snippetManager = require("../snippets").snippetManager;\n +var Autocomplete = require("../autocomplete").Autocomplete;\n +var config = require("../config");\n +\n +var textCompleter = require("../autocomplete/text_completer");\n +var keyWordCompleter = {\n + getCompletions: function(editor, session, pos, prefix, callback) {\n + var state = editor.session.getState(pos.row);\n + var completions = session.$mode.getCompletions(state, session, pos, prefix);\n + callback(null, completions);\n + }\n +};\n +\n +var snippetCompleter = {\n + getCompletions: function(editor, session, pos, prefix, callback) {\n + var scope = snippetManager.$getScope(editor);\n + var snippetMap = snippetManager.snippetMap;\n + var completions = [];\n + [scope, "_"].forEach(function(scope) {\n + var snippets = snippetMap[scope] || [];\n + for (var i = snippets.length; i--;) {\n + var s = snippets[i];\n + var caption = s.name || s.tabTrigger;\n + if (!caption)\n + continue;\n + completions.push({\n + caption: caption,\n + snippet: s.content,\n + meta: s.tabTrigger && !s.name ? s.tabTrigger + "\\u21E5 " : "snippet"\n + });\n + }\n + }, this);\n + callback(null, completions);\n + }\n +};\n +\n +var completers = [snippetCompleter, textCompleter, keyWordCompleter];\n +exports.addCompleter = function(completer) {\n + completers.push(completer);\n +};\n +\n +var expandSnippet = {\n + name: "expandSnippet",\n + exec: function(editor) {\n + var success = snippetManager.expandWithTab(editor);\n + if (!success)\n + editor.execCommand("indent");\n + },\n + bindKey: "tab"\n +}\n +\n +var onChangeMode = function(e, editor) {\n + var mode = editor.session.$mode;\n + var id = mode.$id\n + if (!snippetManager.files) snippetManager.files = {};\n + if (id && !snippetManager.files[id]) {\n + var snippetFilePath = id.replace("mode", "snippets");\n + config.loadModule(snippetFilePath, function(m) {\n + if (m) {\n + snippetManager.files[id] = m;\n + m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n + snippetManager.register(m.snippets, m.scope);\n + }\n + });\n + }\n +};\n +\n +var Editor = require("../editor").Editor;\n +require("../config").defineOptions(Editor.prototype, "editor", {\n + enableBasicAutocompletion: {\n + set: function(val) {\n + if (val) {\n + this.completers = completers\n + this.commands.addCommand(Autocomplete.startCommand);\n + } else {\n + this.commands.removeCommand(Autocomplete.startCommand);\n + }\n + },\n + value: false\n + },\n + enableSnippets: {\n + set: function(val) {\n + if (val) {\n + this.commands.addCommand(expandSnippet);\n + this.on("changeMode", onChangeMode);\n + onChangeMode(null, this)\n + } else {\n + this.commands.removeCommand(expandSnippet);\n + this.off("changeMode", onChangeMode);\n + }\n + },\n + value: false\n + }\n +});\n +\n +});\n +\n +define(\'ace/snippets\', [\'require\', \'exports\', \'module\' , \'ace/lib/lang\', \'ace/range\', \'ace/keyboard/hash_handler\', \'ace/tokenizer\', \'ace/lib/dom\'], function(require, exports, module) {\n +\n +var lang = require("./lib/lang")\n +var Range = require("./range").Range\n +var HashHandler = require("./keyboard/hash_handler").HashHandler;\n +var Tokenizer = require("./tokenizer").Tokenizer;\n +var comparePoints = Range.comparePoints;\n +\n +var SnippetManager = function() {\n + this.snippetMap = {};\n + this.snippetNameMap = {};\n +};\n +\n +(function() {\n + this.getTokenizer = function() {\n + function TabstopToken(str, _, stack) {\n + str = str.substr(1);\n + if (/^\\d+$/.test(str) && !stack.inFormatString)\n + return [{tabstopId: parseInt(str, 10)}];\n + return [{text: str}]\n + }\n + function escape(ch) {\n + return "(?:[^\\\\\\\\" + ch + "]|\\\\\\\\.)";\n + }\n + SnippetManager.$tokenizer = new Tokenizer({\n + start: [\n + {regex: /:/, onMatch: function(val, state, stack) {\n + if (stack.length && stack[0].expectIf) {\n + stack[0].expectIf = false;\n + stack[0].elseBranch = stack[0];\n + return [stack[0]];\n + }\n + return ":";\n + }},\n + {regex: /\\\\./, onMatch: function(val, state, stack) {\n + var ch = val[1];\n + if (ch == "}" && stack.length) {\n + val = ch;\n + }else if ("`$\\\\".indexOf(ch) != -1) {\n + val = ch;\n + } else if (stack.inFormatString) {\n + if (ch == "n")\n + val = "\\n";\n + else if (ch == "t")\n + val = "\\n";\n + else if ("ulULE".indexOf(ch) != -1) {\n + val = {changeCase: ch, local: ch > "a"};\n + }\n + }\n +\n + return [val];\n + }},\n + {regex: /}/, onMatch: function(val, state, stack) {\n + return [stack.length ? stack.shift() : val];\n + }},\n + {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n + {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n + var t = TabstopToken(str.substr(1), state, stack);\n + stack.unshift(t[0]);\n + return t;\n + }, next: "snippetVar"},\n + {regex: /\\n/, token: "newline", merge: false}\n + ],\n + snippetVar: [\n + {regex: "\\\\|" + escape("\\\\|") + "*\\\\|", onMatch: function(val, state, stack) {\n + stack[0].choices = val.slice(1, -1).split(",");\n + }, next: "start"},\n + {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\\\w*):?",\n + onMatch: function(val, state, stack) {\n + var ts = stack[0];\n + ts.fmtString = val;\n +\n + val = this.splitRegex.exec(val);\n + ts.guard = val[1];\n + ts.fmt = val[2];\n + ts.flag = val[3];\n + return "";\n + }, next: "start"},\n + {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) {\n + stack[0].code = val.splice(1, -1);\n + return "";\n + }, next: "start"},\n + {regex: "\\\\?", onMatch: function(val, state, stack) {\n + if (stack[0])\n + stack[0].expectIf = true;\n + }, next: "start"},\n + {regex: "([^:}\\\\\\\\]|\\\\\\\\.)*:?", token: "", next: "start"}\n + ],\n + formatString: [\n + {regex: "/(" + escape("/") + "+)/", token: "regex"},\n + {regex: "", onMatch: function(val, state, stack) {\n + stack.inFormatString = true;\n + }, next: "start"}\n + ]\n + });\n + SnippetManager.prototype.getTokenizer = function() {\n + return SnippetManager.$tokenizer;\n + }\n + return SnippetManager.$tokenizer;\n + };\n +\n + this.tokenizeTmSnippet = function(str, startState) {\n + return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n + return x.value || x;\n + });\n + };\n +\n + this.$getDefaultValue = function(editor, name) {\n + if (/^[A-Z]\\d+$/.test(name)) {\n + var i = name.substr(1);\n + return (this.variables[name[0] + "__"] || {})[i];\n + }\n + if (/^\\d+$/.test(name)) {\n + return (this.variables.__ || {})[name];\n + }\n + name = name.replace(/^TM_/, "");\n +\n + if (!editor)\n + return;\n + var s = editor.session;\n + switch(name) {\n + case "CURRENT_WORD":\n + var r = s.getWordRange();\n + case "SELECTION":\n + case "SELECTED_TEXT":\n + return s.getTextRange(r);\n + case "CURRENT_LINE":\n + return s.getLine(editor.getCursorPosition().row);\n + case "PREV_LINE": // not possible in textmate\n + return s.getLine(editor.getCursorPosition().row - 1);\n + case "LINE_INDEX":\n + return editor.getCursorPosition().column;\n + case "LINE_NUMBER":\n + return editor.getCursorPosition().row + 1;\n + case "SOFT_TABS":\n + return s.getUseSoftTabs() ? "YES" : "NO";\n + case "TAB_SIZE":\n + return s.getTabSize();\n + case "FILENAME":\n + case "FILEPATH":\n + return "ace.ajax.org";\n + case "FULLNAME":\n + return "Ace";\n + }\n + };\n + this.variables = {};\n + this.getVariableValue = function(editor, varName) {\n + if (this.variables.hasOwnProperty(varName))\n + return this.variables[varName](editor, varName) || "";\n + return this.$getDefaultValue(editor, varName) || "";\n + };\n + this.tmStrFormat = function(str, ch, editor) {\n + var flag = ch.flag || "";\n + var re = ch.guard;\n + re = new RegExp(re, flag.replace(/[^gi]/, ""));\n + var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString");\n + var _self = this;\n + var formatted = str.replace(re, function() {\n + _self.variables.__ = arguments;\n + var fmtParts = _self.resolveVariables(fmtTokens, editor);\n + var gChangeCase = "E";\n + for (var i = 0; i < fmtParts.length; i++) {\n + var ch = fmtParts[i];\n + if (typeof ch == "object") {\n + fmtParts[i] = "";\n + if (ch.changeCase && ch.local) {\n + var next = fmtParts[i + 1];\n + if (next && typeof next == "string") {\n + if (ch.changeCase == "u")\n + fmtParts[i] = next[0].toUpperCase();\n + else\n + fmtParts[i] = next[0].toLowerCase();\n + fmtParts[i + 1] = next.substr(1);\n + }\n + } else if (ch.changeCase) {\n + gChangeCase = ch.changeCase;\n + }\n + } else if (gChangeCase == "U") {\n + fmtParts[i] = ch.toUpperCase();\n + } else if (gChangeCase == "L") {\n + fmtParts[i] = ch.toLowerCase();\n + }\n + }\n + return fmtParts.join("");\n + });\n + this.variables.__ = null;\n + return formatted;\n + };\n +\n + this.resolveVariables = function(snippet, editor) {\n + var result = [];\n + for (var i = 0; i < snippet.length; i++) {\n + var ch = snippet[i];\n + if (typeof ch == "string") {\n + result.push(ch);\n + } else if (typeof ch != "object") {\n + continue;\n + } else if (ch.skip) {\n + gotoNext(ch);\n + } else if (ch.processed < i) {\n + continue;\n + } else if (ch.text) {\n + var value = this.getVariableValue(editor, ch.text);\n + if (value && ch.fmtString)\n + value = this.tmStrFormat(value, ch);\n + ch.processed = i;\n + if (ch.expectIf == null) {\n + if (value) {\n + result.push(value);\n + gotoNext(ch);\n + }\n + } else {\n + if (value) {\n + ch.skip = ch.elseBranch;\n + } else\n + gotoNext(ch);\n + }\n + } else if (ch.tabstopId != null) {\n + result.push(ch);\n + } else if (ch.changeCase != null) {\n + result.push(ch);\n + }\n + }\n + function gotoNext(ch) {\n + var i1 = snippet.indexOf(ch, i + 1);\n + if (i1 != -1)\n + i = i1;\n + }\n + return result;\n + };\n +\n + this.insertSnippet = function(editor, snippetText) {\n + var cursor = editor.getCursorPosition();\n + var line = editor.session.getLine(cursor.row);\n + var indentString = line.match(/^\\s*/)[0];\n + var tabString = editor.session.getTabString();\n +\n + var tokens = this.tokenizeTmSnippet(snippetText);\n + tokens = this.resolveVariables(tokens, editor);\n + tokens = tokens.map(function(x) {\n + if (x == "\\n")\n + return x + indentString;\n + if (typeof x == "string")\n + return x.replace(/\\t/g, tabString);\n + return x;\n + });\n + var tabstops = [];\n + tokens.forEach(function(p, i) {\n + if (typeof p != "object")\n + return;\n + var id = p.tabstopId;\n + var ts = tabstops[id];\n + if (!ts) {\n + ts = tabstops[id] = [];\n + ts.index = id;\n + ts.value = "";\n + }\n + if (ts.indexOf(p) !== -1)\n + return;\n + ts.push(p);\n + var i1 = tokens.indexOf(p, i + 1);\n + if (i1 === -1)\n + return;\n +\n + var value = tokens.slice(i + 1, i1);\n + var isNested = value.some(function(t) {return typeof t === "object"}); \n + if (isNested && !ts.value) {\n + ts.value = value;\n + } else if (value.length && (!ts.value || typeof ts.value !== "string")) {\n + ts.value = value.join("");\n + }\n + });\n + tabstops.forEach(function(ts) {ts.length = 0});\n + var expanding = {};\n + function copyValue(val) {\n + var copy = []\n + for (var i = 0; i < val.length; i++) {\n + var p = val[i];\n + if (typeof p == "object") {\n + if (expanding[p.tabstopId])\n + continue;\n + var j = val.lastIndexOf(p, i - 1);\n + p = copy[j] || {tabstopId: p.tabstopId};\n + }\n + copy[i] = p;\n + }\n + return copy;\n + }\n + for (var i = 0; i < tokens.length; i++) {\n + var p = tokens[i];\n + if (typeof p != "object")\n + continue;\n + var id = p.tabstopId;\n + var i1 = tokens.indexOf(p, i + 1);\n + if (expanding[id] == p) { \n + expanding[id] = null;\n + continue;\n + }\n + \n + var ts = tabstops[id];\n + var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value);\n + arg.unshift(i + 1, Math.max(0, i1 - i));\n + arg.push(p);\n + expanding[id] = p;\n + tokens.splice.apply(tokens, arg);\n +\n + if (ts.indexOf(p) === -1)\n + ts.push(p);\n + };\n + var row = 0, column = 0;\n + var text = "";\n + tokens.forEach(function(t) {\n + if (typeof t === "string") {\n + if (t[0] === "\\n"){\n + column = t.length - 1;\n + row ++;\n + } else\n + column += t.length;\n + text += t;\n + } else {\n + if (!t.start)\n + t.start = {row: row, column: column};\n + else\n + t.end = {row: row, column: column};\n + }\n + });\n + var range = editor.getSelectionRange();\n + var end = editor.session.replace(range, text);\n +\n + var tabstopManager = new TabstopManager(editor);\n + tabstopManager.addTabstops(tabstops, range.start, end);\n + tabstopManager.tabNext();\n + };\n +\n + this.$getScope = function(editor) {\n + var scope = editor.session.$mode.$id || "";\n + scope = scope.split("/").pop();\n + if (scope === "html" || scope === "php") {\n + if (scope === "php") \n + scope = "html";\n + var c = editor.getCursorPosition()\n + var state = editor.session.getState(c.row);\n + if (typeof state === "object") {\n + state = state[0];\n + }\n + if (state.substring) {\n + if (state.substring(0, 3) == "js-")\n + scope = "javascript";\n + else if (state.substring(0, 4) == "css-")\n + scope = "css";\n + else if (state.substring(0, 4) == "php-")\n + scope = "php";\n + }\n + }\n + \n + return scope;\n + };\n +\n + this.expandWithTab = function(editor) {\n + var cursor = editor.getCursorPosition();\n + var line = editor.session.getLine(cursor.row);\n + var before = line.substring(0, cursor.column);\n + var after = line.substr(cursor.column);\n +\n + var scope = this.$getScope(editor);\n + var snippetMap = this.snippetMap;\n + var snippet;\n + [scope, "_"].some(function(scope) {\n + var snippets = snippetMap[scope];\n + if (snippets)\n + snippet = this.findMatchingSnippet(snippets, before, after);\n + return !!snippet;\n + }, this);\n + if (!snippet)\n + return false;\n +\n + editor.session.doc.removeInLine(cursor.row,\n + cursor.column - snippet.replaceBefore.length,\n + cursor.column + snippet.replaceAfter.length\n + );\n +\n + this.variables.M__ = snippet.matchBefore;\n + this.variables.T__ = snippet.matchAfter;\n + this.insertSnippet(editor, snippet.content);\n +\n + this.variables.M__ = this.variables.T__ = null;\n + return true;\n + };\n +\n + this.findMatchingSnippet = function(snippetList, before, after) {\n + for (var i = snippetList.length; i--;) {\n + var s = snippetList[i];\n + if (s.startRe && !s.startRe.test(before))\n + continue;\n + if (s.endRe && !s.endRe.test(after))\n + continue;\n + if (!s.startRe && !s.endRe)\n + continue;\n +\n + s.matchBefore = s.startRe ? s.startRe.exec(before) : [""];\n + s.matchAfter = s.endRe ? s.endRe.exec(after) : [""];\n + s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : "";\n + s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : "";\n + return s;\n + }\n + };\n +\n + this.snippetMap = {};\n + this.snippetNameMap = {};\n + this.register = function(snippets, scope) {\n + var snippetMap = this.snippetMap;\n + var snippetNameMap = this.snippetNameMap;\n + var self = this;\n + function wrapRegexp(src) {\n + if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n + src = "(?:" + src + ")"\n +\n + return src || "";\n + }\n + function guardedRegexp(re, guard, opening) {\n + re = wrapRegexp(re);\n + guard = wrapRegexp(guard);\n + if (opening) {\n + re = guard + re;\n + if (re && re[re.length - 1] != "$")\n + re = re + "$";\n + } else {\n + re = re + guard;\n + if (re && re[0] != "^")\n + re = "^" + re;\n + }\n + return new RegExp(re);\n + }\n +\n + function addSnippet(s) {\n + if (!s.scope)\n + s.scope = scope || "_";\n + scope = s.scope\n + if (!snippetMap[scope]) {\n + snippetMap[scope] = [];\n + snippetNameMap[scope] = {};\n + }\n +\n + var map = snippetNameMap[scope];\n + if (s.name) {\n + var old = map[s.name];\n + if (old)\n + self.unregister(old);\n + map[s.name] = s;\n + }\n + snippetMap[scope].push(s);\n +\n + if (s.tabTrigger && !s.trigger) {\n + if (!s.guard && /^\\w/.test(s.tabTrigger))\n + s.guard = "\\\\b";\n + s.trigger = lang.escapeRegExp(s.tabTrigger);\n + }\n +\n + s.startRe = guardedRegexp(s.trigger, s.guard, true);\n + s.triggerRe = new RegExp(s.trigger, "", true);\n +\n + s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n + s.endTriggerRe = new RegExp(s.endTrigger, "", true);\n + };\n +\n + if (snippets.content)\n + addSnippet(snippets);\n + else if (Array.isArray(snippets))\n + snippets.forEach(addSnippet);\n + };\n + this.unregister = function(snippets, scope) {\n + var snippetMap = this.snippetMap;\n + var snippetNameMap = this.snippetNameMap;\n +\n + function removeSnippet(s) {\n + var nameMap = snippetNameMap[s.scope||scope];\n + if (nameMap && nameMap[s.name]) {\n + delete nameMap[s.name];\n + var map = snippetMap[s.scope||scope];\n + var i = map && map.indexOf(s);\n + if (i >= 0)\n + map.splice(i, 1);\n + }\n + }\n + if (snippets.content)\n + removeSnippet(snippets);\n + else if (Array.isArray(snippets))\n + snippets.forEach(removeSnippet);\n + };\n + this.parseSnippetFile = function(str) {\n + str = str.replace(/\\r/g, "");\n + var list = [], snippet = {};\n + var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n + var m;\n + while (m = re.exec(str)) {\n + if (m[1]) {\n + try {\n + snippet = JSON.parse(m[1])\n + list.push(snippet);\n + } catch (e) {}\n + } if (m[4]) {\n + snippet.content = m[4].replace(/^\\t/gm, "");\n + list.push(snippet);\n + snippet = {};\n + } else {\n + var key = m[2], val = m[3];\n + if (key == "regex") {\n + var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n + snippet.guard = guardRe.exec(val)[1];\n + snippet.trigger = guardRe.exec(val)[1];\n + snippet.endTrigger = guardRe.exec(val)[1];\n + snippet.endGuard = guardRe.exec(val)[1];\n + } else if (key == "snippet") {\n + snippet.tabTrigger = val.match(/^\\S*/)[0];\n + if (!snippet.name)\n + snippet.name = val;\n + } else {\n + snippet[key] = val;\n + }\n + }\n + }\n + return list;\n + };\n + this.getSnippetByName = function(name, editor) {\n + var scope = editor && this.$getScope(editor);\n + var snippetMap = this.snippetNameMap;\n + var snippet;\n + [scope, "_"].some(function(scope) {\n + var snippets = snippetMap[scope];\n + if (snippets)\n + snippet = snippets[name];\n + return !!snippet;\n + }, this);\n + return snippet;\n + };\n +\n +}).call(SnippetManager.prototype);\n +\n +\n +var TabstopManager = function(editor) {\n + if (editor.tabstopManager)\n + return editor.tabstopManager;\n + editor.tabstopManager = this;\n + this.$onChange = this.onChange.bind(this);\n + this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n + this.$onChangeSession = this.onChangeSession.bind(this);\n + this.$onAfterExec = this.onAfterExec.bind(this);\n + this.attach(editor);\n +};\n +(function() {\n + this.attach = function(editor) {\n + this.index = -1;\n + this.ranges = [];\n + this.tabstops = [];\n + this.selectedTabstop = null;\n +\n + this.editor = editor;\n + this.editor.on("change", this.$onChange);\n + this.editor.on("changeSelection", this.$onChangeSelection);\n + this.editor.on("changeSession", this.$onChangeSession);\n + this.editor.commands.on("afterExec", this.$onAfterExec);\n + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n + };\n + this.detach = function() {\n + this.tabstops.forEach(this.removeTabstopMarkers, this);\n + this.ranges = null;\n + this.tabstops = null;\n + this.selectedTabstop = null;\n + this.editor.removeListener("change", this.$onChange);\n + this.editor.removeListener("changeSelection", this.$onChangeSelection);\n + this.editor.removeListener("changeSession", this.$onChangeSession);\n + this.editor.commands.removeListener("afterExec", this.$onAfterExec);\n + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n + this.editor.tabstopManager = null;\n + this.editor = null;\n + };\n +\n + this.onChange = function(e) {\n + var changeRange = e.data.range;\n + var isRemove = e.data.action[0] == "r";\n + var start = changeRange.start;\n + var end = changeRange.end;\n + var startRow = start.row;\n + var endRow = end.row;\n + var lineDif = endRow - startRow;\n + var colDiff = end.column - start.column;\n +\n + if (isRemove) {\n + lineDif = -lineDif;\n + colDiff = -colDiff;\n + }\n + if (!this.$inChange && isRemove) {\n + var ts = this.selectedTabstop;\n + var changedOutside = !ts.some(function(r) {\n + return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n + });\n + if (changedOutside)\n + return this.detach();\n + }\n + var ranges = this.ranges;\n + for (var i = 0; i < ranges.length; i++) {\n + var r = ranges[i];\n + if (r.end.row < start.row)\n + continue;\n +\n + if (comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n + this.removeRange(r);\n + i--;\n + continue;\n + }\n +\n + if (r.start.row == startRow && r.start.column > start.column)\n + r.start.column += colDiff;\n + if (r.end.row == startRow && r.end.column >= start.column)\n + r.end.column += colDiff;\n + if (r.start.row >= startRow)\n + r.start.row += lineDif;\n + if (r.end.row >= startRow)\n + r.end.row += lineDif;\n +\n + if (comparePoints(r.start, r.end) > 0)\n + this.removeRange(r);\n + }\n + if (!ranges.length)\n + this.detach();\n + };\n + this.updateLinkedFields = function() {\n + var ts = this.selectedTabstop;\n + if (!ts.hasLinkedRanges)\n + return;\n + this.$inChange = true;\n + var session = this.editor.session;\n + var text = session.getTextRange(ts.firstNonLinked);\n + for (var i = ts.length; i--;) {\n + var range = ts[i];\n + if (!range.linked)\n + continue;\n + var fmt = exports.snippetManager.tmStrFormat(text, range.original)\n + session.replace(range, fmt);\n + }\n + this.$inChange = false;\n + };\n + this.onAfterExec = function(e) {\n + if (e.command && !e.command.readOnly)\n + this.updateLinkedFields();\n + };\n + this.onChangeSelection = function() {\n + if (!this.editor)\n + return\n + var lead = this.editor.selection.lead;\n + var anchor = this.editor.selection.anchor;\n + var isEmpty = this.editor.selection.isEmpty();\n + for (var i = this.ranges.length; i--;) {\n + if (this.ranges[i].linked)\n + continue;\n + var containsLead = this.ranges[i].contains(lead.row, lead.column);\n + var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n + if (containsLead && containsAnchor)\n + return;\n + }\n + this.detach();\n + };\n + this.onChangeSession = function() {\n + this.detach();\n + };\n + this.tabNext = function(dir) {\n + var max = this.tabstops.length - 1;\n + var index = this.index + (dir || 1);\n + index = Math.min(Math.max(index, 0), max);\n + this.selectTabstop(index);\n + if (index == max)\n + this.detach();\n + };\n + this.selectTabstop = function(index) {\n + var ts = this.tabstops[this.index];\n + if (ts)\n + this.addTabstopMarkers(ts);\n + this.index = index;\n + ts = this.tabstops[this.index];\n + if (!ts || !ts.length)\n + return;\n + \n + this.selectedTabstop = ts;\n + if (!this.editor.inVirtualSelectionMode) { \n + var sel = this.editor.multiSelect;\n + sel.toSingleRange(ts.firstNonLinked.clone());\n + for (var i = ts.length; i--;) {\n + if (ts.hasLinkedRanges && ts[i].linked)\n + continue;\n + sel.addRange(ts[i].clone(), true);\n + }\n + } else {\n + this.editor.selection.setRange(ts.firstNonLinked);\n + }\n + \n + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n + };\n + this.addTabstops = function(tabstops, start, end) {\n + if (!tabstops[0]) {\n + var p = Range.fromPoints(end, end);\n + moveRelative(p.start, start);\n + moveRelative(p.end, start);\n + tabstops[0] = [p];\n + tabstops[0].index = 0;\n + }\n +\n + var i = this.index;\n + var arg = [i, 0];\n + var ranges = this.ranges;\n + var editor = this.editor;\n + tabstops.forEach(function(ts) {\n + for (var i = ts.length; i--;) {\n + var p = ts[i];\n + var range = Range.fromPoints(p.start, p.end || p.start);\n + movePoint(range.start, start);\n + movePoint(range.end, start);\n + range.original = p;\n + range.tabstop = ts;\n + ranges.push(range);\n + ts[i] = range;\n + if (p.fmtString) {\n + range.linked = true;\n + ts.hasLinkedRanges = true;\n + } else if (!ts.firstNonLinked)\n + ts.firstNonLinked = range;\n + }\n + if (!ts.firstNonLinked)\n + ts.hasLinkedRanges = false;\n + arg.push(ts);\n + this.addTabstopMarkers(ts);\n + }, this);\n + arg.push(arg.splice(2, 1)[0]);\n + this.tabstops.splice.apply(this.tabstops, arg);\n + };\n +\n + this.addTabstopMarkers = function(ts) {\n + var session = this.editor.session;\n + ts.forEach(function(range) {\n + if (!range.markerId)\n + range.markerId = session.addMarker(range, "ace_snippet-marker", "text");\n + });\n + };\n + this.removeTabstopMarkers = function(ts) {\n + var session = this.editor.session;\n + ts.forEach(function(range) {\n + session.removeMarker(range.markerId);\n + range.markerId = null;\n + });\n + };\n + this.removeRange = function(range) {\n + var i = range.tabstop.indexOf(range);\n + range.tabstop.splice(i, 1);\n + i = this.ranges.indexOf(range);\n + this.ranges.splice(i, 1);\n + this.editor.session.removeMarker(range.markerId);\n + };\n +\n + this.keyboardHandler = new HashHandler();\n + this.keyboardHandler.bindKeys({\n + "Tab": function(ed) {\n + ed.tabstopManager.tabNext(1);\n + },\n + "Shift-Tab": function(ed) {\n + ed.tabstopManager.tabNext(-1);\n + },\n + "Esc": function(ed) {\n + ed.tabstopManager.detach();\n + },\n + "Return": function(ed) {\n + return false;\n + }\n + });\n +}).call(TabstopManager.prototype);\n +\n +\n +var movePoint = function(point, diff) {\n + if (point.row == 0)\n + point.column += diff.column;\n + point.row += diff.row;\n +};\n +\n +var moveRelative = function(point, start) {\n + if (point.row == start.row)\n + point.column -= start.column;\n + point.row -= start.row;\n +};\n +\n +\n +require("./lib/dom").importCssString("\\\n +.ace_snippet-marker {\\\n + -moz-box-sizing: border-box;\\\n + box-sizing: border-box;\\\n + background: rgba(194, 193, 208, 0.09);\\\n + border: 1px dotted rgba(211, 208, 235, 0.62);\\\n + position: absolute;\\\n +}");\n +\n +exports.snippetManager = new SnippetManager();\n +\n +\n +});\n +\n +define(\'ace/autocomplete\', [\'require\', \'exports\', \'module\' , \'ace/keyboard/hash_handler\', \'ace/autocomplete/popup\', \'ace/autocomplete/util\', \'ace/lib/event\', \'ace/lib/lang\', \'ace/snippets\'], function(require, exports, module) {\n +\n +\n +var HashHandler = require("./keyboard/hash_handler").HashHandler;\n +var AcePopup = require("./autocomplete/popup").AcePopup;\n +var util = require("./autocomplete/util");\n +var event = require("./lib/event");\n +var lang = require("./lib/lang");\n +var snippetManager = require("./snippets").snippetManager;\n +\n +var Autocomplete = function() {\n + this.keyboardHandler = new HashHandler();\n + this.keyboardHandler.bindKeys(this.commands);\n +\n + this.blurListener = this.blurListener.bind(this);\n + this.changeListener = this.changeListener.bind(this);\n + this.mousedownListener = this.mousedownListener.bind(this);\n + this.mousewheelListener = this.mousewheelListener.bind(this);\n + \n + this.changeTimer = lang.delayedCall(function() {\n + this.updateCompletions(true);\n + }.bind(this))\n +};\n +\n +(function() {\n + this.$init = function() {\n + this.popup = new AcePopup(document.body || document.documentElement);\n + this.popup.on("click", function(e) {\n + this.insertMatch();\n + e.stop();\n + }.bind(this));\n + };\n +\n + this.openPopup = function(editor, prefix, keepPopupPosition) {\n + if (!this.popup)\n + this.$init();\n +\n + this.popup.setData(this.completions.filtered);\n +\n + var renderer = editor.renderer;\n + if (!keepPopupPosition) {\n + this.popup.setFontSize(editor.getFontSize());\n +\n + var lineHeight = renderer.layerConfig.lineHeight;\n + \n + var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); \n + pos.left -= this.popup.getTextLeftOffset();\n + \n + var rect = editor.container.getBoundingClientRect();\n + pos.top += rect.top - renderer.layerConfig.offset;\n + pos.left += rect.left;\n + pos.left += renderer.$gutterLayer.gutterWidth;\n +\n + this.popup.show(pos, lineHeight);\n + }\n + };\n +\n + this.detach = function() {\n + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n + this.editor.off("changeSelection", this.changeListener);\n + this.editor.off("blur", this.changeListener);\n + this.editor.off("mousedown", this.mousedownListener);\n + this.editor.off("mousewheel", this.mousewheelListener);\n + this.changeTimer.cancel();\n + \n + if (this.popup)\n + this.popup.hide();\n +\n + this.activated = false;\n + this.completions = this.base = null;\n + };\n +\n + this.changeListener = function(e) {\n + var cursor = this.editor.selection.lead;\n + if (cursor.row != this.base.row || cursor.column < this.base.column) {\n + this.detach();\n + }\n + if (this.activated)\n + this.changeTimer.schedule();\n + else\n + this.detach();\n + };\n +\n + this.blurListener = function() {\n + if (document.activeElement != this.editor.textInput.getElement())\n + this.detach();\n + };\n +\n + this.mousedownListener = function(e) {\n + this.detach();\n + };\n +\n + this.mousewheelListener = function(e) {\n + this.detach();\n + };\n +\n + this.goTo = function(where) {\n + var row = this.popup.getRow();\n + var max = this.popup.session.getLength() - 1;\n +\n + switch(where) {\n + case "up": row = row < 0 ? max : row - 1; break;\n + case "down": row = row >= max ? -1 : row + 1; break;\n + case "start": row = 0; break;\n + case "end": row = max; break;\n + }\n +\n + this.popup.setRow(row);\n + };\n +\n + this.insertMatch = function(data) {\n + if (!data)\n + data = this.popup.getData(this.popup.getRow());\n + if (!data)\n + return false;\n + if (data.completer && data.completer.insertMatch) {\n + data.completer.insertMatch(this.editor);\n + } else {\n + if (this.completions.filterText) {\n + var ranges = this.editor.selection.getAllRanges();\n + for (var i = 0, range; range = ranges[i]; i++) {\n + range.start.column -= this.completions.filterText.length;\n + this.editor.session.remove(range);\n + }\n + }\n + if (data.snippet)\n + snippetManager.insertSnippet(this.editor, data.snippet);\n + else\n + this.editor.execCommand("insertstring", data.value || data);\n + }\n + this.detach();\n + };\n +\n + this.commands = {\n + "Up": function(editor) { editor.completer.goTo("up"); },\n + "Down": function(editor) { editor.completer.goTo("down"); },\n + "Ctrl-Up|Ctrl-Home": function(editor) { editor.completer.goTo("start"); },\n + "Ctrl-Down|Ctrl-End": function(editor) { editor.completer.goTo("end"); },\n +\n + "Esc": function(editor) { editor.completer.detach(); },\n + "Space": function(editor) { editor.completer.detach(); editor.insert(" ");},\n + "Return": function(editor) { editor.completer.insertMatch(); },\n + "Shift-Return": function(editor) { editor.completer.insertMatch(true); },\n + "Tab": function(editor) { editor.completer.insertMatch(); },\n +\n + "PageUp": function(editor) { editor.completer.popup.gotoPageUp(); },\n + "PageDown": function(editor) { editor.completer.popup.gotoPageDown(); }\n + };\n +\n + this.gatherCompletions = function(editor, callback) {\n + var session = editor.getSession();\n + var pos = editor.getCursorPosition();\n + \n + var line = session.getLine(pos.row);\n + var prefix = util.retrievePrecedingIdentifier(line, pos.column);\n + \n + this.base = editor.getCursorPosition();\n + this.base.column -= prefix.length;\n +\n + var matches = [];\n + util.parForEach(editor.completers, function(completer, next) {\n + completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n + if (!err)\n + matches = matches.concat(results);\n + next();\n + });\n + }, function() {\n + callback(null, {\n + prefix: prefix,\n + matches: matches\n + });\n + });\n + return true;\n + };\n +\n + this.showPopup = function(editor) {\n + if (this.editor)\n + this.detach();\n + \n + this.activated = true;\n +\n + this.editor = editor;\n + if (editor.completer != this) {\n + if (editor.completer)\n + editor.completer.detach();\n + editor.completer = this;\n + }\n +\n + editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n + editor.on("changeSelection", this.changeListener);\n + editor.on("blur", this.blurListener);\n + editor.on("mousedown", this.mousedownListener);\n + editor.on("mousewheel", this.mousewheelListener);\n + \n + this.updateCompletions();\n + };\n + \n + this.updateCompletions = function(keepPopupPosition) {\n + if (keepPopupPosition && this.base && this.completions) {\n + var pos = this.editor.getCursorPosition();\n + var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n + if (prefix == this.completions.filterText)\n + return;\n + this.completions.setFilter(prefix);\n + if (!this.completions.filtered.length)\n + return this.detach();\n + this.openPopup(this.editor, prefix, keepPopupPosition);\n + return;\n + }\n + this.gatherCompletions(this.editor, function(err, results) {\n + var matches = results && results.matches;\n + if (!matches || !matches.length)\n + return this.detach();\n +\n + this.completions = new FilteredList(matches);\n + this.completions.setFilter(results.prefix);\n + if (!this.completions.filtered.length)\n + return this.detach();\n + this.openPopup(this.editor, results.prefix, keepPopupPosition);\n + }.bind(this));\n + };\n +\n + this.cancelContextMenu = function() {\n + var stop = function(e) {\n + this.editor.off("nativecontextmenu", stop);\n + if (e && e.domEvent)\n + event.stopEvent(e.domEvent);\n + }.bind(this);\n + setTimeout(stop, 10);\n + this.editor.on("nativecontextmenu", stop);\n + };\n +\n +}).call(Autocomplete.prototype);\n +\n +Autocomplete.startCommand = {\n + name: "startAutocomplete",\n + exec: function(editor) {\n + if (!editor.completer)\n + editor.completer = new Autocomplete();\n + editor.completer.showPopup(editor);\n + editor.completer.cancelContextMenu();\n + },\n + bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space"\n +};\n +\n +var FilteredList = function(array, filterText, mutateData) {\n + this.all = array;\n + this.filtered = array;\n + this.filterText = filterText || "";\n +};\n +(function(){\n + this.setFilter = function(str) {\n + if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n + var matches = this.filtered;\n + else\n + var matches = this.all;\n +\n + this.filterText = str;\n + matches = this.filterCompletions(matches, this.filterText);\n + matches = matches.sort(function(a, b) {\n + return b.exactMatch - a.exactMatch || b.score - a.score;\n + });\n + var prev = null;\n + matches = matches.filter(function(item){\n + var caption = item.value || item.caption || item.snippet; \n + if (caption === prev) return false;\n + prev = caption;\n + return true;\n + });\n + \n + this.filtered = matches;\n + };\n + this.filterCompletions = function(items, needle) {\n + var results = [];\n + var upper = needle.toUpperCase();\n + var lower = needle.toLowerCase();\n + loop: for (var i = 0, item; item = items[i]; i++) {\n + var caption = item.value || item.caption || item.snippet;\n + if (!caption) continue;\n + var lastIndex = -1;\n + var matchMask = 0;\n + var penalty = 0;\n + var index, distance;\n + for (var j = 0; j < needle.length; j++) {\n + var i1 = caption.indexOf(lower[j], lastIndex + 1);\n + var i2 = caption.indexOf(upper[j], lastIndex + 1);\n + index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n + if (index < 0)\n + continue loop;\n + distance = index - lastIndex - 1;\n + if (distance > 0) {\n + if (lastIndex === -1)\n + penalty += 10;\n + penalty += distance;\n + }\n + matchMask = matchMask | (1 << index);\n + lastIndex = index;\n + }\n + item.matchMask = matchMask;\n + item.exactMatch = penalty ? 0 : 1;\n + item.score = (item.score || 0) - penalty;\n + results.push(item);\n + }\n + return results;\n + };\n +}).call(FilteredList.prototype);\n +\n +exports.Autocomplete = Autocomplete;\n +exports.FilteredList = FilteredList;\n +\n +});\n +\n +define(\'ace/autocomplete/popup\', [\'require\', \'exports\', \'module\' , \'ace/edit_session\', \'ace/virtual_renderer\', \'ace/editor\', \'ace/range\', \'ace/lib/event\', \'ace/lib/lang\', \'ace/lib/dom\'], function(require, exports, module) {\n +\n +\n +var EditSession = require("../edit_session").EditSession;\n +var Renderer = require("../virtual_renderer").VirtualRenderer;\n +var Editor = require("../editor").Editor;\n +var Range = require("../range").Range;\n +var event = require("../lib/event");\n +var lang = require("../lib/lang");\n +var dom = require("../lib/dom");\n +\n +var $singleLineEditor = function(el) {\n + var renderer = new Renderer(el);\n +\n + renderer.$maxLines = 4;\n + \n + var editor = new Editor(renderer);\n +\n + editor.setHighlightActiveLine(false);\n + editor.setShowPrintMargin(false);\n + editor.renderer.setShowGutter(false);\n + editor.renderer.setHighlightGutterLine(false);\n +\n + editor.$mouseHandler.$focusWaitTimout = 0;\n +\n + return editor;\n +};\n +\n +var AcePopup = function(parentNode) {\n + var el = dom.createElement("div");\n + var popup = new $singleLineEditor(el);\n + \n + if (parentNode)\n + parentNode.appendChild(el);\n + el.style.display = "none";\n + popup.renderer.content.style.cursor = "default";\n + popup.renderer.setStyle("ace_autocomplete");\n + \n + popup.setOption("displayIndentGuides", false);\n +\n + var noop = function(){};\n +\n + popup.focus = noop;\n + popup.$isFocused = true;\n +\n + popup.renderer.$cursorLayer.restartTimer = noop;\n + popup.renderer.$cursorLayer.element.style.opacity = 0;\n +\n + popup.renderer.$maxLines = 8;\n + popup.renderer.$keepTextAreaAtCursor = false;\n +\n + popup.setHighlightActiveLine(false);\n + popup.session.highlight("");\n + popup.session.$searchHighlight.clazz = "ace_highlight-marker";\n +\n + popup.on("mousedown", function(e) {\n + var pos = e.getDocumentPosition();\n + popup.moveCursorToPosition(pos);\n + popup.selection.clearSelection();\n + selectionMarker.start.row = selectionMarker.end.row = pos.row;\n + e.stop();\n + });\n +\n + var lastMouseEvent;\n + var hoverMarker = new Range(-1,0,-1,Infinity);\n + var selectionMarker = new Range(-1,0,-1,Infinity);\n + selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine");\n + popup.setSelectOnHover = function(val) {\n + if (!val) {\n + hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine");\n + } else if (hoverMarker.id) {\n + popup.session.removeMarker(hoverMarker.id);\n + hoverMarker.id = null;\n + }\n + }\n + popup.setSelectOnHover(false);\n + popup.on("mousemove", function(e) {\n + if (!lastMouseEvent) {\n + lastMouseEvent = e;\n + return;\n + }\n + if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n + return;\n + }\n + lastMouseEvent = e;\n + lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n + var row = lastMouseEvent.getDocumentPosition().row;\n + if (hoverMarker.start.row != row) {\n + if (!hoverMarker.id)\n + popup.setRow(row);\n + setHoverMarker(row);\n + }\n + });\n + popup.renderer.on("beforeRender", function() {\n + if (lastMouseEvent && hoverMarker.start.row != -1) {\n + lastMouseEvent.$pos = null;\n + var row = lastMouseEvent.getDocumentPosition().row;\n + if (!hoverMarker.id)\n + popup.setRow(row);\n + setHoverMarker(row, true);\n + }\n + });\n + popup.renderer.on("afterRender", function() {\n + var row = popup.getRow();\n + var t = popup.renderer.$textLayer;\n + var selected = t.element.childNodes[row - t.config.firstRow];\n + if (selected == t.selectedNode)\n + return;\n + if (t.selectedNode)\n + dom.removeCssClass(t.selectedNode, "ace_selected");\n + t.selectedNode = selected;\n + if (selected)\n + dom.addCssClass(selected, "ace_selected");\n + });\n + var hideHoverMarker = function() { setHoverMarker(-1) };\n + var setHoverMarker = function(row, suppressRedraw) {\n + if (row !== hoverMarker.start.row) {\n + hoverMarker.start.row = hoverMarker.end.row = row;\n + if (!suppressRedraw)\n + popup.session._emit("changeBackMarker");\n + popup._emit("changeHoverMarker");\n + }\n + };\n + popup.getHoveredRow = function() {\n + return hoverMarker.start.row;\n + };\n + \n + event.addListener(popup.container, "mouseout", hideHoverMarker);\n + popup.on("hide", hideHoverMarker);\n + popup.on("changeSelection", hideHoverMarker);\n + \n + popup.session.doc.getLength = function() {\n + return popup.data.length;\n + };\n + popup.session.doc.getLine = function(i) {\n + var data = popup.data[i];\n + if (typeof data == "string")\n + return data;\n + return (data && data.value) || "";\n + };\n +\n + var bgTokenizer = popup.session.bgTokenizer;\n + bgTokenizer.$tokenizeRow = function(i) {\n + var data = popup.data[i];\n + var tokens = [];\n + if (!data)\n + return tokens;\n + if (typeof data == "string")\n + data = {value: data};\n + if (!data.caption)\n + data.caption = data.value;\n +\n + var last = -1;\n + var flag, c;\n + for (var i = 0; i < data.caption.length; i++) {\n + c = data.caption[i];\n + flag = data.matchMask & (1 << i) ? 1 : 0;\n + if (last !== flag) {\n + tokens.push({type: data.className || "" + ( flag ? "completion-highlight" : ""), value: c});\n + last = flag;\n + } else {\n + tokens[tokens.length - 1].value += c;\n + }\n + }\n +\n + if (data.meta) {\n + var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth;\n + if (data.meta.length + data.caption.length < maxW - 2)\n + tokens.push({type: "rightAlignedText", value: data.meta});\n + }\n + return tokens;\n + };\n + bgTokenizer.$updateOnChange = noop;\n + bgTokenizer.start = noop;\n + \n + popup.session.$computeWidth = function() {\n + return this.screenWidth = 0;\n + }\n + popup.data = [];\n + popup.setData = function(list) {\n + popup.data = list || [];\n + popup.setValue(lang.stringRepeat("\\n", list.length), -1);\n + popup.setRow(0);\n + };\n + popup.getData = function(row) {\n + return popup.data[row];\n + };\n +\n + popup.getRow = function() {\n + return selectionMarker.start.row;\n + };\n + popup.setRow = function(line) {\n + line = Math.max(-1, Math.min(this.data.length, line));\n + if (selectionMarker.start.row != line) {\n + popup.selection.clearSelection();\n + selectionMarker.start.row = selectionMarker.end.row = line || 0;\n + popup.session._emit("changeBackMarker");\n + popup.moveCursorTo(line || 0, 0);\n + if (popup.isOpen)\n + popup._signal("select");\n + }\n + };\n +\n + popup.hide = function() {\n + this.container.style.display = "none";\n + this._signal("hide");\n + popup.isOpen = false;\n + };\n + popup.show = function(pos, lineHeight) {\n + var el = this.container;\n + var screenHeight = window.innerHeight;\n + var renderer = this.renderer;\n + var maxH = renderer.$maxLines * lineHeight * 1.4;\n + var top = pos.top + this.$borderSize;\n + if (top + maxH > screenHeight - lineHeight) {\n + el.style.top = "";\n + el.style.bottom = screenHeight - top + "px";\n + } else {\n + top += lineHeight;\n + el.style.top = top + "px";\n + el.style.bottom = "";\n + }\n +\n + el.style.left = pos.left + "px";\n + el.style.display = "";\n + this.renderer.$textLayer.checkForSizeChanges();\n +\n + this._signal("show");\n + lastMouseEvent = null;\n + popup.isOpen = true;\n + };\n + \n + popup.getTextLeftOffset = function() {\n + return this.$borderSize + this.renderer.$padding + this.$imageSize;\n + };\n + \n + popup.$imageSize = 0;\n + popup.$borderSize = 1;\n +\n + return popup;\n +};\n +\n +dom.importCssString("\\\n +.ace_autocomplete.ace-tm .ace_marker-layer .ace_active-line {\\\n + background-color: #CAD6FA;\\\n + z-index: 1;\\\n +}\\\n +.ace_autocomplete.ace-tm .ace_line-hover {\\\n + border: 1px solid #abbffe;\\\n + margin-top: -1px;\\\n + background: rgba(233,233,253,0.4);\\\n +}\\\n +.ace_autocomplete .ace_line-hover {\\\n + position: absolute;\\\n + z-index: 2;\\\n +}\\\n +.ace_rightAlignedText {\\\n + color: gray;\\\n + display: inline-block;\\\n + position: absolute;\\\n + right: 4px;\\\n + text-align: right;\\\n + z-index: -1;\\\n +}\\\n +.ace_autocomplete .ace_completion-highlight{\\\n + color: #000;\\\n + text-shadow: 0 0 0.01em;\\\n +}\\\n +.ace_autocomplete {\\\n + width: 280px;\\\n + z-index: 200000;\\\n + background: #fbfbfb;\\\n + color: #444;\\\n + border: 1px lightgray solid;\\\n + position: fixed;\\\n + box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n + line-height: 1.4;\\\n +}");\n +\n +exports.AcePopup = AcePopup;\n +\n +});\n +\n +define(\'ace/autocomplete/util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +exports.parForEach = function(array, fn, callback) {\n + var completed = 0;\n + var arLength = array.length;\n + if (arLength === 0)\n + callback();\n + for (var i = 0; i < arLength; i++) {\n + fn(array[i], function(result, err) {\n + completed++;\n + if (completed === arLength)\n + callback(result, err);\n + });\n + }\n +}\n +\n +var ID_REGEX = /[a-zA-Z_0-9\\$-]/;\n +\n +exports.retrievePrecedingIdentifier = function(text, pos, regex) {\n + regex = regex || ID_REGEX;\n + var buf = [];\n + for (var i = pos-1; i >= 0; i--) {\n + if (regex.test(text[i]))\n + buf.push(text[i]);\n + else\n + break;\n + }\n + return buf.reverse().join("");\n +}\n +\n +exports.retrieveFollowingIdentifier = function(text, pos, regex) {\n + regex = regex || ID_REGEX;\n + var buf = [];\n + for (var i = pos; i < text.length; i++) {\n + if (regex.test(text[i]))\n + buf.push(text[i]);\n + else\n + break;\n + }\n + return buf;\n +}\n +\n +});\n +\n +define(\'ace/autocomplete/text_completer\', [\'require\', \'exports\', \'module\' , \'ace/range\'], function(require, exports, module) {\n + var Range = require("ace/range").Range;\n + \n + var splitRegex = /[^a-zA-Z_0-9\\$\\-]+/;\n +\n + function getWordIndex(doc, pos) {\n + var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n + return textBefore.split(splitRegex).length - 1;\n + }\n + function wordDistance(doc, pos) {\n + var prefixPos = getWordIndex(doc, pos);\n + var words = doc.getValue().split(splitRegex);\n + var wordScores = Object.create(null);\n + \n + var currentWord = words[prefixPos];\n +\n + words.forEach(function(word, idx) {\n + if (!word || word === currentWord) return;\n +\n + var distance = Math.abs(prefixPos - idx);\n + var score = words.length - distance;\n + if (wordScores[word]) {\n + wordScores[word] = Math.max(score, wordScores[word]);\n + } else {\n + wordScores[word] = score;\n + }\n + });\n + return wordScores;\n + }\n +\n + exports.getCompletions = function(editor, session, pos, prefix, callback) {\n + var wordScore = wordDistance(session, pos, prefix);\n + var wordList = Object.keys(wordScore);\n + callback(null, wordList.map(function(word) {\n + return {\n + name: word,\n + value: word,\n + score: wordScore[word],\n + meta: "local"\n + };\n + }));\n + };\n +}); + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>56218</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-modelist.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-modelist.js.xml index b845cb97f1..a960635e7e 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-modelist.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-modelist.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155553.0</string> </value> + <value> <string>ts83646622.7</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -59,17 +59,17 @@ Mode.prototype.supportsFile = function(filename) {\n };\n var supportedModes = {\n ABAP: ["abap"],\n - ADA: ["ada|adb"],\n ActionScript:["as"],\n + ADA: ["ada|adb"],\n AsciiDoc: ["asciidoc"],\n Assembly_x86:["asm"],\n AutoHotKey: ["ahk"],\n BatchFile: ["bat|cmd"],\n C9Search: ["c9search_results"],\n - C_Cpp: ["c|cc|cpp|cxx|h|hh|hpp"],\n + C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp"],\n Clojure: ["clj"],\n - Cobol: ["^CBL|COB"],\n - coffee: ["^Cakefile|coffee|cf|cson"],\n + Cobol: ["CBL|COB"],\n + coffee: ["coffee|cf|cson|^Cakefile"],\n ColdFusion: ["cfm"],\n CSharp: ["cs"],\n CSS: ["css"],\n @@ -81,25 +81,27 @@ var supportedModes = {\n Erlang: ["erl|hrl"],\n EJS: ["ejs"],\n Forth: ["frt|fs|ldr"],\n - FreeMarker: ["ftl"],\n + FTL: ["ftl"],\n Glsl: ["glsl|frag|vert"],\n golang: ["go"],\n Groovy: ["groovy"],\n HAML: ["haml"],\n + Handlebars: ["hbs|handlebars|tpl|mustache"],\n Haskell: ["hs"],\n haXe: ["hx"],\n - HTML: ["htm|html|xhtml"],\n + HTML: ["html|htm|xhtml"],\n HTML_Ruby: ["erb|rhtml|html.erb"],\n - Ini: ["Ini|conf"],\n + INI: ["ini|conf|cfg|prefs"],\n + Jack: ["jack"],\n Jade: ["jade"],\n Java: ["java"],\n - JavaScript: ["js"],\n + JavaScript: ["js|jsm"],\n JSON: ["json"],\n JSONiq: ["jq"],\n JSP: ["jsp"],\n JSX: ["jsx"],\n Julia: ["jl"],\n - LaTeX: ["latex|tex|ltx|bib"],\n + LaTeX: ["tex|latex|ltx|bib"],\n LESS: ["less"],\n Liquid: ["liquid"],\n Lisp: ["lisp"],\n @@ -109,11 +111,12 @@ var supportedModes = {\n Lua: ["lua"],\n LuaPage: ["lp"],\n Lucene: ["lucene"],\n - Makefile: ["^GNUmakefile|^makefile|^Makefile|^OCamlMakefile|make"],\n + Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],\n MATLAB: ["matlab"],\n Markdown: ["md|markdown"],\n MySQL: ["mysql"],\n MUSHCode: ["mc|mush"],\n + Nix: ["nix"],\n ObjectiveC: ["m|mm"],\n OCaml: ["ml|mli"],\n Pascal: ["pas|p"],\n @@ -123,19 +126,23 @@ var supportedModes = {\n Powershell: ["ps1"],\n Prolog: ["plg|prolog"],\n Properties: ["properties"],\n + Protobuf: ["proto"],\n Python: ["py"],\n R: ["r"],\n RDoc: ["Rd"],\n RHTML: ["Rhtml"],\n - Ruby: ["ru|gemspec|rake|rb"],\n + Ruby: ["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],\n Rust: ["rs"],\n SASS: ["sass"],\n SCAD: ["scad"],\n Scala: ["scala"],\n Scheme: ["scm|rkt"],\n SCSS: ["scss"],\n - SH: ["sh|bash"],\n + SH: ["sh|bash|^.bashrc"],\n + SJS: ["sjs"],\n + Space: ["space"],\n snippets: ["snippets"],\n + Soy_Template:["soy"],\n SQL: ["sql"],\n Stylus: ["styl|stylus"],\n SVG: ["svg"],\n @@ -145,12 +152,13 @@ var supportedModes = {\n Textile: ["textile"],\n Toml: ["toml"],\n Twig: ["twig"],\n - Typescript: ["typescript|ts|str"],\n + Typescript: ["ts|typescript|str"],\n VBScript: ["vbs"],\n Velocity: ["vm"],\n + Verilog: ["v|vh|sv|svh"],\n XML: ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],\n XQuery: ["xq"],\n - YAML: ["yaml"]\n + YAML: ["yaml|yml"]\n };\n \n var nameOverrides = {\n @@ -159,7 +167,8 @@ var nameOverrides = {\n golang: "Go",\n C_Cpp: "C/C++",\n coffee: "CoffeeScript",\n - HTML_Ruby: "HTML (Ruby)"\n + HTML_Ruby: "HTML (Ruby)",\n + FTL: "FreeMarker"\n };\n var modesByName = {};\n for (var name in supportedModes) {\n @@ -189,7 +198,7 @@ module.exports = {\n </item> <item> <key> <string>size</string> </key> - <value> <int>4320</int> </value> + <value> <int>4644</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-old_ie.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-old_ie.js.xml new file mode 100644 index 0000000000..a20582d5a9 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-old_ie.js.xml @@ -0,0 +1,543 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.38</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>ext-old_ie.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/ext/old_ie\', [\'require\', \'exports\', \'module\' , \'ace/lib/useragent\', \'ace/tokenizer\', \'ace/ext/searchbox\'], function(require, exports, module) {\n +\n +var MAX_TOKEN_COUNT = 1000;\n +var useragent = require("../lib/useragent");\n +var TokenizerModule = require("../tokenizer");\n +\n +function patch(obj, name, regexp, replacement) {\n + eval("obj[\'" + name + "\']=" + obj[name].toString().replace(\n + regexp, replacement\n + ));\n +}\n +\n +if (useragent.isIE && useragent.isIE < 10 && window.top.document.compatMode === "BackCompat")\n + useragent.isOldIE = true;\n +\n +if (typeof document != "undefined" && !document.documentElement.querySelector) { \n + useragent.isOldIE = true;\n + var qs = function(el, selector) {\n + if (selector.charAt(0) == ".") {\n + var classNeme = selector.slice(1);\n + } else {\n + var m = selector.match(/(\\w+)=(\\w+)/);\n + var attr = m && m[1];\n + var attrVal = m && m[2];\n + }\n + for (var i = 0; i < el.all.length; i++) {\n + var ch = el.all[i];\n + if (classNeme) {\n + if (ch.className.indexOf(classNeme) != -1)\n + return ch;\n + } else if (attr) {\n + if (ch.getAttribute(attr) == attrVal)\n + return ch;\n + }\n + }\n + };\n + var sb = require("./searchbox").SearchBox.prototype;\n + patch(\n + sb, "$initElements",\n + /([^\\s=]*).querySelector\\((".*?")\\)/g, \n + "qs($1, $2)"\n + );\n +}\n + \n +var compliantExecNpcg = /()??/.exec("")[1] === undefined;\n +if (compliantExecNpcg)\n + return;\n +var proto = TokenizerModule.Tokenizer.prototype;\n +TokenizerModule.Tokenizer_orig = TokenizerModule.Tokenizer;\n +proto.getLineTokens_orig = proto.getLineTokens;\n +\n +patch(\n + TokenizerModule, "Tokenizer",\n + "ruleRegExps.push(adjustedregex);\\n", \n + function(m) {\n + return m + \'\\\n + if (state[i].next && RegExp(adjustedregex).test(""))\\n\\\n + rule._qre = RegExp(adjustedregex, "g");\\n\\\n + \';\n + }\n +);\n +TokenizerModule.Tokenizer.prototype = proto;\n +patch(\n + proto, "getLineTokens",\n + /if \\(match\\[i \\+ 1\\] === undefined\\)\\s*continue;/, \n + "if (!match[i + 1]) {\\n\\\n + if (value)continue;\\n\\\n + var qre = state[mapping[i]]._qre;\\n\\\n + if (!qre) continue;\\n\\\n + qre.lastIndex = lastIndex;\\n\\\n + if (!qre.exec(line) || qre.lastIndex != lastIndex)\\n\\\n + continue;\\n\\\n + }"\n +);\n +\n +useragent.isOldIE = true;\n +\n +});\n +\n +define(\'ace/ext/searchbox\', [\'require\', \'exports\', \'module\' , \'ace/lib/dom\', \'ace/lib/lang\', \'ace/lib/event\', \'ace/keyboard/hash_handler\', \'ace/lib/keys\'], function(require, exports, module) {\n +\n +\n +var dom = require("../lib/dom");\n +var lang = require("../lib/lang");\n +var event = require("../lib/event");\n +var searchboxCss = "\\\n +/* ------------------------------------------------------------------------------------------\\\n +* Editor Search Form\\\n +* --------------------------------------------------------------------------------------- */\\\n +.ace_search {\\\n +background-color: #ddd;\\\n +border: 1px solid #cbcbcb;\\\n +border-top: 0 none;\\\n +max-width: 297px;\\\n +overflow: hidden;\\\n +margin: 0;\\\n +padding: 4px;\\\n +padding-right: 6px;\\\n +padding-bottom: 0;\\\n +position: absolute;\\\n +top: 0px;\\\n +z-index: 99;\\\n +}\\\n +.ace_search.left {\\\n +border-left: 0 none;\\\n +border-radius: 0px 0px 5px 0px;\\\n +left: 0;\\\n +}\\\n +.ace_search.right {\\\n +border-radius: 0px 0px 0px 5px;\\\n +border-right: 0 none;\\\n +right: 0;\\\n +}\\\n +.ace_search_form, .ace_replace_form {\\\n +border-radius: 3px;\\\n +border: 1px solid #cbcbcb;\\\n +float: left;\\\n +margin-bottom: 4px;\\\n +overflow: hidden;\\\n +}\\\n +.ace_search_form.ace_nomatch {\\\n +outline: 1px solid red;\\\n +}\\\n +.ace_search_field {\\\n +background-color: white;\\\n +border-right: 1px solid #cbcbcb;\\\n +border: 0 none;\\\n +-webkit-box-sizing: border-box;\\\n +-moz-box-sizing: border-box;\\\n +box-sizing: border-box;\\\n +display: block;\\\n +float: left;\\\n +height: 22px;\\\n +outline: 0;\\\n +padding: 0 7px;\\\n +width: 214px;\\\n +margin: 0;\\\n +}\\\n +.ace_searchbtn,\\\n +.ace_replacebtn {\\\n +background: #fff;\\\n +border: 0 none;\\\n +border-left: 1px solid #dcdcdc;\\\n +cursor: pointer;\\\n +display: block;\\\n +float: left;\\\n +height: 22px;\\\n +margin: 0;\\\n +padding: 0;\\\n +position: relative;\\\n +}\\\n +.ace_searchbtn:last-child,\\\n +.ace_replacebtn:last-child {\\\n +border-top-right-radius: 3px;\\\n +border-bottom-right-radius: 3px;\\\n +}\\\n +.ace_searchbtn:disabled {\\\n +background: none;\\\n +cursor: default;\\\n +}\\\n +.ace_searchbtn {\\\n +background-position: 50% 50%;\\\n +background-repeat: no-repeat;\\\n +width: 27px;\\\n +}\\\n +.ace_searchbtn.prev {\\\n +background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \\\n +}\\\n +.ace_searchbtn.next {\\\n +background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \\\n +}\\\n +.ace_searchbtn_close {\\\n +background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\n +border-radius: 50%;\\\n +border: 0 none;\\\n +color: #656565;\\\n +cursor: pointer;\\\n +display: block;\\\n +float: right;\\\n +font-family: Arial;\\\n +font-size: 16px;\\\n +height: 14px;\\\n +line-height: 16px;\\\n +margin: 5px 1px 9px 5px;\\\n +padding: 0;\\\n +text-align: center;\\\n +width: 14px;\\\n +}\\\n +.ace_searchbtn_close:hover {\\\n +background-color: #656565;\\\n +background-position: 50% 100%;\\\n +color: white;\\\n +}\\\n +.ace_replacebtn.prev {\\\n +width: 54px\\\n +}\\\n +.ace_replacebtn.next {\\\n +width: 27px\\\n +}\\\n +.ace_button {\\\n +margin-left: 2px;\\\n +cursor: pointer;\\\n +-webkit-user-select: none;\\\n +-moz-user-select: none;\\\n +-o-user-select: none;\\\n +-ms-user-select: none;\\\n +user-select: none;\\\n +overflow: hidden;\\\n +opacity: 0.7;\\\n +border: 1px solid rgba(100,100,100,0.23);\\\n +padding: 1px;\\\n +-moz-box-sizing: border-box;\\\n +box-sizing: border-box;\\\n +color: black;\\\n +}\\\n +.ace_button:hover {\\\n +background-color: #eee;\\\n +opacity:1;\\\n +}\\\n +.ace_button:active {\\\n +background-color: #ddd;\\\n +}\\\n +.ace_button.checked {\\\n +border-color: #3399ff;\\\n +opacity:1;\\\n +}\\\n +.ace_search_options{\\\n +margin-bottom: 3px;\\\n +text-align: right;\\\n +-webkit-user-select: none;\\\n +-moz-user-select: none;\\\n +-o-user-select: none;\\\n +-ms-user-select: none;\\\n +user-select: none;\\\n +}";\n +var HashHandler = require("../keyboard/hash_handler").HashHandler;\n +var keyUtil = require("../lib/keys");\n +\n +dom.importCssString(searchboxCss, "ace_searchbox");\n +\n +var html = \'<div class="ace_search right">\\\n + <button type="button" action="hide" class="ace_searchbtn_close"></button>\\\n + <div class="ace_search_form">\\\n + <input class="ace_search_field" placeholder="Search for" spellcheck="false"></input>\\\n + <button type="button" action="findNext" class="ace_searchbtn next"></button>\\\n + <button type="button" action="findPrev" class="ace_searchbtn prev"></button>\\\n + </div>\\\n + <div class="ace_replace_form">\\\n + <input class="ace_search_field" placeholder="Replace with" spellcheck="false"></input>\\\n + <button type="button" action="replaceAndFindNext" class="ace_replacebtn">Replace</button>\\\n + <button type="button" action="replaceAll" class="ace_replacebtn">All</button>\\\n + </div>\\\n + <div class="ace_search_options">\\\n + <span action="toggleRegexpMode" class="ace_button" title="RegExp Search">.*</span>\\\n + <span action="toggleCaseSensitive" class="ace_button" title="CaseSensitive Search">Aa</span>\\\n + <span action="toggleWholeWords" class="ace_button" title="Whole Word Search">\\\\b</span>\\\n + </div>\\\n +</div>\'.replace(/>\\s+/g, ">");\n +\n +var SearchBox = function(editor, range, showReplaceForm) {\n + var div = dom.createElement("div");\n + div.innerHTML = html;\n + this.element = div.firstChild;\n +\n + this.$init();\n + this.setEditor(editor);\n +};\n +\n +(function() {\n + this.setEditor = function(editor) {\n + editor.searchBox = this;\n + editor.container.appendChild(this.element);\n + this.editor = editor;\n + };\n +\n + this.$initElements = function(sb) {\n + this.searchBox = sb.querySelector(".ace_search_form");\n + this.replaceBox = sb.querySelector(".ace_replace_form");\n + this.searchOptions = sb.querySelector(".ace_search_options");\n + this.regExpOption = sb.querySelector("[action=toggleRegexpMode]");\n + this.caseSensitiveOption = sb.querySelector("[action=toggleCaseSensitive]");\n + this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]");\n + this.searchInput = this.searchBox.querySelector(".ace_search_field");\n + this.replaceInput = this.replaceBox.querySelector(".ace_search_field");\n + };\n + \n + this.$init = function() {\n + var sb = this.element;\n + \n + this.$initElements(sb);\n + \n + var _this = this;\n + event.addListener(sb, "mousedown", function(e) {\n + setTimeout(function(){\n + _this.activeInput.focus();\n + }, 0);\n + event.stopPropagation(e);\n + });\n + event.addListener(sb, "click", function(e) {\n + var t = e.target || e.srcElement;\n + var action = t.getAttribute("action");\n + if (action && _this[action])\n + _this[action]();\n + else if (_this.$searchBarKb.commands[action])\n + _this.$searchBarKb.commands[action].exec(_this);\n + event.stopPropagation(e);\n + });\n +\n + event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\n + var keyString = keyUtil.keyCodeToString(keyCode);\n + var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\n + if (command && command.exec) {\n + command.exec(_this);\n + event.stopEvent(e);\n + }\n + });\n +\n + this.$onChange = lang.delayedCall(function() {\n + _this.find(false, false);\n + });\n +\n + event.addListener(this.searchInput, "input", function() {\n + _this.$onChange.schedule(20);\n + });\n + event.addListener(this.searchInput, "focus", function() {\n + _this.activeInput = _this.searchInput;\n + _this.searchInput.value && _this.highlight();\n + });\n + event.addListener(this.replaceInput, "focus", function() {\n + _this.activeInput = _this.replaceInput;\n + _this.searchInput.value && _this.highlight();\n + });\n + };\n + this.$closeSearchBarKb = new HashHandler([{\n + bindKey: "Esc",\n + name: "closeSearchBar",\n + exec: function(editor) {\n + editor.searchBox.hide();\n + }\n + }]);\n + this.$searchBarKb = new HashHandler();\n + this.$searchBarKb.bindKeys({\n + "Ctrl-f|Command-f|Ctrl-H|Command-Option-F": function(sb) {\n + var isReplace = sb.isReplace = !sb.isReplace;\n + sb.replaceBox.style.display = isReplace ? "" : "none";\n + sb[isReplace ? "replaceInput" : "searchInput"].focus();\n + },\n + "Ctrl-G|Command-G": function(sb) {\n + sb.findNext();\n + },\n + "Ctrl-Shift-G|Command-Shift-G": function(sb) {\n + sb.findPrev();\n + },\n + "esc": function(sb) {\n + setTimeout(function() { sb.hide();});\n + },\n + "Return": function(sb) {\n + if (sb.activeInput == sb.replaceInput)\n + sb.replace();\n + sb.findNext();\n + },\n + "Shift-Return": function(sb) {\n + if (sb.activeInput == sb.replaceInput)\n + sb.replace();\n + sb.findPrev();\n + },\n + "Tab": function(sb) {\n + (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\n + }\n + });\n +\n + this.$searchBarKb.addCommands([{\n + name: "toggleRegexpMode",\n + bindKey: {win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/"},\n + exec: function(sb) {\n + sb.regExpOption.checked = !sb.regExpOption.checked;\n + sb.$syncOptions();\n + }\n + }, {\n + name: "toggleCaseSensitive",\n + bindKey: {win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I"},\n + exec: function(sb) {\n + sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n + sb.$syncOptions();\n + }\n + }, {\n + name: "toggleWholeWords",\n + bindKey: {win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W"},\n + exec: function(sb) {\n + sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n + sb.$syncOptions();\n + }\n + }]);\n +\n + this.$syncOptions = function() {\n + dom.setCssClass(this.regExpOption, "checked", this.regExpOption.checked);\n + dom.setCssClass(this.wholeWordOption, "checked", this.wholeWordOption.checked);\n + dom.setCssClass(this.caseSensitiveOption, "checked", this.caseSensitiveOption.checked);\n + this.find(false, false);\n + };\n +\n + this.highlight = function(re) {\n + this.editor.session.highlight(re || this.editor.$search.$options.re);\n + this.editor.renderer.updateBackMarkers()\n + };\n + this.find = function(skipCurrent, backwards) {\n + var range = this.editor.find(this.searchInput.value, {\n + skipCurrent: skipCurrent,\n + backwards: backwards,\n + wrap: true,\n + regExp: this.regExpOption.checked,\n + caseSensitive: this.caseSensitiveOption.checked,\n + wholeWord: this.wholeWordOption.checked\n + });\n + var noMatch = !range && this.searchInput.value;\n + dom.setCssClass(this.searchBox, "ace_nomatch", noMatch);\n + this.editor._emit("findSearchBox", { match: !noMatch });\n + this.highlight();\n + };\n + this.findNext = function() {\n + this.find(true, false);\n + };\n + this.findPrev = function() {\n + this.find(true, true);\n + };\n + this.replace = function() {\n + if (!this.editor.getReadOnly())\n + this.editor.replace(this.replaceInput.value);\n + }; \n + this.replaceAndFindNext = function() {\n + if (!this.editor.getReadOnly()) {\n + this.editor.replace(this.replaceInput.value);\n + this.findNext()\n + }\n + };\n + this.replaceAll = function() {\n + if (!this.editor.getReadOnly())\n + this.editor.replaceAll(this.replaceInput.value);\n + };\n +\n + this.hide = function() {\n + this.element.style.display = "none";\n + this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\n + this.editor.focus();\n + };\n + this.show = function(value, isReplace) {\n + this.element.style.display = "";\n + this.replaceBox.style.display = isReplace ? "" : "none";\n +\n + this.isReplace = isReplace;\n +\n + if (value)\n + this.searchInput.value = value;\n + this.searchInput.focus();\n + this.searchInput.select();\n +\n + this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\n + };\n +\n +}).call(SearchBox.prototype);\n +\n +exports.SearchBox = SearchBox;\n +\n +exports.Search = function(editor, isReplace) {\n + var sb = editor.searchBox || new SearchBox(editor);\n + sb.show(editor.session.getTextRange(), isReplace);\n +};\n +\n +});\n + + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>16695</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-options.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-options.js.xml index 5bbe7b91e7..4ce6f206bc 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-options.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-options.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155553.14</string> </value> + <value> <string>ts83646622.68</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-searchbox.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-searchbox.js.xml index 7503fc04a2..6ffaa495d0 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-searchbox.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-searchbox.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155553.29</string> </value> + <value> <string>ts83646622.67</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -222,7 +222,7 @@ var html = \'<div class="ace_search right">\\\n </div>\\\n <div class="ace_replace_form">\\\n <input class="ace_search_field" placeholder="Replace with" spellcheck="false"></input>\\\n - <button type="button" action="replace" class="ace_replacebtn">Replace</button>\\\n + <button type="button" action="replaceAndFindNext" class="ace_replacebtn">Replace</button>\\\n <button type="button" action="replaceAll" class="ace_replacebtn">All</button>\\\n </div>\\\n <div class="ace_search_options">\\\n @@ -248,9 +248,7 @@ var SearchBox = function(editor, range, showReplaceForm) {\n this.editor = editor;\n };\n \n - this.$init = function() {\n - var sb = this.element;\n -\n + this.$initElements = function(sb) {\n this.searchBox = sb.querySelector(".ace_search_form");\n this.replaceBox = sb.querySelector(".ace_replace_form");\n this.searchOptions = sb.querySelector(".ace_search_options");\n @@ -259,7 +257,13 @@ var SearchBox = function(editor, range, showReplaceForm) {\n this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]");\n this.searchInput = this.searchBox.querySelector(".ace_search_field");\n this.replaceInput = this.replaceBox.querySelector(".ace_search_field");\n -\n + };\n + \n + this.$init = function() {\n + var sb = this.element;\n + \n + this.$initElements(sb);\n + \n var _this = this;\n event.addListener(sb, "mousedown", function(e) {\n setTimeout(function(){\n @@ -268,7 +272,7 @@ var SearchBox = function(editor, range, showReplaceForm) {\n event.stopPropagation(e);\n });\n event.addListener(sb, "click", function(e) {\n - var t = e.target;\n + var t = e.target || e.srcElement;\n var action = t.getAttribute("action");\n if (action && _this[action])\n _this[action]();\n @@ -383,7 +387,9 @@ var SearchBox = function(editor, range, showReplaceForm) {\n caseSensitive: this.caseSensitiveOption.checked,\n wholeWord: this.wholeWordOption.checked\n });\n - dom.setCssClass(this.searchBox, "ace_nomatch", !range && this.searchInput.value);\n + var noMatch = !range && this.searchInput.value;\n + dom.setCssClass(this.searchBox, "ace_nomatch", noMatch);\n + this.editor._emit("findSearchBox", { match: !noMatch });\n this.highlight();\n };\n this.findNext = function() {\n @@ -393,10 +399,18 @@ var SearchBox = function(editor, range, showReplaceForm) {\n this.find(true, true);\n };\n this.replace = function() {\n - this.editor.replace(this.replaceInput.value);\n + if (!this.editor.getReadOnly())\n + this.editor.replace(this.replaceInput.value);\n + }; \n + this.replaceAndFindNext = function() {\n + if (!this.editor.getReadOnly()) {\n + this.editor.replace(this.replaceInput.value);\n + this.findNext()\n + }\n };\n this.replaceAll = function() {\n - this.editor.replaceAll(this.replaceInput.value);\n + if (!this.editor.getReadOnly())\n + this.editor.replaceAll(this.replaceInput.value);\n };\n \n this.hide = function() {\n @@ -427,47 +441,6 @@ exports.Search = function(editor, isReplace) {\n sb.show(editor.session.getTextRange(), isReplace);\n };\n \n -\n -exports.ISearch = function(session, options) {\n - this.$changeListener = this.$changeListener.bind(this);\n - this.startRange = session.selection.toOrientedRange();\n - this.options = options || {};\n -};\n -\n -(function(){\n - this.setSession = function(session) {\n - if (this.session) {\n - this.session.removeListener(this.$changeListener);\n - }\n - this.session = session;\n - this.session.addListener(this.$changeListener);\n - };\n - this.setSearchString = function() {\n -\n - };\n - this.getValue = function() {\n - if (this.value == null)\n - this.value = this.session.getValue();\n - return this.value;\n - };\n - this.$changeListener = function() {\n - this.value = null;\n - };\n - this.find = function() {\n -\n - };\n - this.$edgeBefore = function() {\n - this.cursor = this.startRange[this.options.backwards ? "start" : "end"];\n - };\n - this.$edgeAfter = function() {\n -\n - };\n - this.next = function(dir) {\n -\n - };\n -}).call(exports.ISearch.prototype);\n -\n -\n });\n @@ -479,7 +452,7 @@ exports.ISearch = function(session, options) {\n </item> <item> <key> <string>size</string> </key> - <value> <int>14773</int> </value> + <value> <int>14267</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-settings_menu.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-settings_menu.js.xml index 002eb10c6c..4a352bb524 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-settings_menu.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-settings_menu.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155553.44</string> </value> + <value> <string>ts83646622.66</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -327,17 +327,17 @@ Mode.prototype.supportsFile = function(filename) {\n };\n var supportedModes = {\n ABAP: ["abap"],\n - ADA: ["ada|adb"],\n ActionScript:["as"],\n + ADA: ["ada|adb"],\n AsciiDoc: ["asciidoc"],\n Assembly_x86:["asm"],\n AutoHotKey: ["ahk"],\n BatchFile: ["bat|cmd"],\n C9Search: ["c9search_results"],\n - C_Cpp: ["c|cc|cpp|cxx|h|hh|hpp"],\n + C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp"],\n Clojure: ["clj"],\n - Cobol: ["^CBL|COB"],\n - coffee: ["^Cakefile|coffee|cf|cson"],\n + Cobol: ["CBL|COB"],\n + coffee: ["coffee|cf|cson|^Cakefile"],\n ColdFusion: ["cfm"],\n CSharp: ["cs"],\n CSS: ["css"],\n @@ -349,25 +349,27 @@ var supportedModes = {\n Erlang: ["erl|hrl"],\n EJS: ["ejs"],\n Forth: ["frt|fs|ldr"],\n - FreeMarker: ["ftl"],\n + FTL: ["ftl"],\n Glsl: ["glsl|frag|vert"],\n golang: ["go"],\n Groovy: ["groovy"],\n HAML: ["haml"],\n + Handlebars: ["hbs|handlebars|tpl|mustache"],\n Haskell: ["hs"],\n haXe: ["hx"],\n - HTML: ["htm|html|xhtml"],\n + HTML: ["html|htm|xhtml"],\n HTML_Ruby: ["erb|rhtml|html.erb"],\n - Ini: ["Ini|conf"],\n + INI: ["ini|conf|cfg|prefs"],\n + Jack: ["jack"],\n Jade: ["jade"],\n Java: ["java"],\n - JavaScript: ["js"],\n + JavaScript: ["js|jsm"],\n JSON: ["json"],\n JSONiq: ["jq"],\n JSP: ["jsp"],\n JSX: ["jsx"],\n Julia: ["jl"],\n - LaTeX: ["latex|tex|ltx|bib"],\n + LaTeX: ["tex|latex|ltx|bib"],\n LESS: ["less"],\n Liquid: ["liquid"],\n Lisp: ["lisp"],\n @@ -377,11 +379,12 @@ var supportedModes = {\n Lua: ["lua"],\n LuaPage: ["lp"],\n Lucene: ["lucene"],\n - Makefile: ["^GNUmakefile|^makefile|^Makefile|^OCamlMakefile|make"],\n + Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"],\n MATLAB: ["matlab"],\n Markdown: ["md|markdown"],\n MySQL: ["mysql"],\n MUSHCode: ["mc|mush"],\n + Nix: ["nix"],\n ObjectiveC: ["m|mm"],\n OCaml: ["ml|mli"],\n Pascal: ["pas|p"],\n @@ -391,19 +394,23 @@ var supportedModes = {\n Powershell: ["ps1"],\n Prolog: ["plg|prolog"],\n Properties: ["properties"],\n + Protobuf: ["proto"],\n Python: ["py"],\n R: ["r"],\n RDoc: ["Rd"],\n RHTML: ["Rhtml"],\n - Ruby: ["ru|gemspec|rake|rb"],\n + Ruby: ["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"],\n Rust: ["rs"],\n SASS: ["sass"],\n SCAD: ["scad"],\n Scala: ["scala"],\n Scheme: ["scm|rkt"],\n SCSS: ["scss"],\n - SH: ["sh|bash"],\n + SH: ["sh|bash|^.bashrc"],\n + SJS: ["sjs"],\n + Space: ["space"],\n snippets: ["snippets"],\n + Soy_Template:["soy"],\n SQL: ["sql"],\n Stylus: ["styl|stylus"],\n SVG: ["svg"],\n @@ -413,12 +420,13 @@ var supportedModes = {\n Textile: ["textile"],\n Toml: ["toml"],\n Twig: ["twig"],\n - Typescript: ["typescript|ts|str"],\n + Typescript: ["ts|typescript|str"],\n VBScript: ["vbs"],\n Velocity: ["vm"],\n + Verilog: ["v|vh|sv|svh"],\n XML: ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],\n XQuery: ["xq"],\n - YAML: ["yaml"]\n + YAML: ["yaml|yml"]\n };\n \n var nameOverrides = {\n @@ -427,7 +435,8 @@ var nameOverrides = {\n golang: "Go",\n C_Cpp: "C/C++",\n coffee: "CoffeeScript",\n - HTML_Ruby: "HTML (Ruby)"\n + HTML_Ruby: "HTML (Ruby)",\n + FTL: "FreeMarker"\n };\n var modesByName = {};\n for (var name in supportedModes) {\n @@ -487,8 +496,8 @@ module.exports.themes = [\n "kr_theme",\n "merbivore",\n "merbivore_soft",\n - "monokai",\n "mono_industrial",\n + "monokai",\n "pastel_on_dark",\n "solarized_dark",\n "solarized_light",\n @@ -656,7 +665,7 @@ module.exports.overlayPage = function overlayPage(editor, contentElement, top, r </item> <item> <key> <string>size</string> </key> - <value> <int>19778</int> </value> + <value> <int>20102</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-spellcheck.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-spellcheck.js.xml index ec767d2760..4816993e08 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-spellcheck.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-spellcheck.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155553.56</string> </value> + <value> <string>ts83646622.64</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -39,8 +39,9 @@ exports.contextMenuHandler = function(e){\n var PLACEHOLDER = "\\x01\\x01";\n var value = w + " " + PLACEHOLDER;\n text.value = value;\n - text.setSelectionRange(w.length + 1, w.length + 1);\n + text.setSelectionRange(w.length, w.length + 1);\n text.setSelectionRange(0, 0);\n + text.setSelectionRange(0, w.length);\n \n var afterKeydown = false;\n event.addListener(text, "keydown", function onKeydown() {\n @@ -95,7 +96,7 @@ require("../config").defineOptions(Editor.prototype, "editor", {\n </item> <item> <key> <string>size</string> </key> - <value> <int>2227</int> </value> + <value> <int>2264</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-split.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-split.js.xml new file mode 100644 index 0000000000..9a3e99a62f --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-split.js.xml @@ -0,0 +1,315 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.37</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>ext-split.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/ext/split\', [\'require\', \'exports\', \'module\' , \'ace/split\'], function(require, exports, module) {\n +module.exports = require("../split");\n +\n +});\n +\n +define(\'ace/split\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/lib/event_emitter\', \'ace/editor\', \'ace/virtual_renderer\', \'ace/edit_session\'], function(require, exports, module) {\n +\n +\n +var oop = require("./lib/oop");\n +var lang = require("./lib/lang");\n +var EventEmitter = require("./lib/event_emitter").EventEmitter;\n +\n +var Editor = require("./editor").Editor;\n +var Renderer = require("./virtual_renderer").VirtualRenderer;\n +var EditSession = require("./edit_session").EditSession;\n +\n +\n +var Split = function(container, theme, splits) {\n + this.BELOW = 1;\n + this.BESIDE = 0;\n +\n + this.$container = container;\n + this.$theme = theme;\n + this.$splits = 0;\n + this.$editorCSS = "";\n + this.$editors = [];\n + this.$orientation = this.BESIDE;\n +\n + this.setSplits(splits || 1);\n + this.$cEditor = this.$editors[0];\n +\n +\n + this.on("focus", function(editor) {\n + this.$cEditor = editor;\n + }.bind(this));\n +};\n +\n +(function(){\n +\n + oop.implement(this, EventEmitter);\n +\n + this.$createEditor = function() {\n + var el = document.createElement("div");\n + el.className = this.$editorCSS;\n + el.style.cssText = "position: absolute; top:0px; bottom:0px";\n + this.$container.appendChild(el);\n + var editor = new Editor(new Renderer(el, this.$theme));\n +\n + editor.on("focus", function() {\n + this._emit("focus", editor);\n + }.bind(this));\n +\n + this.$editors.push(editor);\n + editor.setFontSize(this.$fontSize);\n + return editor;\n + };\n +\n + this.setSplits = function(splits) {\n + var editor;\n + if (splits < 1) {\n + throw "The number of splits have to be > 0!";\n + }\n +\n + if (splits == this.$splits) {\n + return;\n + } else if (splits > this.$splits) {\n + while (this.$splits < this.$editors.length && this.$splits < splits) {\n + editor = this.$editors[this.$splits];\n + this.$container.appendChild(editor.container);\n + editor.setFontSize(this.$fontSize);\n + this.$splits ++;\n + }\n + while (this.$splits < splits) {\n + this.$createEditor();\n + this.$splits ++;\n + }\n + } else {\n + while (this.$splits > splits) {\n + editor = this.$editors[this.$splits - 1];\n + this.$container.removeChild(editor.container);\n + this.$splits --;\n + }\n + }\n + this.resize();\n + };\n + this.getSplits = function() {\n + return this.$splits;\n + };\n + this.getEditor = function(idx) {\n + return this.$editors[idx];\n + };\n + this.getCurrentEditor = function() {\n + return this.$cEditor;\n + };\n + this.focus = function() {\n + this.$cEditor.focus();\n + };\n + this.blur = function() {\n + this.$cEditor.blur();\n + };\n + this.setTheme = function(theme) {\n + this.$editors.forEach(function(editor) {\n + editor.setTheme(theme);\n + });\n + };\n + this.setKeyboardHandler = function(keybinding) {\n + this.$editors.forEach(function(editor) {\n + editor.setKeyboardHandler(keybinding);\n + });\n + };\n + this.forEach = function(callback, scope) {\n + this.$editors.forEach(callback, scope);\n + };\n +\n +\n + this.$fontSize = "";\n + this.setFontSize = function(size) {\n + this.$fontSize = size;\n + this.forEach(function(editor) {\n + editor.setFontSize(size);\n + });\n + };\n +\n + this.$cloneSession = function(session) {\n + var s = new EditSession(session.getDocument(), session.getMode());\n +\n + var undoManager = session.getUndoManager();\n + if (undoManager) {\n + var undoManagerProxy = new UndoManagerProxy(undoManager, s);\n + s.setUndoManager(undoManagerProxy);\n + }\n + s.$informUndoManager = lang.delayedCall(function() { s.$deltas = []; });\n + s.setTabSize(session.getTabSize());\n + s.setUseSoftTabs(session.getUseSoftTabs());\n + s.setOverwrite(session.getOverwrite());\n + s.setBreakpoints(session.getBreakpoints());\n + s.setUseWrapMode(session.getUseWrapMode());\n + s.setUseWorker(session.getUseWorker());\n + s.setWrapLimitRange(session.$wrapLimitRange.min,\n + session.$wrapLimitRange.max);\n + s.$foldData = session.$cloneFoldData();\n +\n + return s;\n + };\n + this.setSession = function(session, idx) {\n + var editor;\n + if (idx == null) {\n + editor = this.$cEditor;\n + } else {\n + editor = this.$editors[idx];\n + }\n + var isUsed = this.$editors.some(function(editor) {\n + return editor.session === session;\n + });\n +\n + if (isUsed) {\n + session = this.$cloneSession(session);\n + }\n + editor.setSession(session);\n + return session;\n + };\n + this.getOrientation = function() {\n + return this.$orientation;\n + };\n + this.setOrientation = function(orientation) {\n + if (this.$orientation == orientation) {\n + return;\n + }\n + this.$orientation = orientation;\n + this.resize();\n + };\n + this.resize = function() {\n + var width = this.$container.clientWidth;\n + var height = this.$container.clientHeight;\n + var editor;\n +\n + if (this.$orientation == this.BESIDE) {\n + var editorWidth = width / this.$splits;\n + for (var i = 0; i < this.$splits; i++) {\n + editor = this.$editors[i];\n + editor.container.style.width = editorWidth + "px";\n + editor.container.style.top = "0px";\n + editor.container.style.left = i * editorWidth + "px";\n + editor.container.style.height = height + "px";\n + editor.resize();\n + }\n + } else {\n + var editorHeight = height / this.$splits;\n + for (var i = 0; i < this.$splits; i++) {\n + editor = this.$editors[i];\n + editor.container.style.width = width + "px";\n + editor.container.style.top = i * editorHeight + "px";\n + editor.container.style.left = "0px";\n + editor.container.style.height = editorHeight + "px";\n + editor.resize();\n + }\n + }\n + };\n +\n +}).call(Split.prototype);\n +\n + \n +function UndoManagerProxy(undoManager, session) {\n + this.$u = undoManager;\n + this.$doc = session;\n +}\n +\n +(function() {\n + this.execute = function(options) {\n + this.$u.execute(options);\n + };\n +\n + this.undo = function() {\n + var selectionRange = this.$u.undo(true);\n + if (selectionRange) {\n + this.$doc.selection.setSelectionRange(selectionRange);\n + }\n + };\n +\n + this.redo = function() {\n + var selectionRange = this.$u.redo(true);\n + if (selectionRange) {\n + this.$doc.selection.setSelectionRange(selectionRange);\n + }\n + };\n +\n + this.reset = function() {\n + this.$u.reset();\n + };\n +\n + this.hasUndo = function() {\n + return this.$u.hasUndo();\n + };\n +\n + this.hasRedo = function() {\n + return this.$u.hasRedo();\n + };\n +}).call(UndoManagerProxy.prototype);\n +\n +exports.Split = Split;\n +});\n + + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>8919</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-static_highlight.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-static_highlight.js.xml index 4a1f6925df..380fed223a 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-static_highlight.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-static_highlight.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155553.66</string> </value> + <value> <string>ts83646622.63</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -52,34 +52,37 @@ *\n * ***** END LICENSE BLOCK ***** */\n \n -define(\'ace/ext/static_highlight\', [\'require\', \'exports\', \'module\' , \'ace/edit_session\', \'ace/layer/text\', \'ace/config\'], function(require, exports, module) {\n +define(\'ace/ext/static_highlight\', [\'require\', \'exports\', \'module\' , \'ace/edit_session\', \'ace/layer/text\', \'ace/config\', \'ace/lib/dom\'], function(require, exports, module) {\n \n \n var EditSession = require("../edit_session").EditSession;\n var TextLayer = require("../layer/text").Text;\n -var baseStyles = ".ace_editor {\\\n -font-family: \'Monaco\', \'Menlo\', \'Droid Sans Mono\', \'Courier New\', monospace;\\\n +var baseStyles = ".ace_static_highlight {\\\n +font-family: \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', \'Droid Sans Mono\', monospace;\\\n font-size: 12px;\\\n }\\\n -.ace_editor .ace_gutter {\\\n +.ace_static_highlight .ace_gutter {\\\n width: 25px !important;\\\n display: block;\\\n float: left;\\\n text-align: right;\\\n padding: 0 3px 0 0;\\\n margin-right: 3px;\\\n +position: static !important;\\\n }\\\n -.ace_line { clear: both; }\\\n -*.ace_gutter-cell {\\\n +.ace_static_highlight .ace_line { clear: both; }\\\n +.ace_static_highlight .ace_gutter-cell {\\\n -moz-user-select: -moz-none;\\\n -khtml-user-select: none;\\\n -webkit-user-select: none;\\\n user-select: none;\\\n }";\n var config = require("../config");\n +var dom = require("../lib/dom");\n \n exports.render = function(input, mode, theme, lineStart, disableGutter, callback) {\n - var waiting = 0\n + var waiting = 0;\n + var modeCache = EditSession.prototype.$modes;\n if (typeof theme == "string") {\n waiting++;\n config.loadModule([\'theme\', theme], function(m) {\n @@ -91,7 +94,8 @@ exports.render = function(input, mode, theme, lineStart, disableGutter, callback if (typeof mode == "string") {\n waiting++;\n config.loadModule([\'mode\', mode], function(m) {\n - mode = new m.Mode()\n + if (!modeCache[mode]) modeCache[mode] = new m.Mode();\n + mode = modeCache[mode];\n --waiting || done();\n });\n }\n @@ -128,11 +132,11 @@ exports.renderSync = function(input, mode, theme, lineStart, disableGutter) {\n textLayer.$renderLine(stringBuilder, ix, true, false);\n stringBuilder.push("</div>");\n }\n - var html = "<div class=\':cssClass\'>\\\n - <div class=\'ace_editor ace_scroller ace_text-layer\'>\\\n - :code\\\n - </div>\\\n - </div>".replace(/:cssClass/, theme.cssClass).replace(/:code/, stringBuilder.join(""));\n + var html = "<div class=\'" + theme.cssClass + "\'>" +\n + "<div class=\'ace_static_highlight\'>" +\n + stringBuilder.join("") +\n + "</div>" +\n + "</div>";\n \n textLayer.destroy();\n \n @@ -142,6 +146,46 @@ exports.renderSync = function(input, mode, theme, lineStart, disableGutter) {\n };\n };\n \n +\n +\n +exports.highlight = function(el, opts, callback) {\n + var m = el.className.match(/lang-(\\w+)/);\n + var mode = opts.mode || m && ("ace/mode/" + m[1]);\n + if (!mode)\n + return false;\n + var theme = opts.theme || "ace/theme/textmate";\n + \n + var data = "";\n + var nodes = [];\n +\n + if (el.firstElementChild) {\n + var textLen = 0;\n + for (var i = 0; i < el.childNodes.length; i++) {\n + var ch = el.childNodes[i];\n + if (ch.nodeType == 3) {\n + textLen += ch.data.length;\n + data += ch.data;\n + } else {\n + nodes.push(textLen, ch);\n + }\n + }\n + } else {\n + data = dom.getInnerText(el);\n + }\n + \n + exports.render(data, mode, theme, 1, true, function (highlighted) {\n + dom.importCssString(highlighted.css, "ace_highlight");\n + el.innerHTML = highlighted.html;\n + var container = el.firstChild.firstChild\n + for (var i = 0; i < nodes.length; i += 2) {\n + var pos = highlighted.session.doc.indexToPosition(nodes[i])\n + var node = nodes[i + 1];\n + var lineEl = container.children[pos.row];\n + lineEl && lineEl.appendChild(nodes[i+1]);\n + }\n + callback && callback();\n + });\n +};\n });\n @@ -153,7 +197,7 @@ exports.renderSync = function(input, mode, theme, lineStart, disableGutter) {\n </item> <item> <key> <string>size</string> </key> - <value> <int>4310</int> </value> + <value> <int>5794</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-statusbar.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-statusbar.js.xml index 850b937ac4..6610950e67 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-statusbar.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-statusbar.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155553.77</string> </value> + <value> <string>ts83646622.6</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-textarea.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-textarea.js.xml index 75bfc3d099..46d555bc2e 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-textarea.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-textarea.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155553.93</string> </value> + <value> <string>ts83646622.59</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -88,7 +88,7 @@ function applyStyles(elm, styles) {\n \n function setupContainer(element, getValue) {\n if (element.type != \'textarea\') {\n - throw "Textarea required!";\n + throw new Error("Textarea required!");\n }\n \n var parentNode = element.parentNode;\n @@ -247,21 +247,18 @@ function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {\n settingDiv.hideButton.focus();\n editor.on("focus", function onFocus() {\n editor.removeListener("focus", onFocus);\n - settingDiv.style.display = "none"\n + settingDiv.style.display = "none";\n });\n } else {\n editor.focus();\n - };\n + }\n };\n \n + editor.$setOption = editor.setOption;\n editor.setOption = function(key, value) {\n if (options[key] == value) return;\n \n switch (key) {\n - case "gutter":\n - renderer.setShowGutter(toBool(value));\n - break;\n -\n case "mode":\n if (value != "text") {\n loader("mode-" + value + ".js", "ace/mode/" + value, function() {\n @@ -323,18 +320,9 @@ function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {\n break;\n }\n break;\n -\n - case "useSoftTabs":\n - session.setUseSoftTabs(toBool(value));\n - break;\n -\n - case "showPrintMargin":\n - renderer.setShowPrintMargin(toBool(value));\n - break;\n -\n - case "showInvisibles":\n - editor.setShowInvisibles(toBool(value));\n - break;\n + \n + default:\n + editor.$setOption(key, toBool(value));\n }\n \n options[key] = value;\n @@ -348,9 +336,7 @@ function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {\n return options;\n };\n \n - for (var option in exports.options) {\n - editor.setOption(option, exports.options[option]);\n - }\n + editor.setOptions(exports.options);\n \n return editor;\n }\n @@ -450,7 +436,7 @@ function setupSettingPanel(settingDiv, settingOpener, editor, options) {\n cValue == "true" ? "checked=\'true\'" : "",\n "\'></input>"\n );\n - return\n + return;\n }\n builder.push("<select title=\'" + option + "\'>");\n for (var value in obj) {\n @@ -524,7 +510,7 @@ exports.options = {\n </item> <item> <key> <string>size</string> </key> - <value> <int>16096</int> </value> + <value> <int>15735</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-themelist.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-themelist.js.xml index 36247d27ac..2f75f4e570 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-themelist.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-themelist.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.04</string> </value> + <value> <string>ts83646622.57</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -92,8 +92,8 @@ module.exports.themes = [\n "kr_theme",\n "merbivore",\n "merbivore_soft",\n - "monokai",\n "mono_industrial",\n + "monokai",\n "pastel_on_dark",\n "solarized_dark",\n "solarized_light",\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-whitespace.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-whitespace.js.xml index 3c0e133282..9131b93a74 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-whitespace.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/ext-whitespace.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.14</string> </value> + <value> <string>ts83646622.56</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -82,7 +82,7 @@ exports.$detectIndentation = function(lines, fallback) {\n prevSpaces = spaces;\n while (line[line.length - 1] == "\\\\")\n line = lines[i++];\n - };\n + }\n \n function getScore(indent) {\n var score = 0;\n @@ -132,15 +132,17 @@ exports.detectIndentation = function(session) {\n return indent;\n };\n \n -exports.trimTrailingSpace = function(session) {\n +exports.trimTrailingSpace = function(session, trimEmpty) {\n var doc = session.getDocument();\n var lines = doc.getAllLines();\n + \n + var min = trimEmpty ? -1 : 0;\n \n for (var i = 0, l=lines.length; i < l; i++) {\n var line = lines[i];\n var index = line.search(/\\s+$/);\n \n - if (index !== -1)\n + if (index > min)\n doc.removeInLine(i, index, line.length);\n }\n };\n @@ -179,14 +181,14 @@ exports.convertIndentation = function(session, ch, len) {\n };\n \n exports.$parseStringArg = function(text) {\n - var indent = {}\n + var indent = {};\n if (/t/.test(text))\n indent.ch = "\\t";\n else if (/s/.test(text))\n indent.ch = " ";\n var m = text.match(/\\d+/);\n if (m)\n - indent.length = parseInt(m[0]);\n + indent.length = parseInt(m[0], 10);\n return indent;\n };\n \n @@ -198,7 +200,7 @@ exports.$parseArg = function(arg) {\n if (typeof arg.text == "string")\n return exports.$parseStringArg(arg.text);\n return arg;\n -}\n +};\n \n exports.commands = [{\n name: "detectIndentation",\n @@ -214,7 +216,7 @@ exports.commands = [{\n name: "convertIndentation",\n exec: function(editor, arg) {\n var indent = exports.$parseArg(arg);\n - exports.convertIndentation(editor.session, arg.ch, arg.length);\n + exports.convertIndentation(editor.session, indent.ch, indent.length);\n }\n }, {\n name: "setIndentation",\n @@ -223,7 +225,7 @@ exports.commands = [{\n indent.length && editor.session.setTabSize(indent.length);\n indent.ch && editor.session.setUseSoftTabs(indent.ch == " ");\n }\n -}]\n +}];\n \n });\n @@ -236,7 +238,7 @@ exports.commands = [{\n </item> <item> <key> <string>size</string> </key> - <value> <int>6632</int> </value> + <value> <int>6693</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/keybinding-emacs.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/keybinding-emacs.js.xml index 082f34ffe8..388f8d02c5 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/keybinding-emacs.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/keybinding-emacs.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.27</string> </value> + <value> <string>ts83646622.54</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -95,7 +95,7 @@ exports.handler.attach = function(editor) {\n background-color: rgba(0,250,0,0.9);\\\n opacity: 0.5;\\\n }\\\n - .emacs-mode .ace_cursor.ace_hidden{\\\n + .emacs-mode .ace_hidden-cursors .ace_cursor{\\\n opacity: 1;\\\n background-color: transparent;\\\n }\\\n @@ -219,7 +219,7 @@ exports.handler.bindKey = function(key, command) {\n if (!key)\n return;\n \n - var ckb = this.commmandKeyBinding;\n + var ckb = this.commandKeyBinding;\n key.split("|").forEach(function(keyPart) {\n keyPart = keyPart.toLowerCase();\n ckb[keyPart] = command;\n @@ -260,7 +260,7 @@ exports.handler.handleKeyboard = function(data, hashId, key, keyCode) {\n data.universalArgument = false;\n if (modifier) key = modifier + key;\n if (data.keyChain) key = data.keyChain += " " + key;\n - var command = this.commmandKeyBinding[key];\n + var command = this.commandKeyBinding[key];\n data.keyChain = command == "null" ? key : "";\n if (!command) return undefined;\n if (command === "null") return {command: "null"};\n @@ -1090,7 +1090,7 @@ exports.Occur = Occur;\n </item> <item> <key> <string>size</string> </key> - <value> <int>36738</int> </value> + <value> <int>36745</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/keybinding-vim.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/keybinding-vim.js.xml index 251274ff40..0a050b4427 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/keybinding-vim.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/keybinding-vim.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.39</string> </value> + <value> <string>ts83646622.53</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -99,6 +99,38 @@ exports.handler = {\n data.lastEvent = "keypress";\n }\n },\n + updateMacCompositionHandlers: function(editor, enable) {\n + var onCompositionUpdateOverride = function(text) {\n + if (util.currentMode !== "insert") {\n + var el = this.textInput.getElement();\n + el.blur();\n + el.focus();\n + el.value = text;\n + } else {\n + this.onCompositionUpdateOrig(text);\n + }\n + };\n + var onCompositionStartOverride = function(text) {\n + if (util.currentMode === "insert") { \n + this.onCompositionStartOrig(text);\n + }\n + }\n + if (enable) {\n + if (!editor.onCompositionUpdateOrig) {\n + editor.onCompositionUpdateOrig = editor.onCompositionUpdate;\n + editor.onCompositionUpdate = onCompositionUpdateOverride;\n + editor.onCompositionStartOrig = editor.onCompositionStart;\n + editor.onCompositionStart = onCompositionStartOverride;\n + }\n + } else {\n + if (editor.onCompositionUpdateOrig) {\n + editor.onCompositionUpdate = editor.onCompositionUpdateOrig;\n + editor.onCompositionUpdateOrig = null;\n + editor.onCompositionStart = editor.onCompositionStartOrig;\n + editor.onCompositionStartOrig = null;\n + }\n + }\n + },\n \n handleKeyboard: function(data, hashId, key, keyCode, e) {\n if (hashId != 0 && (key == "" || key == "\\x00"))\n @@ -150,12 +182,15 @@ exports.handler = {\n if (util.currentMode !== "insert")\n cmds.coreCommands.stop.exec(editor);\n editor.$vimModeHandler = this;\n + \n + this.updateMacCompositionHandlers(editor, true);\n },\n \n detach: function(editor) {\n editor.removeListener("click", exports.onCursorMove);\n util.noMode(editor);\n util.currentMode = "normal";\n + this.updateMacCompositionHandlers(editor, false);\n },\n \n actions: cmds.actions,\n @@ -231,6 +266,18 @@ var actions = exports.actions = {\n case "b":\n editor.renderer.alignCursor(null, 1);\n break;\n + case "c":\n + editor.session.onFoldWidgetClick(range.start.row, {domEvent:{target :{}}});\n + break;\n + case "o":\n + editor.session.onFoldWidgetClick(range.start.row, {domEvent:{target :{}}});\n + break;\n + case "C":\n + editor.session.foldAll();\n + break;\n + case "O":\n + editor.session.unfold();\n + break;\n }\n }\n },\n @@ -1744,7 +1791,7 @@ module.exports = {\n </item> <item> <key> <string>size</string> </key> - <value> <int>55892</int> </value> + <value> <int>57858</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-abap.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-abap.js.xml index a5126861be..e33a514ba2 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-abap.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-abap.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.49</string> </value> + <value> <string>ts83646622.79</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,7 +63,7 @@ var TextMode = require("./text").Mode;\n var oop = require("../lib/oop");\n \n function Mode() {\n - this.$tokenizer = new Tokenizer(new Rules().getRules());\n + this.HighlightRules = Rules;\n this.foldingRules = new FoldMode();\n }\n \n @@ -292,7 +292,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>11346</int> </value> + <value> <int>11318</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-actionscript.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-actionscript.js.xml index a1d7d5d472..ff1c281cf5 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-actionscript.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-actionscript.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.59</string> </value> + <value> <string>ts83646622.51</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,9 +67,8 @@ var ActionScriptHighlightRules = require("./actionscript_highlight_rules").Actio var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new ActionScriptHighlightRules();\n + this.HighlightRules = ActionScriptHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -248,7 +247,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>23422</int> </value> + <value> <int>23359</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ada.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ada.js.xml index fcd70f3c64..73e07371fe 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ada.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ada.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.74</string> </value> + <value> <string>ts83646622.5</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var AdaHighlightRules = require("./ada_highlight_rules").AdaHighlightRules;\n var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new AdaHighlightRules().getRules());\n + this.HighlightRules = AdaHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -148,7 +148,7 @@ exports.AdaHighlightRules = AdaHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>4503</int> </value> + <value> <int>4475</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-asciidoc.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-asciidoc.js.xml index ad27b1ce0e..e670d5f4d5 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-asciidoc.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-asciidoc.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.84</string> </value> + <value> <string>ts83646622.48</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,14 +62,14 @@ var AsciidocHighlightRules = require("./asciidoc_highlight_rules").AsciidocHighl var AsciidocFoldMode = require("./folding/asciidoc").FoldMode;\n \n var Mode = function() {\n - var highlighter = new AsciidocHighlightRules();\n + this.HighlightRules = AsciidocHighlightRules;\n \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n this.foldingRules = new AsciidocFoldMode(); \n };\n oop.inherits(Mode, TextMode);\n \n (function() {\n + this.type = "text";\n this.getNextLineIndent = function(state, line, tab) {\n if (state == "listblock") {\n var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);\n @@ -404,7 +404,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>15515</int> </value> + <value> <int>15476</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-assembly_x86.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-assembly_x86.js.xml index 475f4445d4..6295faf9a1 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-assembly_x86.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-assembly_x86.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155554.98</string> </value> + <value> <string>ts83646622.47</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,9 +63,8 @@ var AssemblyX86HighlightRules = require("./assembly_x86_highlight_rules").Assemb var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - var highlighter = new AssemblyX86HighlightRules();\n + this.HighlightRules = AssemblyX86HighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -249,7 +248,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>13406</int> </value> + <value> <int>13343</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-autohotkey.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-autohotkey.js.xml index c751258dd7..9a4fa61431 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-autohotkey.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-autohotkey.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155555.13</string> </value> + <value> <string>ts83646622.45</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>66034</int> </value> + <value> <int>65971</int> </value> </item> <item> <key> <string>title</string> </key> @@ -94,9 +94,8 @@ var AutoHotKeyHighlightRules = require("./autohotkey_highlight_rules").AutoHotKe var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new AutoHotKeyHighlightRules();\n + this.HighlightRules = AutoHotKeyHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-batchfile.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-batchfile.js.xml index 669921e40a..06edf335d9 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-batchfile.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-batchfile.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155555.23</string> </value> + <value> <string>ts83646622.44</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,9 +67,8 @@ var BatchFileHighlightRules = require("./batchfile_highlight_rules").BatchFileHi var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new BatchFileHighlightRules();\n + this.HighlightRules = BatchFileHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -123,7 +122,8 @@ var BatchFileHighlightRules = function() {\n { token: \'keyword.operator.redirect.shell\',\n regex: \'&>|\\\\d*>&\\\\d*|\\\\d*(?:>>|>|<)|\\\\d*<&|\\\\d*<>\' } ],\n variable: [\n - { token: \'constant.numeric\', regex: \'%%\\\\w+\'},\n + { token: \'constant.numeric\', regex: \'%%\\\\w+|%[*\\\\d]|%\\\\w+%\'},\n + { token: \'constant.numeric\', regex: \'%~\\\\d+\'},\n { token: [\'markup.list\', \'constant.other\', \'markup.list\'],\n regex: \'(%)(\\\\w+)(%?)\' }]}\n \n @@ -203,7 +203,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>6952</int> </value> + <value> <int>6960</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-c9search.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-c9search.js.xml index dc92af1614..a1485c3cc0 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-c9search.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-c9search.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155555.33</string> </value> + <value> <string>ts83646622.43</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,7 +63,7 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd var C9StyleFoldMode = require("./folding/c9search").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new C9SearchHighlightRules().getRules());\n + this.HighlightRules = C9SearchHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new C9StyleFoldMode();\n };\n @@ -214,7 +214,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>6223</int> </value> + <value> <int>6195</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-c_cpp.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-c_cpp.js.xml index f015028143..2bd3562e77 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-c_cpp.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-c_cpp.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155555.47</string> </value> + <value> <string>ts83646622.42</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -65,9 +65,11 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new c_cppHighlightRules().getRules());\n + this.HighlightRules = c_cppHighlightRules;\n +\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n +\n this.foldingRules = new CStyleFoldMode();\n };\n oop.inherits(Mode, TextMode);\n @@ -80,7 +82,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -769,7 +771,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>30249</int> </value> + <value> <int>30227</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-clojure.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-clojure.js.xml index dab963dbc8..ef9bdd1028 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-clojure.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-clojure.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155555.61</string> </value> + <value> <string>ts83646622.4</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,7 +63,7 @@ var MatchingParensOutdent = require("./matching_parens_outdent").MatchingParensO var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new ClojureHighlightRules().getRules());\n + this.HighlightRules = ClojureHighlightRules;\n this.$outdent = new MatchingParensOutdent();\n };\n oop.inherits(Mode, TextMode);\n @@ -75,7 +75,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -331,7 +331,7 @@ exports.MatchingParensOutdent = MatchingParensOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>13063</int> </value> + <value> <int>13039</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-cobol.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-cobol.js.xml index 2506de02d2..e363183b7c 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-cobol.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-cobol.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155555.75</string> </value> + <value> <string>ts83646622.39</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var CobolHighlightRules = require("./cobol_highlight_rules").CobolHighlightRules var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CobolHighlightRules().getRules());\n + this.HighlightRules = CobolHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -155,7 +155,7 @@ exports.CobolHighlightRules = CobolHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>5097</int> </value> + <value> <int>5069</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-coffee.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-coffee.js.xml index 621f39959c..6c9f7e8539 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-coffee.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-coffee.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155555.89</string> </value> + <value> <string>ts83646622.37</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -65,7 +65,7 @@ var WorkerClient = require("../worker/worker_client").WorkerClient;\n var oop = require("../lib/oop");\n \n function Mode() {\n - this.$tokenizer = new Tokenizer(new Rules().getRules());\n + this.HighlightRules = Rules;\n this.$outdent = new Outdent();\n this.foldingRules = new FoldMode();\n }\n @@ -81,7 +81,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n \n if (!(tokens.length && tokens[tokens.length - 1].type === \'comment\') &&\n state === \'start\' && indenter.test(line))\n @@ -475,7 +475,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>16709</int> </value> + <value> <int>16685</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-coldfusion.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-coldfusion.js.xml index 7ff7c02c79..483fa2083b 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-coldfusion.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-coldfusion.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155555.99</string> </value> + <value> <string>ts83646622.35</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>72831</int> </value> + <value> <int>77566</int> </value> </item> <item> <key> <string>title</string> </key> @@ -92,10 +92,8 @@ var ColdfusionHighlightRules = require("./coldfusion_highlight_rules").Coldfusio var Mode = function() {\n XmlMode.call(this);\n \n - var highlighter = new ColdfusionHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = ColdfusionHighlightRules;\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -125,7 +123,7 @@ var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;\n var XmlFoldMode = require("./folding/xml").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());\n + this.HighlightRules = XmlHighlightRules;\n this.$behaviour = new XmlBehaviour();\n this.foldingRules = new XmlFoldMode();\n };\n @@ -148,36 +146,181 @@ var oop = require("../lib/oop");\n var xmlUtil = require("./xml_util");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n \n -var XmlHighlightRules = function() {\n +var XmlHighlightRules = function(normalize) {\n this.$rules = {\n start : [\n - {token : "text", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n - {token : "xml-pe", regex : "<\\\\?.*?\\\\?>"},\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n {token : "comment", regex : "<\\\\!--", next : "comment"},\n - {token : "xml-pe", regex : "<\\\\!.*?>"},\n - {token : "meta.tag", regex : "<\\\\/?", next : "tag"},\n - {token : "text", regex : "\\\\s+"},\n {\n - token : "constant.character.entity", \n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n - }\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n ],\n - \n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n cdata : [\n - {token : "text", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n {token : "text", regex : "\\\\s+"},\n {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n ],\n \n comment : [\n - {token : "comment", regex : ".*?-->", next : "start"},\n - {token : "comment", regex : ".+"}\n - ]\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start");\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n oop.inherits(XmlHighlightRules, TextHighlightRules);\n \n exports.XmlHighlightRules = XmlHighlightRules;\n @@ -262,14 +405,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -283,6 +421,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -291,8 +432,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -309,11 +450,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -692,7 +833,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -725,7 +866,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -758,7 +899,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -887,7 +1028,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -902,7 +1044,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -1008,7 +1150,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -1083,7 +1226,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -1128,8 +1271,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -1216,6 +1359,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1410,7 +1561,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1424,7 +1575,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1491,152 +1642,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1724,95 +1840,118 @@ oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n });\n \n -define(\'ace/mode/coldfusion_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/text_highlight_rules\', \'ace/mode/xml_util\'], function(require, exports, module) {\n +define(\'ace/mode/coldfusion_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/html_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n -var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n -var xml_util = require("./xml_util");\n +var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n \n var ColdfusionHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n \n - this.$rules = {\n - start : [ {\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n + this.embedTagRules(JavaScriptHighlightRules, "cfjs-", "cfscript");\n +\n + this.normalizeRules();\n +};\n +\n +oop.inherits(ColdfusionHighlightRules, HtmlHighlightRules);\n +\n +exports.ColdfusionHighlightRules = ColdfusionHighlightRules;\n +});\n +\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n +var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n +\n +var tagMap = lang.createMap({\n + a : \'anchor\',\n + button \t : \'form\',\n + form : \'form\',\n + img : \'image\',\n + input : \'form\',\n + label : \'form\',\n + option : \'form\',\n + script : \'script\',\n + select : \'form\',\n + textarea : \'form\',\n + style : \'style\',\n + table : \'table\',\n + tbody : \'table\',\n + td : \'table\',\n + tfoot : \'table\',\n + th : \'table\',\n + tr : \'table\'\n +});\n +\n +var HtmlHighlightRules = function() {\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=script)",\n - next : "script"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag",\n - regex : "<(?=cfscript)",\n - next : "cfscript"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "meta.tag",\n - regex : "<(?=style)",\n - next : "style"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?",\n - next : "tag"\n - } ],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ]\n - };\n - \n - xml_util.tag(this.$rules, "tag", "start");\n - xml_util.tag(this.$rules, "style", "css-start");\n - xml_util.tag(this.$rules, "script", "js-start");\n - xml_util.tag(this.$rules, "cfscript", "js-start");\n -\n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }, {\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/cfscript>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=cfscript)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(ColdfusionHighlightRules, TextHighlightRules);\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n \n -exports.ColdfusionHighlightRules = ColdfusionHighlightRules;\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-csharp.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-csharp.js.xml index c7c71cda89..0551494e97 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-csharp.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-csharp.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155556.06</string> </value> + <value> <string>ts83646622.33</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -22,7 +22,7 @@ <key> <string>data</string> </key> <value> <string encoding="cdata"><![CDATA[ -define(\'ace/mode/csharp\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/csharp_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +define(\'ace/mode/csharp\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/csharp_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/csharp\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -31,10 +31,10 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var CSharpHighlightRules = require("./csharp_highlight_rules").CSharpHighlightRules;\n var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n -var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +var CStyleFoldMode = require("./folding/csharp").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CSharpHighlightRules().getRules());\n + this.HighlightRules = CSharpHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -49,7 +49,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -138,6 +138,9 @@ var CSharpHighlightRules = function() {\n }, {\n token : "keyword.operator",\n regex : "!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)"\n + }, {\n + token : "keyword",\n + regex : "^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)"\n }, {\n token : "punctuation.operator",\n regex : "\\\\?|\\\\:|\\\\,|\\\\;|\\\\."\n @@ -581,6 +584,115 @@ oop.inherits(CstyleBehaviour, Behaviour);\n exports.CstyleBehaviour = CstyleBehaviour;\n });\n \n +define(\'ace/mode/folding/csharp\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Range = require("../../range").Range;\n +var CFoldMode = require("./cstyle").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(commentRegex) {\n + if (commentRegex) {\n + this.foldingStartMarker = new RegExp(\n + this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n + );\n + this.foldingStopMarker = new RegExp(\n + this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n + );\n + }\n +};\n +oop.inherits(FoldMode, CFoldMode);\n +\n +(function() {\n + this.usingRe = /^\\s*using \\S/;\n +\n + this.getFoldWidgetRangeBase = this.getFoldWidgetRange;\n + this.getFoldWidgetBase = this.getFoldWidget;\n + \n + this.getFoldWidget = function(session, foldStyle, row) {\n + var fw = this.getFoldWidgetBase(session, foldStyle, row);\n + if (!fw) {\n + var line = session.getLine(row);\n + if (/^\\s*#region\\b/.test(line)) \n + return "start";\n + var usingRe = this.usingRe;\n + if (usingRe.test(line)) {\n + var prev = session.getLine(row - 1);\n + var next = session.getLine(row + 1);\n + if (!usingRe.test(prev) && usingRe.test(next))\n + return "start"\n + }\n + }\n + return fw;\n + };\n + \n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var range = this.getFoldWidgetRangeBase(session, foldStyle, row);\n + if (range)\n + return range;\n +\n + var line = session.getLine(row);\n + if (this.usingRe.test(line))\n + return this.getUsingStatementBlock(session, line, row);\n + \n + if (/^\\s*#region\\b/.test(line))\n + return this.getRegionBlock(session, line, row);\n + };\n + \n + this.getUsingStatementBlock = function(session, line, row) {\n + var startColumn = line.match(this.usingRe)[0].length - 1;\n + var maxRow = session.getLength();\n + var startRow = row;\n + var endRow = row;\n +\n + while (++row < maxRow) {\n + line = session.getLine(row);\n + if (/^\\s*$/.test(line))\n + continue;\n + if (!this.usingRe.test(line))\n + break;\n +\n + endRow = row;\n + }\n +\n + if (endRow > startRow) {\n + var endColumn = session.getLine(endRow).length;\n + return new Range(startRow, startColumn, endRow, endColumn);\n + }\n + };\n + \n + this.getRegionBlock = function(session, line, row) {\n + var startColumn = line.search(/\\s*$/);\n + var maxRow = session.getLength();\n + var startRow = row;\n + \n + var re = /^\\s*#(end)?region\\b/\n + var depth = 1\n + while (++row < maxRow) {\n + line = session.getLine(row);\n + var m = re.exec(line);\n + if (!m)\n + continue;\n + if (m[1])\n + depth--;\n + else\n + depth++;\n +\n + if (!depth)\n + break;\n + }\n +\n + var endRow = row;\n + if (endRow > startRow) {\n + var endColumn = line.search(/\\S/);\n + return new Range(startRow, startColumn, endRow, endColumn);\n + }\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +\n define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n \n \n @@ -644,7 +756,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>23371</int> </value> + <value> <int>26871</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-css.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-css.js.xml index 73c844df94..88646275ee 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-css.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-css.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155556.19</string> </value> + <value> <string>ts83646622.32</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -65,7 +65,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -79,7 +79,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -146,152 +146,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -805,7 +770,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>35018</int> </value> + <value> <int>34059</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-curly.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-curly.js.xml index 313581ea38..65e7427f75 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-curly.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-curly.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155556.32</string> </value> + <value> <string>ts83646622.3</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>78626</int> </value> + <value> <int>91793</int> </value> </item> <item> <key> <string>title</string> </key> @@ -97,11 +97,10 @@ var HtmlFoldMode = require("./folding/html").FoldMode;\n var CurlyHighlightRules = require("./curly_highlight_rules").CurlyHighlightRules;\n \n var Mode = function() {\n - var highlighter = new CurlyHighlightRules();\n + HtmlMode.call(this);\n + this.HighlightRules = CurlyHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new HtmlFoldMode();\n -\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, HtmlMode);\n \n @@ -111,7 +110,7 @@ oop.inherits(Mode, HtmlMode);\n exports.Mode = Mode;\n });\n \n -define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -122,13 +121,13 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n \n var Mode = function() {\n - var highlighter = new HtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -149,6 +148,10 @@ oop.inherits(Mode, TextMode);\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n \n }).call(Mode.prototype);\n \n @@ -169,7 +172,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -184,7 +188,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -290,7 +294,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -365,7 +370,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -410,8 +415,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -498,6 +503,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1015,7 +1028,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1029,7 +1042,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1096,152 +1109,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1329,15 +1307,14 @@ oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -1346,6 +1323,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -1359,80 +1337,255 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n token : "text",\n regex : "\\\\s+"\n }, {\n - token : "constant.character.entity",\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n }, {\n - defaultToken : "comment"\n - } ]\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n \n -exports.HtmlHighlightRules = HtmlHighlightRules;\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n });\n \n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n @@ -1515,14 +1668,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1537,7 +1685,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1547,8 +1695,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1578,14 +1726,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1599,6 +1742,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1607,8 +1753,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1625,11 +1771,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1708,6 +1854,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -1784,7 +1932,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -1817,7 +1965,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -1850,7 +1998,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -1964,6 +2112,286 @@ oop.inherits(FoldMode, BaseFoldMode);\n }).call(FoldMode.prototype);\n \n });\n +\n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n define(\'ace/mode/curly_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/html_highlight_rules\'], function(require, exports, module) {\n \n \n @@ -1972,28 +2400,21 @@ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n \n \n var CurlyHighlightRules = function() {\n - var CurlyRules = {\n - "start" : [\n - {\n - token: "variable",\n - regex: "{{",\n - next: "curly_mode"\n - }\n - ],\n + HtmlHighlightRules.call(this);\n \n - "curly_mode" : [\n - {\n - token: "variable",\n - regex: "}}",\n - next: "start"\n - }\n - ]\n - };\n + this.$rules["start"].unshift({\n + token: "variable",\n + regex: "{{",\n + push: "curly-start"\n + });\n +\n + this.$rules["curly-start"] = [{\n + token: "variable",\n + regex: "}}",\n + next: "pop"\n + }];\n \n - var htmlRules = new HtmlHighlightRules().getRules();\n - htmlRules.start = CurlyRules.start.concat(htmlRules.start);\n - htmlRules.curly_mode = CurlyRules.curly_mode;\n - this.$rules = htmlRules;\n + this.normalizeRules();\n };\n \n oop.inherits(CurlyHighlightRules, HtmlHighlightRules);\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-d.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-d.js.xml index 6049ce0f71..86609636de 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-d.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-d.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155556.82</string> </value> + <value> <string>ts83646622.29</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,9 +62,8 @@ var DHighlightRules = require("./d_highlight_rules").DHighlightRules;\n var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new DHighlightRules();\n + this.HighlightRules = DHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -420,7 +419,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>31495</int> </value> + <value> <int>31432</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-dart.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-dart.js.xml index 297707ed3d..b08d04fc9d 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-dart.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-dart.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155556.47</string> </value> + <value> <string>ts83646622.27</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -68,14 +68,12 @@ var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n CMode.call(this);\n - var highlighter = new DartHighlightRules();\n + this.HighlightRules = DartHighlightRules;\n this.foldingRules = new CStyleFoldMode();\n -\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, CMode);\n \n -(function() {\n +(function() { \n this.lineCommentStart = "//";\n this.blockComment = {start: "/*", end: "*/"};\n }).call(Mode.prototype);\n @@ -96,9 +94,11 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new c_cppHighlightRules().getRules());\n + this.HighlightRules = c_cppHighlightRules;\n +\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n +\n this.foldingRules = new CStyleFoldMode();\n };\n oop.inherits(Mode, TextMode);\n @@ -111,7 +111,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -805,7 +805,7 @@ var DartHighlightRules = function() {\n var keywordControl = "try|catch|finally|throw|break|case|continue|default|do|else|for|if|in|return|switch|while|new";\n var keywordDeclaration = "abstract|class|extends|external|factory|implements|get|native|operator|set|typedef";\n var storageModifier = "static|final|const";\n - var storageType = "void|bool|num|int|double|Dynamic|var|String";\n + var storageType = "void|bool|num|int|double|dynamic|var|String";\n \n var keywordMapper = this.createKeywordMapper({\n "constant.language.dart": constantLanguage,\n @@ -839,7 +839,7 @@ var DartHighlightRules = function() {\n },\n {\n token: "keyword.other.import.dart",\n - regex: "(?:\\\\b)(?:library|import|source|part|of)(?:\\\\b)"\n + regex: "(?:\\\\b)(?:library|import|part|of)(?:\\\\b)"\n },\n {\n token : ["keyword.other.import.dart", "text"],\n @@ -977,7 +977,7 @@ exports.DartHighlightRules = DartHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>35993</int> </value> + <value> <int>35901</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-diff.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-diff.js.xml index b4a662755e..469f4c7596 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-diff.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-diff.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155556.61</string> </value> + <value> <string>ts83646622.26</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var HighlightRules = require("./diff_highlight_rules").DiffHighlightRules;\r\n var FoldMode = require("./folding/diff").FoldMode;\r\n \r\n var Mode = function() {\r\n - this.$tokenizer = new Tokenizer(new HighlightRules().getRules());\r\n + this.HighlightRules = HighlightRules;\r\n this.foldingRules = new FoldMode(["diff", "index", "\\\\+{3}", "@@|\\\\*{5}"], "i");\n };\r\n oop.inherits(Mode, TextMode);\r\n @@ -133,6 +133,9 @@ var DiffHighlightRules = function() {\r\r\r\n }, {\r\n regex: "^Index.+$",\r\n token: "variable"\r\n + }, {\r\n + regex: "^\\\\s+$",\n + token: "text"\n }, {\r\n regex: "\\\\s*$",\n token: "invalid"\n @@ -198,7 +201,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>6189</int> </value> + <value> <int>6242</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-django.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-django.js.xml index a5934016f7..0c601c7688 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-django.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-django.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155556.71</string> </value> + <value> <string>ts83646622.24</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>79168</int> </value> + <value> <int>92542</int> </value> </item> <item> <key> <string>title</string> </key> @@ -158,16 +158,15 @@ var DjangoHtmlHighlightRules = function() {\n oop.inherits(DjangoHtmlHighlightRules, HtmlHighlightRules);\n \n var Mode = function() {\n - var highlighter = new DjangoHtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n - this.$embeds = highlighter.getEmbeds();\n + HtmlMode.call(this);\n + this.HighlightRules = DjangoHtmlHighlightRules;\n };\n oop.inherits(Mode, HtmlMode);\n \n exports.Mode = Mode;\n });\n \n -define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -178,13 +177,13 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n \n var Mode = function() {\n - var highlighter = new HtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -205,6 +204,10 @@ oop.inherits(Mode, TextMode);\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n \n }).call(Mode.prototype);\n \n @@ -225,7 +228,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -240,7 +244,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -346,7 +350,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -421,7 +426,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -466,8 +471,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -554,6 +559,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1071,7 +1084,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1085,7 +1098,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1152,152 +1165,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1385,15 +1363,14 @@ oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -1402,6 +1379,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -1415,80 +1393,255 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n token : "text",\n regex : "\\\\s+"\n }, {\n - token : "constant.character.entity",\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n }, {\n - defaultToken : "comment"\n - } ]\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n \n -exports.HtmlHighlightRules = HtmlHighlightRules;\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n });\n \n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n @@ -1571,14 +1724,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1593,7 +1741,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1603,8 +1751,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1634,14 +1782,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1655,6 +1798,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1663,8 +1809,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1681,11 +1827,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1764,6 +1910,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -1840,7 +1988,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -1873,7 +2021,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -1906,7 +2054,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -2020,6 +2168,286 @@ oop.inherits(FoldMode, BaseFoldMode);\n }).call(FoldMode.prototype);\n \n });\n +\n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n ]]></string> </value> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-dot.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-dot.js.xml index f40c7741b0..ec1e206b59 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-dot.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-dot.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155556.93</string> </value> + <value> <string>ts83646622.22</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -33,10 +33,9 @@ var DotHighlightRules = require("./dot_highlight_rules").DotHighlightRules;\n var DotFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new DotHighlightRules();\n + this.HighlightRules = DotHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new DotFoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -48,7 +47,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -352,7 +351,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>10836</int> </value> + <value> <int>10777</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ejs.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ejs.js.xml index 6d51fa1781..8739b90a35 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ejs.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ejs.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155557.03</string> </value> + <value> <string>ts83646622.21</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>93061</int> </value> + <value> <int>106386</int> </value> </item> <item> <key> <string>title</string> </key> @@ -143,9 +143,7 @@ var RubyMode = require("./ruby").Mode;\n \n var Mode = function() {\n HtmlMode.call(this);\n - var highlighter = new EjsHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules()); \n - this.$embeds = highlighter.getEmbeds();\n + this.HighlightRules = EjsHighlightRules; \n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode,\n @@ -161,15 +159,14 @@ oop.inherits(Mode, HtmlMode);\n exports.Mode = Mode;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -178,6 +175,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -191,78 +189,66 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "text",\n - regex : "\\\\s+"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n - token : "constant.character.entity",\n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ]\n - };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n \n exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n @@ -292,152 +278,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -495,7 +446,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -570,7 +522,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -615,8 +567,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -703,6 +655,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -790,6 +750,193 @@ exports.DocCommentHighlightRules = DocCommentHighlightRules;\n \n });\n \n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n \n @@ -860,7 +1007,7 @@ exports.tag = function(states, name, nextState, tagMap) {\n \n });\n \n -define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -871,13 +1018,13 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n \n var Mode = function() {\n - var highlighter = new HtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -898,6 +1045,10 @@ oop.inherits(Mode, TextMode);\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n \n }).call(Mode.prototype);\n \n @@ -918,7 +1069,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -933,7 +1085,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -1420,7 +1572,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1434,7 +1586,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1565,14 +1717,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1587,7 +1734,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1597,8 +1744,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1628,14 +1775,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1649,6 +1791,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1657,8 +1802,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1675,11 +1820,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1758,6 +1903,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -1834,7 +1981,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -1867,7 +2014,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -1900,7 +2047,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -2015,6 +2162,286 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n });\n \n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n +\n define(\'ace/mode/ruby\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/ruby_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/range\', \'ace/mode/folding/coffee\'], function(require, exports, module) {\n \n \n @@ -2027,7 +2454,7 @@ var Range = require("../range").Range;\n var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new RubyHighlightRules().getRules());\n + this.HighlightRules = RubyHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new FoldMode();\n };\n @@ -2041,7 +2468,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-erlang.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-erlang.js.xml index a46a853073..3d83505a58 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-erlang.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-erlang.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155557.15</string> </value> + <value> <string>ts83646622.19</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -50,11 +50,6 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n - *\n - * Contributor(s):\n - *\n - *\n - *\n * ***** END LICENSE BLOCK ***** */\n \n define(\'ace/mode/erlang\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/erlang_highlight_rules\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n @@ -67,9 +62,8 @@ var ErlangHighlightRules = require("./erlang_highlight_rules").ErlangHighlightRu var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new ErlangHighlightRules();\n + this.HighlightRules = ErlangHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -983,7 +977,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>45205</int> </value> + <value> <int>45111</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-forth.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-forth.js.xml index 9bcba8208b..459b4c6d04 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-forth.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-forth.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155557.21</string> </value> + <value> <string>ts83646622.18</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,9 +67,8 @@ var ForthHighlightRules = require("./forth_highlight_rules").ForthHighlightRules var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new ForthHighlightRules();\n + this.HighlightRules = ForthHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -271,7 +270,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>10079</int> </value> + <value> <int>10016</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ftl.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ftl.js.xml index b3e06082da..cfed67e2f6 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ftl.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ftl.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155557.36</string> </value> + <value> <string>ts83646622.16</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -61,8 +61,7 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var FtlHighlightRules = require("./ftl_highlight_rules").FtlHighlightRules;\n \n var Mode = function() {\n - var highlighter = new FtlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = FtlHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -174,14 +173,18 @@ var FtlLangHighlightRules = function () {\n oop.inherits(FtlLangHighlightRules, TextHighlightRules);\n \n var FtlHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n +\n var directives = "assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|"\n + "ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|"\n + "setting|stop|switch|t|visit";\n \n - HtmlHighlightRules.call(this);\n -\n - for (var i in this.$rules) {\n - this.$rules[i].unshift({\n + var startRules = [\n + {\n + token : "comment",\n + regex : "<#--",\n + next : "ftl-dcomment"\n + }, {\n token : "string.interpolated",\n regex : "\\\\${",\n push : "ftl-start"\n @@ -193,34 +196,35 @@ var FtlHighlightRules = function() {\n token : "keyword.other",\n regex : "</?@[a-zA-Z\\\\.]+",\n push : "ftl-start"\n - });\n - }\n + }\n + ];\n \n - this.embedRules(FtlLangHighlightRules, "ftl-");\n + var endRules = [\n + {\n + token : "keyword",\n + regex : "/?>",\n + next : "pop"\n + }, {\n + token : "string.interpolated",\n + regex : "}",\n + next : "pop"\n + }\n + ];\n \n - this.$rules["ftl-start"].unshift({\n - token : "keyword",\n - regex : "/?>",\n - next : "pop"\n - }, {\n - token : "string.interpolated",\n - regex : "}",\n - next : "pop"\n - });\n + for (var key in this.$rules)\n + this.$rules[key].unshift.apply(this.$rules[key], startRules);\n \n - this.$rules.start.unshift({\n - token : "comment",\n - regex : "<#--",\n - next : "comment"\n - });\n + this.embedRules(FtlLangHighlightRules, "ftl-", endRules, ["start"]);\n \n - this.$rules.comment.unshift({\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - token : "comment",\n - regex : ".+"\n + this.addRules({\n + "ftl-dcomment" : [{\n + token : "comment",\n + regex : ".*?-->",\n + next : "pop"\n + }, {\n + token : "comment",\n + regex : ".+"\n + }]\n });\n \n this.normalizeRules();\n @@ -231,15 +235,14 @@ oop.inherits(FtlHighlightRules, HtmlHighlightRules);\n exports.FtlHighlightRules = FtlHighlightRules;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -248,6 +251,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -261,78 +265,66 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "text",\n - regex : "\\\\s+"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n - token : "constant.character.entity",\n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ]\n - };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n \n exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n @@ -362,152 +354,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -565,7 +522,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -640,7 +598,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -685,8 +643,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -773,6 +731,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -860,6 +826,193 @@ exports.DocCommentHighlightRules = DocCommentHighlightRules;\n \n });\n \n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n \n @@ -939,7 +1092,7 @@ exports.tag = function(states, name, nextState, tagMap) {\n </item> <item> <key> <string>size</string> </key> - <value> <int>41378</int> </value> + <value> <int>46691</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-glsl.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-glsl.js.xml index bf8a5dcb3b..db198b9137 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-glsl.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-glsl.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155557.47</string> </value> + <value> <string>ts83646622.15</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -65,7 +65,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new glslHighlightRules().getRules());\n + this.HighlightRules = glslHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -88,9 +89,11 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new c_cppHighlightRules().getRules());\n + this.HighlightRules = c_cppHighlightRules;\n +\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n +\n this.foldingRules = new CStyleFoldMode();\n };\n oop.inherits(Mode, TextMode);\n @@ -103,7 +106,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -842,7 +845,7 @@ exports.glslHighlightRules = glslHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>33378</int> </value> + <value> <int>33333</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-golang.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-golang.js.xml index 8cb44ac7ce..accbd6a2a3 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-golang.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-golang.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155557.61</string> </value> + <value> <string>ts83646622.13</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -33,7 +33,7 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new GolangHighlightRules().getRules());\n + this.HighlightRules = GolangHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new CStyleFoldMode();\n };\n @@ -47,7 +47,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -84,17 +84,25 @@ define(\'ace/mode/golang_highlight_rules\', [\'require\', \'exports\', \'module\ \n var GolangHighlightRules = function() {\n var keywords = (\n - "true|else|false|break|case|return|goto|if|const|" +\n - "continue|struct|default|switch|for|" +\n - "func|import|package|chan|defer|fallthrough|go|interface|map|range" +\n + "else|break|case|return|goto|if|const|select|" +\n + "continue|struct|default|switch|for|range|" +\n + "func|import|package|chan|defer|fallthrough|go|interface|map|range|" +\n "select|type|var"\n );\n - var buildinConstants = ("nil|true|false|iota");\n + var builtinTypes = (\n + "string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|" +\n + "float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error"\n + );\n + var builtinFunctions = (\n + "make|close|new|panic|recover"\n + );\n + var builtinConstants = ("nil|true|false|iota");\n \n var keywordMapper = this.createKeywordMapper({\n - "variable.language": "this",\n "keyword": keywords,\n - "constant.language": buildinConstants\n + "constant.language": builtinConstants,\n + "support.function": builtinFunctions,\n + "support.type": builtinTypes\n }, "identifier");\n \n this.$rules = {\n @@ -111,35 +119,29 @@ define(\'ace/mode/golang_highlight_rules\', [\'require\', \'exports\', \'module\ }, {\n token : "string", // single line\n regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // multi line string start\n - regex : \'["].*\\\\\\\\$\',\n - next : "qqstring"\n }, {\n token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + regex : \'[`](?:[^`]*)[`]\'\n }, {\n token : "string", // multi line string start\n - regex : "[\'].*\\\\\\\\$",\n - next : "qstring"\n + merge : true,\n + regex : \'[`](?:[^`]*)$\',\n + next : "bqstring"\n + }, {\n + token : "constant.numeric", // rune\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))[\']"\n }, {\n token : "constant.numeric", // hex\n regex : "0[xX][0-9a-fA-F]+\\\\b"\n }, {\n token : "constant.numeric", // float\n regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n - }, {\n - token : "constant", // <CONSTANT>\n - regex : "<[a-zA-Z0-9.]+>"\n - }, {\n - token : "keyword", // pre-compiler directivs\n - regex : "(?:#include|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"\n }, {\n token : keywordMapper,\n regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n }, {\n token : "keyword.operator",\n - regex : "!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)"\n + regex : "!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^="\n }, {\n token : "punctuation.operator",\n regex : "\\\\?|\\\\:|\\\\,|\\\\;|\\\\."\n @@ -149,6 +151,9 @@ define(\'ace/mode/golang_highlight_rules\', [\'require\', \'exports\', \'module\ }, {\n token : "paren.rparen",\n regex : "[\\\\])}]"\n + }, {\n + token: "invalid",\n + regex: "\\\\s+$"\n }, {\n token : "text",\n regex : "\\\\s+"\n @@ -164,20 +169,10 @@ define(\'ace/mode/golang_highlight_rules\', [\'require\', \'exports\', \'module\ regex : ".+"\n }\n ],\n - "qqstring" : [\n - {\n - token : "string",\n - regex : \'(?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?"\',\n - next : "start"\n - }, {\n - token : "string",\n - regex : \'.+\'\n - }\n - ],\n - "qstring" : [\n + "bqstring" : [\n {\n token : "string",\n - regex : "(?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?\'",\n + regex : \'(?:[^`]*)`\',\n next : "start"\n }, {\n token : "string",\n @@ -188,7 +183,7 @@ define(\'ace/mode/golang_highlight_rules\', [\'require\', \'exports\', \'module\ \n this.embedRules(DocCommentHighlightRules, "doc-",\n [ DocCommentHighlightRules.getEndRule("start") ]);\n - }\n + };\n oop.inherits(GolangHighlightRules, TextHighlightRules);\n \n exports.GolangHighlightRules = GolangHighlightRules;\n @@ -664,7 +659,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>24003</int> </value> + <value> <int>23743</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-groovy.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-groovy.js.xml index bac89a3e7b..ca6c6bedc5 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-groovy.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-groovy.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155557.75</string> </value> + <value> <string>ts83646622.12</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -32,7 +32,7 @@ var GroovyHighlightRules = require("./groovy_highlight_rules").GroovyHighlightRu \n var Mode = function() {\n JavaScriptMode.call(this);\n - this.$tokenizer = new Tokenizer(new GroovyHighlightRules().getRules());\n + this.HighlightRules = GroovyHighlightRules;\n };\n oop.inherits(Mode, JavaScriptMode);\n \n @@ -61,7 +61,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -76,7 +77,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -182,7 +183,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -257,7 +259,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -302,8 +304,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -390,6 +392,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1069,7 +1079,7 @@ exports.GroovyHighlightRules = GroovyHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>43563</int> </value> + <value> <int>43867</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haml.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haml.js.xml index b0b4aa545f..a6bc23066f 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haml.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haml.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155557.85</string> </value> + <value> <string>ts83646622.1</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,10 +67,8 @@ var HamlHighlightRules = require("./haml_highlight_rules").HamlHighlightRules;\n var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - var highlighter = new HamlHighlightRules();\n - this.foldingRules = new FoldMode(); \n - \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HamlHighlightRules;\n + this.foldingRules = new FoldMode();\n };\n oop.inherits(Mode, TextMode);\n \n @@ -519,7 +517,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>17975</int> </value> + <value> <int>17903</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-handlebars.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-handlebars.js.xml new file mode 100644 index 0000000000..431db3f48b --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-handlebars.js.xml @@ -0,0 +1,2442 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.35</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-handlebars.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>91193</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* global define */\n +\n +define(\'ace/mode/handlebars\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/html\', \'ace/tokenizer\', \'ace/mode/handlebars_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n + \n +\n +var oop = require("../lib/oop");\n +var HtmlMode = require("./html").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var HandlebarsHighlightRules = require("./handlebars_highlight_rules").HandlebarsHighlightRules;\n +var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n +var HtmlFoldMode = require("./folding/html").FoldMode;\n +\n +var Mode = function() {\n + HtmlMode.call(this);\n + this.HighlightRules = HandlebarsHighlightRules;\n + this.$behaviour = new HtmlBehaviour();\n +\n + \n + this.foldingRules = new HtmlFoldMode();\n +};\n +\n +oop.inherits(Mode, HtmlMode);\n +\n +(function() {\n + \n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var JavaScriptMode = require("./javascript").Mode;\n +var CssMode = require("./css").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n +var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n +var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n +\n +var Mode = function() {\n + this.HighlightRules = HtmlHighlightRules;\n + this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n + \n + this.createModeDelegates({\n + "js-": JavaScriptMode,\n + "css-": CssMode\n + });\n + \n + this.foldingRules = new HtmlFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.blockComment = {start: "<!--", end: "-->"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + return this.$getIndent(line);\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return false;\n + };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/javascript\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/range\', \'ace/worker/worker_client\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var Range = require("../range").Range;\n +var WorkerClient = require("../worker/worker_client").WorkerClient;\n +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CstyleBehaviour();\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.lineCommentStart = "//";\n + this.blockComment = {start: "/*", end: "*/"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + var indent = this.$getIndent(line);\n +\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n + var tokens = tokenizedLine.tokens;\n + var endState = tokenizedLine.state;\n +\n + if (tokens.length && tokens[tokens.length-1].type == "comment") {\n + return indent;\n + }\n +\n + if (state == "start" || state == "no_regex") {\n + var match = line.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);\n + if (match) {\n + indent += tab;\n + }\n + } else if (state == "doc-start") {\n + if (endState == "start" || endState == "no_regex") {\n + return "";\n + }\n + var match = line.match(/^\\s*(\\/?)\\*/);\n + if (match) {\n + if (match[1]) {\n + indent += " ";\n + }\n + indent += "* ";\n + }\n + }\n +\n + return indent;\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return this.$outdent.checkOutdent(line, input);\n + };\n +\n + this.autoOutdent = function(state, doc, row) {\n + this.$outdent.autoOutdent(doc, row);\n + };\n +\n + this.createWorker = function(session) {\n + var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");\n + worker.attachToDocument(session.getDocument());\n +\n + worker.on("jslint", function(results) {\n + session.setAnnotations(results.data);\n + });\n +\n + worker.on("terminate", function() {\n + session.clearAnnotations();\n + });\n +\n + return worker;\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/javascript_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/doc_comment_highlight_rules\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var JavaScriptHighlightRules = function() {\n + var keywordMapper = this.createKeywordMapper({\n + "variable.language":\n + "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors\n + "Namespace|QName|XML|XMLList|" + // E4X\n + "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +\n + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +\n + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors\n + "SyntaxError|TypeError|URIError|" +\n + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions\n + "isNaN|parseFloat|parseInt|" +\n + "JSON|Math|" + // Other\n + "this|arguments|prototype|window|document" , // Pseudo\n + "keyword":\n + "const|yield|import|get|set|" +\n + "break|case|catch|continue|default|delete|do|else|finally|for|function|" +\n + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +\n + "__parent__|__count__|escape|unescape|with|__proto__|" +\n + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",\n + "storage.type":\n + "const|let|var|function",\n + "constant.language":\n + "null|Infinity|NaN|undefined",\n + "support.function":\n + "alert",\n + "constant.language.boolean": "true|false"\n + }, "identifier");\n + var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";\n + var identifierRe = "[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b";\n +\n + var escapedRe = "\\\\\\\\(?:x[0-9a-fA-F]{2}|" + // hex\n + "u[0-9a-fA-F]{4}|" + // unicode\n + "[0-2][0-7]{0,2}|" + // oct\n + "3[0-6][0-7]?|" + // oct\n + "37[0-7]?|" + // oct\n + "[4-7][0-7]?|" + //oct\n + ".)";\n +\n + this.$rules = {\n + "no_regex" : [\n + {\n + token : "comment",\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n + },\n + DocCommentHighlightRules.getStartRule("doc-start"),\n + {\n + token : "comment", // multi line comment\n + regex : /\\/\\*/,\n + next : "comment"\n + }, {\n + token : "string",\n + regex : "\'(?=.)",\n + next : "qstring"\n + }, {\n + token : "string",\n + regex : \'"(?=.)\',\n + next : "qqstring"\n + }, {\n + token : "constant.numeric", // hex\n + regex : /0[xX][0-9a-fA-F]+\\b/\n + }, {\n + token : "constant.numeric", // float\n + regex : /[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "support.function",\n + "punctuation.operator", "entity.name.function", "text","keyword.operator"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(prototype)(\\\\.)(" + identifierRe +")(\\\\s*)(=)",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "entity.name.function", "text",\n + "keyword.operator", "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "entity.name.function", "text", "keyword.operator", "text", "storage.type",\n + "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "entity.name.function", "text",\n + "keyword.operator", "text",\n + "storage.type", "text", "entity.name.function", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "text", "entity.name.function", "text", "paren.lparen"\n + ],\n + regex : "(function)(\\\\s+)(" + identifierRe + ")(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "entity.name.function", "text", "punctuation.operator",\n + "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "text", "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(:)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : "keyword",\n + regex : "(?:" + kwBeforeRe + ")\\\\b",\n + next : "start"\n + }, {\n + token : ["punctuation.operator", "support.function"],\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + }, {\n + token : ["punctuation.operator", "support.function.dom"],\n + regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n + }, {\n + token : ["punctuation.operator", "support.constant"],\n + regex : /(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n + }, {\n + token : ["storage.type", "punctuation.operator", "support.function.firebug"],\n + regex : /(console)(\\.)(warn|info|log|error|time|timeEnd|assert)\\b/\n + }, {\n + token : keywordMapper,\n + regex : identifierRe\n + }, {\n + token : "keyword.operator",\n + regex : /--|\\+\\+|[!$%&*+\\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=/,\n + next : "start"\n + }, {\n + token : "punctuation.operator",\n + regex : /\\?|\\:|\\,|\\;|\\./,\n + next : "start"\n + }, {\n + token : "paren.lparen",\n + regex : /[\\[({]/,\n + next : "start"\n + }, {\n + token : "paren.rparen",\n + regex : /[\\])}]/\n + }, {\n + token : "keyword.operator",\n + regex : /\\/=?/,\n + next : "start"\n + }, {\n + token: "comment",\n + regex: /^#!.*$/\n + }\n + ],\n + "start": [\n + DocCommentHighlightRules.getStartRule("doc-start"),\n + {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + next : "comment_regex_allowed"\n + }, {\n + token : "comment",\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n + }, {\n + token: "string.regexp",\n + regex: "\\\\/",\n + next: "regex"\n + }, {\n + token : "text",\n + regex : "\\\\s+|^$",\n + next : "start"\n + }, {\n + token: "empty",\n + regex: "",\n + next: "no_regex"\n + }\n + ],\n + "regex": [\n + {\n + token: "regexp.keyword.operator",\n + regex: "\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)"\n + }, {\n + token: "string.regexp",\n + regex: "/\\\\w*",\n + next: "no_regex"\n + }, {\n + token : "invalid",\n + regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n + }, {\n + token : "constant.language.escape",\n + regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?]/\n + }, {\n + token : "constant.language.delimiter",\n + regex: /\\|/\n + }, {\n + token: "constant.language.escape",\n + regex: /\\[\\^?/,\n + next: "regex_character_class"\n + }, {\n + token: "empty",\n + regex: "$",\n + next: "no_regex"\n + }, {\n + defaultToken: "string.regexp"\n + }\n + ],\n + "regex_character_class": [\n + {\n + token: "regexp.keyword.operator",\n + regex: "\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)"\n + }, {\n + token: "constant.language.escape",\n + regex: "]",\n + next: "regex"\n + }, {\n + token: "constant.language.escape",\n + regex: "-"\n + }, {\n + token: "empty",\n + regex: "$",\n + next: "no_regex"\n + }, {\n + defaultToken: "string.regexp.charachterclass"\n + }\n + ],\n + "function_arguments": [\n + {\n + token: "variable.parameter",\n + regex: identifierRe\n + }, {\n + token: "punctuation.operator",\n + regex: "[, ]+"\n + }, {\n + token: "punctuation.operator",\n + regex: "$"\n + }, {\n + token: "empty",\n + regex: "",\n + next: "no_regex"\n + }\n + ],\n + "comment_regex_allowed" : [\n + {token : "comment", regex : "\\\\*\\\\/", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "comment" : [\n + {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n + "qqstring" : [\n + {\n + token : "constant.language.escape",\n + regex : escapedRe\n + }, {\n + token : "string",\n + regex : "\\\\\\\\$",\n + next : "qqstring"\n + }, {\n + token : "string",\n + regex : \'"|$\',\n + next : "no_regex"\n + }, {\n + defaultToken: "string"\n + }\n + ],\n + "qstring" : [\n + {\n + token : "constant.language.escape",\n + regex : escapedRe\n + }, {\n + token : "string",\n + regex : "\\\\\\\\$",\n + next : "qstring"\n + }, {\n + token : "string",\n + regex : "\'|$",\n + next : "no_regex"\n + }, {\n + defaultToken: "string"\n + }\n + ]\n + };\n +\n + this.embedRules(DocCommentHighlightRules, "doc-",\n + [ DocCommentHighlightRules.getEndRule("no_regex") ]);\n +};\n +\n +oop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n +\n +exports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n +});\n +\n +define(\'ace/mode/doc_comment_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var DocCommentHighlightRules = function() {\n +\n + this.$rules = {\n + "start" : [ {\n + token : "comment.doc.tag",\n + regex : "@[\\\\w\\\\d_]+" // TODO: fix email addresses\n + }, {\n + token : "comment.doc.tag",\n + regex : "\\\\bTODO\\\\b"\n + }, {\n + defaultToken : "comment.doc"\n + }]\n + };\n +};\n +\n +oop.inherits(DocCommentHighlightRules, TextHighlightRules);\n +\n +DocCommentHighlightRules.getStartRule = function(start) {\n + return {\n + token : "comment.doc", // doc comment\n + regex : "\\\\/\\\\*(?=\\\\*)",\n + next : start\n + };\n +};\n +\n +DocCommentHighlightRules.getEndRule = function (start) {\n + return {\n + token : "comment.doc", // closing comment\n + regex : "\\\\*\\\\/",\n + next : start\n + };\n +};\n +\n +\n +exports.DocCommentHighlightRules = DocCommentHighlightRules;\n +\n +});\n +\n +define(\'ace/mode/matching_brace_outdent\', [\'require\', \'exports\', \'module\' , \'ace/range\'], function(require, exports, module) {\n +\n +\n +var Range = require("../range").Range;\n +\n +var MatchingBraceOutdent = function() {};\n +\n +(function() {\n +\n + this.checkOutdent = function(line, input) {\n + if (! /^\\s+$/.test(line))\n + return false;\n +\n + return /^\\s*\\}/.test(input);\n + };\n +\n + this.autoOutdent = function(doc, row) {\n + var line = doc.getLine(row);\n + var match = line.match(/^(\\s*\\})/);\n +\n + if (!match) return 0;\n +\n + var column = match[1].length;\n + var openBracePos = doc.findMatchingBracket({row: row, column: column});\n +\n + if (!openBracePos || openBracePos.row == row) return 0;\n +\n + var indent = this.$getIndent(doc.getLine(openBracePos.row));\n + doc.replace(new Range(row, 0, row, column-1), indent);\n + };\n +\n + this.$getIndent = function(line) {\n + return line.match(/^\\s*/)[0];\n + };\n +\n +}).call(MatchingBraceOutdent.prototype);\n +\n +exports.MatchingBraceOutdent = MatchingBraceOutdent;\n +});\n +\n +define(\'ace/mode/behaviour/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/token_iterator\', \'ace/lib/lang\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +var lang = require("../../lib/lang");\n +\n +var SAFE_INSERT_IN_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator"];\n +var SAFE_INSERT_BEFORE_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator", "comment"];\n +\n +\n +var autoInsertedBrackets = 0;\n +var autoInsertedRow = -1;\n +var autoInsertedLineEnd = "";\n +var maybeInsertedBrackets = 0;\n +var maybeInsertedRow = -1;\n +var maybeInsertedLineStart = "";\n +var maybeInsertedLineEnd = "";\n +\n +var CstyleBehaviour = function () {\n + \n + CstyleBehaviour.isSaneInsertion = function(editor, session) {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {\n + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))\n + return false;\n + }\n + iterator.stepForward();\n + return iterator.getCurrentTokenRow() !== cursor.row ||\n + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);\n + };\n + \n + CstyleBehaviour.$matchTokenType = function(token, types) {\n + return types.indexOf(token.type || token) > -1;\n + };\n + \n + CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))\n + autoInsertedBrackets = 0;\n + autoInsertedRow = cursor.row;\n + autoInsertedLineEnd = bracket + line.substr(cursor.column);\n + autoInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isMaybeInsertedClosing(cursor, line))\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = cursor.row;\n + maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n + maybeInsertedLineEnd = line.substr(cursor.column);\n + maybeInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n + return autoInsertedBrackets > 0 &&\n + cursor.row === autoInsertedRow &&\n + bracket === autoInsertedLineEnd[0] &&\n + line.substr(cursor.column) === autoInsertedLineEnd;\n + };\n + \n + CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n + return maybeInsertedBrackets > 0 &&\n + cursor.row === maybeInsertedRow &&\n + line.substr(cursor.column) === maybeInsertedLineEnd &&\n + line.substr(0, cursor.column) == maybeInsertedLineStart;\n + };\n + \n + CstyleBehaviour.popAutoInsertedClosing = function() {\n + autoInsertedLineEnd = autoInsertedLineEnd.substr(1);\n + autoInsertedBrackets--;\n + };\n + \n + CstyleBehaviour.clearMaybeInsertedClosing = function() {\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = -1;\n + };\n +\n + this.add("braces", "insertion", function (state, action, editor, session, text) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (text == \'{\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'{\' + selected + \'}\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + if (/[\\]\\}\\)]/.test(line[cursor.column])) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "}");\n + return {\n + text: \'{}\',\n + selection: [1, 1]\n + };\n + } else {\n + CstyleBehaviour.recordMaybeInsert(editor, session, "{");\n + return {\n + text: \'{\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == \'}\') {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\') {\n + var matching = session.$findOpeningBracket(\'}\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == "\\n" || text == "\\r\\n") {\n + var closing = "";\n + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n + closing = lang.stringRepeat("}", maybeInsertedBrackets);\n + CstyleBehaviour.clearMaybeInsertedClosing();\n + }\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\' || closing !== "") {\n + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, \'}\');\n + if (!openBracePos)\n + return null;\n +\n + var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());\n + var next_indent = this.$getIndent(line);\n +\n + return {\n + text: \'\\n\' + indent + \'\\n\' + next_indent + closing,\n + selection: [1, indent.length, 1, indent.length]\n + };\n + }\n + }\n + });\n +\n + this.add("braces", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'{\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.end.column, range.end.column + 1);\n + if (rightChar == \'}\') {\n + range.end.column++;\n + return range;\n + } else {\n + maybeInsertedBrackets--;\n + }\n + }\n + });\n +\n + this.add("parens", "insertion", function (state, action, editor, session, text) {\n + if (text == \'(\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'(\' + selected + \')\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, ")");\n + return {\n + text: \'()\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \')\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \')\') {\n + var matching = session.$findOpeningBracket(\')\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("parens", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'(\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \')\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("brackets", "insertion", function (state, action, editor, session, text) {\n + if (text == \'[\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'[\' + selected + \']\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "]");\n + return {\n + text: \'[]\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \']\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \']\') {\n + var matching = session.$findOpeningBracket(\']\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("brackets", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'[\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \']\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {\n + if (text == \'"\' || text == "\'") {\n + var quote = text;\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "\'" && selected != \'"\' && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: quote + selected + quote,\n + selection: false\n + };\n + } else {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var leftChar = line.substring(cursor.column-1, cursor.column);\n + if (leftChar == \'\\\\\') {\n + return null;\n + }\n + var tokens = session.getTokens(selection.start.row);\n + var col = 0, token;\n + var quotepos = -1; // Track whether we\'re inside an open quote.\n +\n + for (var x = 0; x < tokens.length; x++) {\n + token = tokens[x];\n + if (token.type == "string") {\n + quotepos = -1;\n + } else if (quotepos < 0) {\n + quotepos = token.value.indexOf(quote);\n + }\n + if ((token.value.length + col) > selection.start.column) {\n + break;\n + }\n + col += tokens[x].value.length;\n + }\n + if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {\n + if (!CstyleBehaviour.isSaneInsertion(editor, session))\n + return;\n + return {\n + text: quote + quote,\n + selection: [1,1]\n + };\n + } else if (token && token.type === "string") {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == quote) {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && (selected == \'"\' || selected == "\'")) {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == selected) {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n +};\n +\n +oop.inherits(CstyleBehaviour, Behaviour);\n +\n +exports.CstyleBehaviour = CstyleBehaviour;\n +});\n +\n +define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Range = require("../../range").Range;\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(commentRegex) {\n + if (commentRegex) {\n + this.foldingStartMarker = new RegExp(\n + this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n + );\n + this.foldingStopMarker = new RegExp(\n + this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n + );\n + }\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n + this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var line = session.getLine(row);\n + var match = line.match(this.foldingStartMarker);\n + if (match) {\n + var i = match.index;\n +\n + if (match[1])\n + return this.openingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i + match[0].length, 1);\n + }\n +\n + if (foldStyle !== "markbeginend")\n + return;\n +\n + var match = line.match(this.foldingStopMarker);\n + if (match) {\n + var i = match.index + match[0].length;\n +\n + if (match[1])\n + return this.closingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i, -1);\n + }\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +\n +define(\'ace/mode/css\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/css_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/worker/worker_client\', \'ace/mode/behaviour/css\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var WorkerClient = require("../worker/worker_client").WorkerClient;\n +var CssBehaviour = require("./behaviour/css").CssBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + this.HighlightRules = CssHighlightRules;\n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CssBehaviour();\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.foldingRules = "cStyle";\n + this.blockComment = {start: "/*", end: "*/"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + var indent = this.$getIndent(line);\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n + if (tokens.length && tokens[tokens.length-1].type == "comment") {\n + return indent;\n + }\n +\n + var match = line.match(/^.*\\{\\s*$/);\n + if (match) {\n + indent += tab;\n + }\n +\n + return indent;\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return this.$outdent.checkOutdent(line, input);\n + };\n +\n + this.autoOutdent = function(state, doc, row) {\n + this.$outdent.autoOutdent(doc, row);\n + };\n +\n + this.createWorker = function(session) {\n + var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");\n + worker.attachToDocument(session.getDocument());\n +\n + worker.on("csslint", function(e) {\n + session.setAnnotations(e.data);\n + });\n +\n + worker.on("terminate", function() {\n + session.clearAnnotations();\n + });\n +\n + return worker;\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +\n +});\n +\n +define(\'ace/mode/css_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index";\n +var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";\n +var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";\n +var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow";\n +var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";\n +\n +var numRe = exports.numRe = "\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))";\n +var pseudoElements = exports.pseudoElements = "(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b";\n +var pseudoClasses = exports.pseudoClasses = "(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b";\n +\n +var CssHighlightRules = function() {\n +\n + var keywordMapper = this.createKeywordMapper({\n + "support.function": supportFunction,\n + "support.constant": supportConstant,\n + "support.type": supportType,\n + "support.constant.color": supportConstantColor,\n + "support.constant.fonts": supportConstantFonts\n + }, "text", true);\n +\n + this.$rules = {\n + "start" : [{\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token: "paren.lparen",\n + regex: "\\\\{",\n + push: "ruleset"\n + }, {\n + token: "string",\n + regex: "@.*?{",\n + push: "media"\n + }, {\n + token: "keyword",\n + regex: "#[a-z0-9-_]+"\n + }, {\n + token: "variable",\n + regex: "\\\\.[a-z0-9-_]+"\n + }, {\n + token: "string",\n + regex: ":[a-z0-9-_]+"\n + }, {\n + token: "constant",\n + regex: "[a-z0-9-_]+"\n + }, {\n + caseInsensitive: true\n + }],\n +\n + "media" : [{\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token: "paren.lparen",\n + regex: "\\\\{",\n + push: "ruleset"\n + }, {\n + token: "string",\n + regex: "\\\\}",\n + next: "pop"\n + }, {\n + token: "keyword",\n + regex: "#[a-z0-9-_]+"\n + }, {\n + token: "variable",\n + regex: "\\\\.[a-z0-9-_]+"\n + }, {\n + token: "string",\n + regex: ":[a-z0-9-_]+"\n + }, {\n + token: "constant",\n + regex: "[a-z0-9-_]+"\n + }, {\n + caseInsensitive: true\n + }],\n +\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n +\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n + };\n +\n + this.normalizeRules();\n +};\n +\n +oop.inherits(CssHighlightRules, TextHighlightRules);\n +\n +exports.CssHighlightRules = CssHighlightRules;\n +\n +});\n +\n +define(\'ace/mode/behaviour/css\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/mode/behaviour/cstyle\', \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +\n +var CssBehaviour = function () {\n +\n + this.inherit(CstyleBehaviour);\n +\n + this.add("colon", "insertion", function (state, action, editor, session, text) {\n + if (text === \':\') {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + var token = iterator.getCurrentToken();\n + if (token && token.value.match(/\\s+/)) {\n + token = iterator.stepBackward();\n + }\n + if (token && token.type === \'support.type\') {\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar === \':\') {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + }\n + }\n + if (!line.substring(cursor.column).match(/^\\s*;/)) {\n + return {\n + text: \':;\',\n + selection: [1, 1]\n + }\n + }\n + }\n + }\n + });\n +\n + this.add("colon", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected === \':\') {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + var token = iterator.getCurrentToken();\n + if (token && token.value.match(/\\s+/)) {\n + token = iterator.stepBackward();\n + }\n + if (token && token.type === \'support.type\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.end.column, range.end.column + 1);\n + if (rightChar === \';\') {\n + range.end.column ++;\n + return range;\n + }\n + }\n + }\n + });\n +\n + this.add("semicolon", "insertion", function (state, action, editor, session, text) {\n + if (text === \';\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar === \';\') {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + }\n + }\n + }\n + });\n +\n +}\n +oop.inherits(CssBehaviour, CstyleBehaviour);\n +\n +exports.CssBehaviour = CssBehaviour;\n +});\n +\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n +var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n +\n +var tagMap = lang.createMap({\n + a : \'anchor\',\n + button \t : \'form\',\n + form : \'form\',\n + img : \'image\',\n + input : \'form\',\n + label : \'form\',\n + option : \'form\',\n + script : \'script\',\n + select : \'form\',\n + textarea : \'form\',\n + style : \'style\',\n + table : \'table\',\n + tbody : \'table\',\n + td : \'table\',\n + tfoot : \'table\',\n + th : \'table\',\n + tr : \'table\'\n +});\n +\n +var HtmlHighlightRules = function() {\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n + }, {\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n + }, {\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n + }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +function string(state) {\n + return [{\n + token : "string",\n + regex : \'"\',\n + next : state + "_qqstring"\n + }, {\n + token : "string",\n + regex : "\'",\n + next : state + "_qstring"\n + }];\n +}\n +\n +function multiLineString(quote, state) {\n + return [\n + {token : "string", regex : quote, next : state},\n + {\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n + },\n + {defaultToken : "string"}\n + ];\n +}\n +\n +exports.tag = function(states, name, nextState, tagMap) {\n + states[name] = [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + \n + token : !tagMap ? "meta.tag.tag-name" : function(value) {\n + if (tagMap[value])\n + return "meta.tag.tag-name." + tagMap[value];\n + else\n + return "meta.tag.tag-name";\n + },\n + regex : "[-_a-zA-Z0-9:]+",\n + next : name + "_embed_attribute_list" \n + }, {\n + token: "empty",\n + regex: "",\n + next : name + "_embed_attribute_list"\n + }];\n +\n + states[name + "_qstring"] = multiLineString("\'", name + "_embed_attribute_list");\n + states[name + "_qqstring"] = multiLineString("\\"", name + "_embed_attribute_list");\n + \n + states[name + "_embed_attribute_list"] = [{\n + token : "meta.tag.r",\n + regex : "/?>",\n + next : nextState\n + }, {\n + token : "keyword.operator",\n + regex : "="\n + }, {\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n + }, {\n + token : "constant.numeric", // float\n + regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + }].concat(string(name));\n +};\n +\n +});\n +\n +define(\'ace/mode/behaviour/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour/xml\', \'ace/mode/behaviour/cstyle\', \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var XmlBehaviour = require("../behaviour/xml").XmlBehaviour;\n +var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n + return hasType;\n +}\n +\n +var HtmlBehaviour = function () {\n +\n + this.inherit(XmlBehaviour); // Get xml behaviour\n + \n + this.add("autoclosing", "insertion", function (state, action, editor, session, text) {\n + if (text == \'>\') {\n + var position = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, position.row, position.column);\n + var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n + var atCursor = false;\n + if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'keyword.operator\') || hasType(token, \'entity.attribute-name\') || hasType(token, \'text\')));\n + } else {\n + atCursor = true;\n + }\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n + }\n + var element = token.value;\n + if (atCursor){\n + var element = element.substring(0, position.column - token.start);\n + }\n + if (voidElements.indexOf(element) !== -1){\n + return;\n + }\n + return {\n + text: \'>\' + \'</\' + element + \'>\',\n + selection: [1, 1]\n + }\n + }\n + });\n +}\n +oop.inherits(HtmlBehaviour, XmlBehaviour);\n +\n +exports.HtmlBehaviour = HtmlBehaviour;\n +});\n +\n +define(\'ace/mode/behaviour/xml\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/mode/behaviour/cstyle\', \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n + return hasType;\n +}\n +\n +var XmlBehaviour = function () {\n + \n + this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour\n + \n + this.add("autoclosing", "insertion", function (state, action, editor, session, text) {\n + if (text == \'>\') {\n + var position = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, position.row, position.column);\n + var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n + var atCursor = false;\n + if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'keyword.operator\') || hasType(token, \'entity.attribute-name\') || hasType(token, \'text\')));\n + } else {\n + atCursor = true;\n + }\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n + }\n + var tag = token.value;\n + if (atCursor){\n + var tag = tag.substring(0, position.column - token.start);\n + }\n +\n + return {\n + text: \'>\' + \'</\' + tag + \'>\',\n + selection: [1, 1]\n + }\n + }\n + });\n +\n + this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n + if (text == "\\n") {\n + var cursor = editor.getCursorPosition();\n + var line = session.getLine(cursor.row);\n + var rightChars = line.substring(cursor.column, cursor.column + 2);\n + if (rightChars == \'</\') {\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n +\n + return {\n + text: \'\\n\' + indent + \'\\n\' + next_indent,\n + selection: [1, indent.length, 1, indent.length]\n + }\n + }\n + }\n + });\n + \n +}\n +oop.inherits(XmlBehaviour, Behaviour);\n +\n +exports.XmlBehaviour = XmlBehaviour;\n +});\n +\n +define(\'ace/mode/folding/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/folding/mixed\', \'ace/mode/folding/xml\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var MixedFoldMode = require("./mixed").FoldMode;\n +var XmlFoldMode = require("./xml").FoldMode;\n +var CStyleFoldMode = require("./cstyle").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function() {\n + MixedFoldMode.call(this, new XmlFoldMode({\n + "area": 1,\n + "base": 1,\n + "br": 1,\n + "col": 1,\n + "command": 1,\n + "embed": 1,\n + "hr": 1,\n + "img": 1,\n + "input": 1,\n + "keygen": 1,\n + "link": 1,\n + "meta": 1,\n + "param": 1,\n + "source": 1,\n + "track": 1,\n + "wbr": 1,\n + "li": 1,\n + "dt": 1,\n + "dd": 1,\n + "p": 1,\n + "rt": 1,\n + "rp": 1,\n + "optgroup": 1,\n + "option": 1,\n + "colgroup": 1,\n + "td": 1,\n + "th": 1\n + }), {\n + "js-": new CStyleFoldMode(),\n + "css-": new CStyleFoldMode()\n + });\n +};\n +\n +oop.inherits(FoldMode, MixedFoldMode);\n +\n +});\n +\n +define(\'ace/mode/folding/mixed\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n + this.defaultMode = defaultMode;\n + this.subModes = subModes;\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n +\n + this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n + for (var key in this.subModes) {\n + if (state.indexOf(key) === 0)\n + return this.subModes[key];\n + }\n + return null;\n + };\n + \n + this.$tryMode = function(state, session, foldStyle, row) {\n + var mode = this.$getMode(state);\n + return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");\n + };\n +\n + this.getFoldWidget = function(session, foldStyle, row) {\n + return (\n + this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n + this.$tryMode(session.getState(row), session, foldStyle, row) ||\n + this.defaultMode.getFoldWidget(session, foldStyle, row)\n + );\n + };\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var mode = this.$getMode(session.getState(row-1));\n + \n + if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n + mode = this.$getMode(session.getState(row));\n + \n + if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n + mode = this.defaultMode;\n + \n + return mode.getFoldWidgetRange(session, foldStyle, row);\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +\n +define(\'ace/mode/folding/xml\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/range\', \'ace/mode/folding/fold_mode\', \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var lang = require("../../lib/lang");\n +var Range = require("../../range").Range;\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +\n +var FoldMode = exports.FoldMode = function(voidElements) {\n + BaseFoldMode.call(this);\n + this.voidElements = voidElements || {};\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.getFoldWidget = function(session, foldStyle, row) {\n + var tag = this._getFirstTagInLine(session, row);\n +\n + if (tag.closing)\n + return foldStyle == "markbeginend" ? "end" : "";\n +\n + if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])\n + return "";\n +\n + if (tag.selfClosing)\n + return "";\n +\n + if (tag.value.indexOf("/" + tag.tagName) !== -1)\n + return "";\n +\n + return "start";\n + };\n + \n + this._getFirstTagInLine = function(session, row) {\n + var tokens = session.getTokens(row);\n + var value = "";\n + for (var i = 0; i < tokens.length; i++) {\n + var token = tokens[i];\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n + value += token.value;\n + else\n + value += lang.stringRepeat(" ", token.value.length);\n + }\n + \n + return this._parseTag(value);\n + };\n +\n + this.tagRe = /^(\\s*)(<?(\\/?)([-_a-zA-Z0-9:!]*)\\s*(\\/?)>?)/;\n + this._parseTag = function(tag) {\n + \n + var match = tag.match(this.tagRe);\n + var column = 0;\n +\n + return {\n + value: tag,\n + match: match ? match[2] : "",\n + closing: match ? !!match[3] : false,\n + selfClosing: match ? !!match[5] || match[2] == "/>" : false,\n + tagName: match ? match[4] : "",\n + column: match[1] ? column + match[1].length : column\n + };\n + };\n + this._readTagForward = function(iterator) {\n + var token = iterator.getCurrentToken();\n + if (!token)\n + return null;\n + \n + var value = "";\n + var start;\n + \n + do {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n + if (!start) {\n + var start = {\n + row: iterator.getCurrentTokenRow(),\n + column: iterator.getCurrentTokenColumn()\n + };\n + }\n + value += token.value;\n + if (value.indexOf(">") !== -1) {\n + var tag = this._parseTag(value);\n + tag.start = start;\n + tag.end = {\n + row: iterator.getCurrentTokenRow(),\n + column: iterator.getCurrentTokenColumn() + token.value.length\n + };\n + iterator.stepForward();\n + return tag;\n + }\n + }\n + } while(token = iterator.stepForward());\n + \n + return null;\n + };\n + \n + this._readTagBackward = function(iterator) {\n + var token = iterator.getCurrentToken();\n + if (!token)\n + return null;\n + \n + var value = "";\n + var end;\n +\n + do {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n + if (!end) {\n + end = {\n + row: iterator.getCurrentTokenRow(),\n + column: iterator.getCurrentTokenColumn() + token.value.length\n + };\n + }\n + value = token.value + value;\n + if (value.indexOf("<") !== -1) {\n + var tag = this._parseTag(value);\n + tag.end = end;\n + tag.start = {\n + row: iterator.getCurrentTokenRow(),\n + column: iterator.getCurrentTokenColumn()\n + };\n + iterator.stepBackward();\n + return tag;\n + }\n + }\n + } while(token = iterator.stepBackward());\n + \n + return null;\n + };\n + \n + this._pop = function(stack, tag) {\n + while (stack.length) {\n + \n + var top = stack[stack.length-1];\n + if (!tag || top.tagName == tag.tagName) {\n + return stack.pop();\n + }\n + else if (this.voidElements[tag.tagName]) {\n + return;\n + }\n + else if (this.voidElements[top.tagName]) {\n + stack.pop();\n + continue;\n + } else {\n + return null;\n + }\n + }\n + };\n + \n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var firstTag = this._getFirstTagInLine(session, row);\n + \n + if (!firstTag.match)\n + return null;\n + \n + var isBackward = firstTag.closing || firstTag.selfClosing;\n + var stack = [];\n + var tag;\n + \n + if (!isBackward) {\n + var iterator = new TokenIterator(session, row, firstTag.column);\n + var start = {\n + row: row,\n + column: firstTag.column + firstTag.tagName.length + 2\n + };\n + while (tag = this._readTagForward(iterator)) {\n + if (tag.selfClosing) {\n + if (!stack.length) {\n + tag.start.column += tag.tagName.length + 2;\n + tag.end.column -= 2;\n + return Range.fromPoints(tag.start, tag.end);\n + } else\n + continue;\n + }\n + \n + if (tag.closing) {\n + this._pop(stack, tag);\n + if (stack.length == 0)\n + return Range.fromPoints(start, tag.start);\n + }\n + else {\n + stack.push(tag)\n + }\n + }\n + }\n + else {\n + var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);\n + var end = {\n + row: row,\n + column: firstTag.column\n + };\n + \n + while (tag = this._readTagBackward(iterator)) {\n + if (tag.selfClosing) {\n + if (!stack.length) {\n + tag.start.column += tag.tagName.length + 2;\n + tag.end.column -= 2;\n + return Range.fromPoints(tag.start, tag.end);\n + } else\n + continue;\n + }\n + \n + if (!tag.closing) {\n + this._pop(stack, tag);\n + if (stack.length == 0) {\n + tag.start.column += tag.tagName.length + 2;\n + return Range.fromPoints(tag.start, end);\n + }\n + }\n + else {\n + stack.push(tag)\n + }\n + }\n + }\n + \n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +\n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n +\n +define(\'ace/mode/handlebars_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/html_highlight_rules\', \'ace/mode/xml_util\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n +var xmlUtil = require("./xml_util");\n +function pop2(currentState, stack) {\n + stack.splice(0, 3);\n + return stack.shift() || "start";\n +}\n +var HandlebarsHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n + var hbs = { \n + regex : "(?={{)",\n + push : "handlebars"\n + }\n + for (var key in this.$rules) {\n + this.$rules[key].unshift(hbs);\n + }\n + this.$rules.handlebars = [{\n + token : "comment.start",\n + regex : "{{!--",\n + push : [{\n + token : "comment.end",\n + regex : "--}}",\n + next : pop2\n + }, {\n + defaultToken : "comment"\n + }]\n + }, {\n + token : "comment.start",\n + regex : "{{!",\n + push : [{\n + token : "comment.end",\n + regex : "}}",\n + next : pop2\n + }, {\n + defaultToken : "comment"\n + }]\n + }, {\n + token : "storage.type.start", // begin section\n + regex : "{{[#\\\\^/&]?",\n + push : [{\n + token : "storage.type.end",\n + regex : "}}",\n + next : pop2\n + }, {\n + token : "variable.parameter",\n + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*"\n + }]\n + }, {\n + token : "support.function", // unescaped variable\n + regex : "{{{",\n + push : [{\n + token : "support.function",\n + regex : "}}}",\n + next : pop2\n + }, {\n + token : "variable.parameter",\n + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*"\n + }]\n + }];\n +\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HandlebarsHighlightRules, HtmlHighlightRules);\n +\n +exports.HandlebarsHighlightRules = HandlebarsHighlightRules;\n +});\n + + +]]></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haskell.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haskell.js.xml index d86e22cb87..23e73e5ab0 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haskell.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haskell.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155558.0</string> </value> + <value> <string>ts83646622.08</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,9 +67,8 @@ var HaskellHighlightRules = require("./haskell_highlight_rules").HaskellHighligh var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new HaskellHighlightRules();\n + this.HighlightRules = HaskellHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -353,7 +352,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>15935</int> </value> + <value> <int>15872</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haxe.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haxe.js.xml index 078e91cb7a..579fb9dd0b 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haxe.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-haxe.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155558.13</string> </value> + <value> <string>ts83646622.07</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -34,7 +34,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new HaxeHighlightRules().getRules());\n + this.HighlightRules = HaxeHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -48,7 +49,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -641,7 +642,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>22824</int> </value> + <value> <int>22805</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html.js.xml index 270b293413..792940b066 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155558.27</string> </value> + <value> <string>ts83646622.06</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>76548</int> </value> + <value> <int>90004</int> </value> </item> <item> <key> <string>title</string> </key> @@ -79,7 +79,7 @@ *\n * ***** END LICENSE BLOCK ***** */\n \n -define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -90,13 +90,13 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n \n var Mode = function() {\n - var highlighter = new HtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -117,6 +117,10 @@ oop.inherits(Mode, TextMode);\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n \n }).call(Mode.prototype);\n \n @@ -137,7 +141,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -152,7 +157,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -258,7 +263,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -333,7 +339,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -378,8 +384,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -466,6 +472,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -983,7 +997,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -997,7 +1011,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1064,152 +1078,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1297,15 +1276,14 @@ oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -1314,6 +1292,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -1327,80 +1306,255 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n token : "text",\n regex : "\\\\s+"\n }, {\n - token : "constant.character.entity",\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n }, {\n - defaultToken : "comment"\n - } ]\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n \n -exports.HtmlHighlightRules = HtmlHighlightRules;\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n });\n \n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n @@ -1483,14 +1637,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1505,7 +1654,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1515,8 +1664,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1546,14 +1695,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1567,6 +1711,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1575,8 +1722,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1593,11 +1740,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1676,6 +1823,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -1752,7 +1901,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -1785,7 +1934,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -1818,7 +1967,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -1932,6 +2081,286 @@ oop.inherits(FoldMode, BaseFoldMode);\n }).call(FoldMode.prototype);\n \n });\n +\n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n ]]></string> </value> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html_completions.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html_completions.js.xml new file mode 100644 index 0000000000..b66639ad7e --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html_completions.js.xml @@ -0,0 +1,353 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.33</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-html_completions.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + * \n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + * \n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n + + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>9812</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html_ruby.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html_ruby.js.xml index c6e19867a5..107b17e422 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html_ruby.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-html_ruby.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155558.37</string> </value> + <value> <string>ts83646622.04</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>93319</int> </value> + <value> <int>106899</int> </value> </item> <item> <key> <string>title</string> </key> @@ -93,9 +93,7 @@ var RubyMode = require("./ruby").Mode;\n \n var Mode = function() {\n HtmlMode.call(this); \n - var highlighter = new HtmlRubyHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules()); \n - this.$embeds = highlighter.getEmbeds();\n + this.HighlightRules = HtmlRubyHighlightRules; \n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode,\n @@ -120,32 +118,42 @@ define(\'ace/mode/html_ruby_highlight_rules\', [\'require\', \'exports\', \'modu \n var HtmlRubyHighlightRules = function() {\n HtmlHighlightRules.call(this);\n - \n - for (var i in this.$rules) {\n - this.$rules[i].unshift({\n +\n + var startRules = [\n + {\n regex: "<%%|%%>",\n token: "constant.language.escape"\n }, {\n - token : "comment.start.erb", \n + token : "comment.start.erb",\n regex : "<%#",\n - push : [{regex: "%>", next: "pop"}]\n + push : [{\n + token : "comment.end.erb",\n + regex: "%>",\n + next: "pop",\n + defaultToken:"comment"\n + }]\n }, {\n token : "support.ruby_tag",\n regex : "<%+(?!>)[-=]?",\n push : "ruby-start"\n - });\n - }\n - \n - this.embedRules(RubyHighlightRules, "ruby-");\n - \n - this.$rules["ruby-start"].unshift({\n - token : "support.ruby_tag",\n - regex : "%>",\n - next : "pop"\n - }, {\n - token: "comment",\n - regex: /#(?:[^%]|%[^>])*/\n - });\n + }\n + ];\n +\n + var endRules = [\n + {\n + token : "support.ruby_tag",\n + regex : "%>",\n + next : "pop"\n + }, {\n + token: "comment",\n + regex: "#(?:[^%]|%[^>])*"\n + }\n + ];\n +\n + for (var key in this.$rules)\n + this.$rules[key].unshift.apply(this.$rules[key], startRules);\n +\n + this.embedRules(RubyHighlightRules, "ruby-", endRules, ["start"]);\n \n this.normalizeRules();\n };\n @@ -156,15 +164,14 @@ define(\'ace/mode/html_ruby_highlight_rules\', [\'require\', \'exports\', \'modu exports.HtmlRubyHighlightRules = HtmlRubyHighlightRules;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -173,6 +180,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -186,78 +194,66 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "text",\n - regex : "\\\\s+"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n - token : "constant.character.entity",\n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ]\n - };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n \n exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n @@ -287,152 +283,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -490,7 +451,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -565,7 +527,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -610,8 +572,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -698,6 +660,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -785,6 +755,193 @@ exports.DocCommentHighlightRules = DocCommentHighlightRules;\n \n });\n \n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n \n @@ -1068,7 +1225,7 @@ oop.inherits(RubyHighlightRules, TextHighlightRules);\n exports.RubyHighlightRules = RubyHighlightRules;\n });\n \n -define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -1079,13 +1236,13 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n \n var Mode = function() {\n - var highlighter = new HtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -1106,6 +1263,10 @@ oop.inherits(Mode, TextMode);\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n \n }).call(Mode.prototype);\n \n @@ -1126,7 +1287,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1141,7 +1303,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -1628,7 +1790,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1642,7 +1804,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1773,14 +1935,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1795,7 +1952,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1805,8 +1962,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1836,14 +1993,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1857,6 +2009,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1865,8 +2020,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1883,11 +2038,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1966,6 +2121,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -2042,7 +2199,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -2075,7 +2232,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -2108,7 +2265,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -2223,6 +2380,286 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n });\n \n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n +\n define(\'ace/mode/ruby\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/ruby_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/range\', \'ace/mode/folding/coffee\'], function(require, exports, module) {\n \n \n @@ -2235,7 +2672,7 @@ var Range = require("../range").Range;\n var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new RubyHighlightRules().getRules());\n + this.HighlightRules = RubyHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new FoldMode();\n };\n @@ -2249,7 +2686,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ini.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ini.js.xml index 9477f75109..8e48c8f6fe 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ini.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ini.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155558.48</string> </value> + <value> <string>ts83646622.02</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -20,7 +20,9 @@ </item> <item> <key> <string>data</string> </key> - <value> <string>/* ***** BEGIN LICENSE BLOCK *****\n + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n @@ -48,26 +50,20 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n - *\n - * Contributor(s):\n - *\n - *\n - *\n * ***** END LICENSE BLOCK ***** */\n \n -define(\'ace/mode/ini\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/ini_highlight_rules\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +define(\'ace/mode/ini\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/ini_highlight_rules\', \'ace/mode/folding/ini\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var TextMode = require("./text").Mode;\n var Tokenizer = require("../tokenizer").Tokenizer;\n var IniHighlightRules = require("./ini_highlight_rules").IniHighlightRules;\n -var FoldMode = require("./folding/cstyle").FoldMode;\n +var FoldMode = require("./folding/ini").FoldMode;\n \n var Mode = function() {\n - var highlighter = new IniHighlightRules();\n + this.HighlightRules = IniHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -85,54 +81,74 @@ define(\'ace/mode/ini_highlight_rules\', [\'require\', \'exports\', \'module\' , var oop = require("../lib/oop");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n \n -var IniHighlightRules = function() {\n +var escapeRe = "\\\\\\\\(?:[\\\\\\\\0abtrn;#=:]|x[a-fA-F\\\\d]{4})";\n \n - this.$rules = { start: \n - [ { token: \'punctuation.definition.comment.ini\',\n - regex: \'#.*\',\n - push_: \n - [ { token: \'comment.line.number-sign.ini\',\n - regex: \'$\',\n - next: \'pop\' },\n - { defaultToken: \'comment.line.number-sign.ini\' } ] },\n - { token: \'punctuation.definition.comment.ini\',\n - regex: \';.*\',\n - push_: \n - [ { token: \'comment.line.semicolon.ini\', regex: \'$\', next: \'pop\' },\n - { defaultToken: \'comment.line.semicolon.ini\' } ] },\n - { token: \n - [ \'keyword.other.definition.ini\',\n - \'text\',\n - \'punctuation.separator.key-value.ini\' ],\n - regex: \'\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)\' },\n - { token: \n - [ \'punctuation.definition.entity.ini\',\n - \'constant.section.group-title.ini\',\n - \'punctuation.definition.entity.ini\' ],\n - regex: \'^(\\\\[)(.*?)(\\\\])\' },\n - { token: \'punctuation.definition.string.begin.ini\',\n - regex: \'\\\'\',\n - push: \n - [ { token: \'punctuation.definition.string.end.ini\',\n - regex: \'\\\'\',\n - next: \'pop\' },\n - { token: \'constant.character.escape.ini\', regex: \'\\\\\\\\.\' },\n - { defaultToken: \'string.quoted.single.ini\' } ] },\n - { token: \'punctuation.definition.string.begin.ini\',\n - regex: \'"\',\n - push: \n - [ { token: \'punctuation.definition.string.end.ini\',\n +var IniHighlightRules = function() {\n + this.$rules = {\n + start: [{\n + token: \'punctuation.definition.comment.ini\',\n + regex: \'#.*\',\n + push_: [{\n + token: \'comment.line.number-sign.ini\',\n + regex: \'$|^\',\n + next: \'pop\'\n + }, {\n + defaultToken: \'comment.line.number-sign.ini\'\n + }]\n + }, {\n + token: \'punctuation.definition.comment.ini\',\n + regex: \';.*\',\n + push_: [{\n + token: \'comment.line.semicolon.ini\',\n + regex: \'$|^\',\n + next: \'pop\'\n + }, {\n + defaultToken: \'comment.line.semicolon.ini\'\n + }]\n + }, {\n + token: [\'keyword.other.definition.ini\', \'text\', \'punctuation.separator.key-value.ini\'],\n + regex: \'\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)\'\n + }, {\n + token: [\'punctuation.definition.entity.ini\', \'constant.section.group-title.ini\', \'punctuation.definition.entity.ini\'],\n + regex: \'^(\\\\[)(.*?)(\\\\])\'\n + }, {\n + token: \'punctuation.definition.string.begin.ini\',\n + regex: "\'",\n + push: [{\n + token: \'punctuation.definition.string.end.ini\',\n + regex: "\'",\n + next: \'pop\'\n + }, {\n + token: "constant.language.escape",\n + regex: escapeRe\n + }, {\n + defaultToken: \'string.quoted.single.ini\'\n + }]\n + }, {\n + token: \'punctuation.definition.string.begin.ini\',\n + regex: \'"\',\n + push: [{\n + token: "constant.language.escape",\n + regex: escapeRe\n + }, {\n + token: \'punctuation.definition.string.end.ini\',\n regex: \'"\',\n - next: \'pop\' },\n - { defaultToken: \'string.quoted.double.ini\' } ] } ] }\n - \n + next: \'pop\'\n + }, {\n + defaultToken: \'string.quoted.double.ini\'\n + }]\n + }]\n + };\n +\n this.normalizeRules();\n };\n \n -IniHighlightRules.metaData = { fileTypes: [ \'ini\', \'conf\' ],\n - keyEquivalent: \'^~I\',\n - name: \'Ini\',\n - scopeName: \'source.ini\' }\n +IniHighlightRules.metaData = {\n + fileTypes: [\'ini\', \'conf\'],\n + keyEquivalent: \'^~I\',\n + name: \'Ini\',\n + scopeName: \'source.ini\'\n +};\n \n \n oop.inherits(IniHighlightRules, TextHighlightRules);\n @@ -140,60 +156,59 @@ oop.inherits(IniHighlightRules, TextHighlightRules);\n exports.IniHighlightRules = IniHighlightRules;\n });\n \n -define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +define(\'ace/mode/folding/ini\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n \n \n var oop = require("../../lib/oop");\n var Range = require("../../range").Range;\n var BaseFoldMode = require("./fold_mode").FoldMode;\n \n -var FoldMode = exports.FoldMode = function(commentRegex) {\n - if (commentRegex) {\n - this.foldingStartMarker = new RegExp(\n - this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n - );\n - this.foldingStopMarker = new RegExp(\n - this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n - );\n - }\n +var FoldMode = exports.FoldMode = function() {\n };\n oop.inherits(FoldMode, BaseFoldMode);\n \n (function() {\n \n - this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n - this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n + this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n \n this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var re = this.foldingStartMarker;\n var line = session.getLine(row);\n - var match = line.match(this.foldingStartMarker);\n - if (match) {\n - var i = match.index;\n -\n - if (match[1])\n - return this.openingBracketBlock(session, match[1], row, i);\n -\n - return session.getCommentFoldRange(row, i + match[0].length, 1);\n + \n + var m = line.match(re);\n + \n + if (!m) return;\n + \n + var startName = m[1] + ".";\n + \n + var startColumn = line.length;\n + var maxRow = session.getLength();\n + var startRow = row;\n + var endRow = row;\n +\n + while (++row < maxRow) {\n + line = session.getLine(row);\n + if (/^\\s*$/.test(line))\n + continue;\n + m = line.match(re);\n + if (m && m[1].lastIndexOf(startName, 0) !== 0)\n + break;\n +\n + endRow = row;\n }\n \n - if (foldStyle !== "markbeginend")\n - return;\n -\n - var match = line.match(this.foldingStopMarker);\n - if (match) {\n - var i = match.index + match[0].length;\n -\n - if (match[1])\n - return this.closingBracketBlock(session, match[1], row, i);\n -\n - return session.getCommentFoldRange(row, i, -1);\n + if (endRow > startRow) {\n + var endColumn = session.getLine(endRow).length;\n + return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n \n }).call(FoldMode.prototype);\n \n });\n -</string> </value> + + +]]></string> </value> </item> <item> <key> <string>precondition</string> </key> @@ -201,7 +216,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>6416</int> </value> + <value> <int>6342</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jack.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jack.js.xml new file mode 100644 index 0000000000..868a01cad8 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jack.js.xml @@ -0,0 +1,650 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.31</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-jack.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + * \n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + * \n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/mode/jack\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/jack_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var HighlightRules = require("./jack_highlight_rules").JackHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + this.HighlightRules = HighlightRules;\n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CstyleBehaviour();\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.lineCommentStart = "--";\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + var indent = this.$getIndent(line);\n +\n + if (state == "start") {\n + var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n + if (match) {\n + indent += tab;\n + }\n + }\n +\n + return indent;\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return this.$outdent.checkOutdent(line, input);\n + };\n +\n + this.autoOutdent = function(state, doc, row) {\n + this.$outdent.autoOutdent(doc, row);\n + };\n +\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/jack_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var JackHighlightRules = function() {\n + this.$rules = {\n + "start" : [\n + {\n + token : "string",\n + regex : \'"\',\n + next : "string2"\n + }, {\n + token : "string",\n + regex : "\'",\n + next : "string1"\n + }, {\n + token : "constant.numeric", // hex\n + regex: "-?0[xX][0-9a-fA-F]+\\\\b"\n + }, {\n + token : "constant.numeric", // float\n + regex : "(?:0|[-+]?[1-9][0-9]*)\\\\b"\n + }, {\n + token : "constant.binary",\n + regex : "<[0-9A-Fa-f][0-9A-Fa-f](\\\\s+[0-9A-Fa-f][0-9A-Fa-f])*>"\n + }, {\n + token : "constant.language.boolean",\n + regex : "(?:true|false)\\\\b"\n + }, {\n + token : "constant.language.null",\n + regex : "null\\\\b"\n + }, {\n + token : "storage.type",\n + regex: "(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\\\b"\n + }, {\n + token : "keyword",\n + regex : "(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\\\b"\n + }, {\n + token : "language.builtin",\n + regex : "(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\\\?|i-any\\\\?|i-collect|i-zip|i-merge|i-each)\\\\b"\n + }, {\n + token : "comment",\n + regex : "--.*$"\n + }, {\n + token : "paren.lparen",\n + regex : "[[({]"\n + }, {\n + token : "paren.rparen",\n + regex : "[\\\\])}]"\n + }, {\n + token : "storage.form",\n + regex : "@[a-z]+"\n + }, {\n + token : "constant.other.symbol",\n + regex : \':+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?\'\n + }, {\n + token : "variable",\n + regex : \'[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?\'\n + }, {\n + token : "keyword.operator",\n + regex : "\\\\|\\\\||\\\\^\\\\^|&&|!=|==|<=|<|>=|>|\\\\+|-|\\\\*|\\\\/|\\\\^|\\\\%|\\\\#|\\\\!"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + }\n + ],\n + "string1" : [\n + {\n + token : "constant.language.escape",\n + regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\'"\\\\\\/bfnrt])/\n + }, {\n + token : "string",\n + regex : "[^\'\\\\\\\\]+"\n + }, {\n + token : "string",\n + regex : "\'",\n + next : "start"\n + }, {\n + token : "string",\n + regex : "",\n + next : "start"\n + }\n + ],\n + "string2" : [\n + {\n + token : "constant.language.escape",\n + regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\'"\\\\\\/bfnrt])/\n + }, {\n + token : "string",\n + regex : \'[^"\\\\\\\\]+\'\n + }, {\n + token : "string",\n + regex : \'"\',\n + next : "start"\n + }, {\n + token : "string",\n + regex : "",\n + next : "start"\n + }\n + ]\n + };\n + \n +};\n +\n +oop.inherits(JackHighlightRules, TextHighlightRules);\n +\n +exports.JackHighlightRules = JackHighlightRules;\n +});\n +\n +define(\'ace/mode/matching_brace_outdent\', [\'require\', \'exports\', \'module\' , \'ace/range\'], function(require, exports, module) {\n +\n +\n +var Range = require("../range").Range;\n +\n +var MatchingBraceOutdent = function() {};\n +\n +(function() {\n +\n + this.checkOutdent = function(line, input) {\n + if (! /^\\s+$/.test(line))\n + return false;\n +\n + return /^\\s*\\}/.test(input);\n + };\n +\n + this.autoOutdent = function(doc, row) {\n + var line = doc.getLine(row);\n + var match = line.match(/^(\\s*\\})/);\n +\n + if (!match) return 0;\n +\n + var column = match[1].length;\n + var openBracePos = doc.findMatchingBracket({row: row, column: column});\n +\n + if (!openBracePos || openBracePos.row == row) return 0;\n +\n + var indent = this.$getIndent(doc.getLine(openBracePos.row));\n + doc.replace(new Range(row, 0, row, column-1), indent);\n + };\n +\n + this.$getIndent = function(line) {\n + return line.match(/^\\s*/)[0];\n + };\n +\n +}).call(MatchingBraceOutdent.prototype);\n +\n +exports.MatchingBraceOutdent = MatchingBraceOutdent;\n +});\n +\n +define(\'ace/mode/behaviour/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/token_iterator\', \'ace/lib/lang\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +var lang = require("../../lib/lang");\n +\n +var SAFE_INSERT_IN_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator"];\n +var SAFE_INSERT_BEFORE_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator", "comment"];\n +\n +\n +var autoInsertedBrackets = 0;\n +var autoInsertedRow = -1;\n +var autoInsertedLineEnd = "";\n +var maybeInsertedBrackets = 0;\n +var maybeInsertedRow = -1;\n +var maybeInsertedLineStart = "";\n +var maybeInsertedLineEnd = "";\n +\n +var CstyleBehaviour = function () {\n + \n + CstyleBehaviour.isSaneInsertion = function(editor, session) {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {\n + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))\n + return false;\n + }\n + iterator.stepForward();\n + return iterator.getCurrentTokenRow() !== cursor.row ||\n + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);\n + };\n + \n + CstyleBehaviour.$matchTokenType = function(token, types) {\n + return types.indexOf(token.type || token) > -1;\n + };\n + \n + CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))\n + autoInsertedBrackets = 0;\n + autoInsertedRow = cursor.row;\n + autoInsertedLineEnd = bracket + line.substr(cursor.column);\n + autoInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isMaybeInsertedClosing(cursor, line))\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = cursor.row;\n + maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n + maybeInsertedLineEnd = line.substr(cursor.column);\n + maybeInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n + return autoInsertedBrackets > 0 &&\n + cursor.row === autoInsertedRow &&\n + bracket === autoInsertedLineEnd[0] &&\n + line.substr(cursor.column) === autoInsertedLineEnd;\n + };\n + \n + CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n + return maybeInsertedBrackets > 0 &&\n + cursor.row === maybeInsertedRow &&\n + line.substr(cursor.column) === maybeInsertedLineEnd &&\n + line.substr(0, cursor.column) == maybeInsertedLineStart;\n + };\n + \n + CstyleBehaviour.popAutoInsertedClosing = function() {\n + autoInsertedLineEnd = autoInsertedLineEnd.substr(1);\n + autoInsertedBrackets--;\n + };\n + \n + CstyleBehaviour.clearMaybeInsertedClosing = function() {\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = -1;\n + };\n +\n + this.add("braces", "insertion", function (state, action, editor, session, text) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (text == \'{\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'{\' + selected + \'}\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + if (/[\\]\\}\\)]/.test(line[cursor.column])) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "}");\n + return {\n + text: \'{}\',\n + selection: [1, 1]\n + };\n + } else {\n + CstyleBehaviour.recordMaybeInsert(editor, session, "{");\n + return {\n + text: \'{\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == \'}\') {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\') {\n + var matching = session.$findOpeningBracket(\'}\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == "\\n" || text == "\\r\\n") {\n + var closing = "";\n + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n + closing = lang.stringRepeat("}", maybeInsertedBrackets);\n + CstyleBehaviour.clearMaybeInsertedClosing();\n + }\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\' || closing !== "") {\n + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, \'}\');\n + if (!openBracePos)\n + return null;\n +\n + var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());\n + var next_indent = this.$getIndent(line);\n +\n + return {\n + text: \'\\n\' + indent + \'\\n\' + next_indent + closing,\n + selection: [1, indent.length, 1, indent.length]\n + };\n + }\n + }\n + });\n +\n + this.add("braces", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'{\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.end.column, range.end.column + 1);\n + if (rightChar == \'}\') {\n + range.end.column++;\n + return range;\n + } else {\n + maybeInsertedBrackets--;\n + }\n + }\n + });\n +\n + this.add("parens", "insertion", function (state, action, editor, session, text) {\n + if (text == \'(\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'(\' + selected + \')\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, ")");\n + return {\n + text: \'()\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \')\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \')\') {\n + var matching = session.$findOpeningBracket(\')\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("parens", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'(\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \')\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("brackets", "insertion", function (state, action, editor, session, text) {\n + if (text == \'[\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'[\' + selected + \']\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "]");\n + return {\n + text: \'[]\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \']\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \']\') {\n + var matching = session.$findOpeningBracket(\']\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("brackets", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'[\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \']\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {\n + if (text == \'"\' || text == "\'") {\n + var quote = text;\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "\'" && selected != \'"\' && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: quote + selected + quote,\n + selection: false\n + };\n + } else {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var leftChar = line.substring(cursor.column-1, cursor.column);\n + if (leftChar == \'\\\\\') {\n + return null;\n + }\n + var tokens = session.getTokens(selection.start.row);\n + var col = 0, token;\n + var quotepos = -1; // Track whether we\'re inside an open quote.\n +\n + for (var x = 0; x < tokens.length; x++) {\n + token = tokens[x];\n + if (token.type == "string") {\n + quotepos = -1;\n + } else if (quotepos < 0) {\n + quotepos = token.value.indexOf(quote);\n + }\n + if ((token.value.length + col) > selection.start.column) {\n + break;\n + }\n + col += tokens[x].value.length;\n + }\n + if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {\n + if (!CstyleBehaviour.isSaneInsertion(editor, session))\n + return;\n + return {\n + text: quote + quote,\n + selection: [1,1]\n + };\n + } else if (token && token.type === "string") {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == quote) {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && (selected == \'"\' || selected == "\'")) {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == selected) {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n +};\n +\n +oop.inherits(CstyleBehaviour, Behaviour);\n +\n +exports.CstyleBehaviour = CstyleBehaviour;\n +});\n +\n +define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Range = require("../../range").Range;\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(commentRegex) {\n + if (commentRegex) {\n + this.foldingStartMarker = new RegExp(\n + this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n + );\n + this.foldingStopMarker = new RegExp(\n + this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n + );\n + }\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n + this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var line = session.getLine(row);\n + var match = line.match(this.foldingStartMarker);\n + if (match) {\n + var i = match.index;\n +\n + if (match[1])\n + return this.openingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i + match[0].length, 1);\n + }\n +\n + if (foldStyle !== "markbeginend")\n + return;\n +\n + var match = line.match(this.foldingStopMarker);\n + if (match) {\n + var i = match.index + match[0].length;\n +\n + if (match[1])\n + return this.closingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i, -1);\n + }\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n + + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>23337</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jade.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jade.js.xml index f793ddb66d..4514346659 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jade.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jade.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155558.63</string> </value> + <value> <string>ts83646622.01</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>84557</int> </value> + <value> <int>88250</int> </value> </item> <item> <key> <string>title</string> </key> @@ -94,14 +94,13 @@ var JadeHighlightRules = require("./jade_highlight_rules").JadeHighlightRules;\n var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - var highlighter = new JadeHighlightRules();\n + this.HighlightRules = JadeHighlightRules;\n \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n this.foldingRules = new FoldMode();\n };\n oop.inherits(Mode, TextMode);\n \n -(function() {\n +(function() { \n \tthis.lineCommentStart = "//";\n }).call(Mode.prototype);\n \n @@ -320,27 +319,74 @@ oop.inherits(JadeHighlightRules, TextHighlightRules);\n exports.JadeHighlightRules = JadeHighlightRules;\n });\n \n -define(\'ace/mode/markdown_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\', \'ace/mode/html_highlight_rules\', \'ace/mode/css_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/markdown_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/text_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\', \'ace/mode/html_highlight_rules\', \'ace/mode/css_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n \n +var escaped = function(ch) {\n + return "(?:[^" + lang.escapeRegExp(ch) + "\\\\\\\\]|\\\\\\\\.)*";\n +}\n +\n function github_embed(tag, prefix) {\n return { // Github style block\n token : "support.function",\n regex : "^```" + tag + "\\\\s*$",\n - next : prefix + "start"\n + push : prefix + "start"\n };\n }\n \n var MarkdownHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n +\n + this.$rules["start"].unshift({\n + token : "empty_line",\n + regex : \'^$\',\n + next: "allowBlock"\n + }, { // h1\n + token: "markup.heading.1",\n + regex: "^=+(?=\\\\s*$)"\n + }, { // h2\n + token: "markup.heading.2",\n + regex: "^\\\\-+(?=\\\\s*$)"\n + }, {\n + token : function(value) {\n + return "markup.heading." + value.length;\n + },\n + regex : /^#{1,6}(?=\\s*[^ #]|\\s+#.)/,\n + next : "header"\n + },\n + github_embed("(?:javascript|js)", "jscode-"),\n + github_embed("xml", "xmlcode-"),\n + github_embed("html", "htmlcode-"),\n + github_embed("css", "csscode-"),\n + { // Github style block\n + token : "support.function",\n + regex : "^```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$",\n + next : "githubblock"\n + }, { // block quote\n + token : "string",\n + regex : "^>[ ].+$",\n + next : "blockquote"\n + }, { // HR * - _\n + token : "constant",\n + regex : "^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$",\n + next: "allowBlock"\n + }, { // list\n + token : "markup.list",\n + regex : "^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+",\n + next : "listblock-start"\n + }, {\n + include : "basic"\n + });\n \n - this.$rules = {\n + this.addRules({\n "basic" : [{\n token : "constant.language.escape",\n regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n @@ -352,15 +398,15 @@ var MarkdownHighlightRules = function() {\n regex : "^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\"][^\\"]+[\\"])?(\\\\s*))$"\n }, { // link by reference\n token : ["text", "string", "text", "constant", "text"],\n - regex : "(\\\\[)((?:[[^\\\\]]*\\\\]|[^\\\\[\\\\]])*)(\\\\][ ]?(?:\\\\n[ ]*)?\\\\[)(.*?)(\\\\])"\n + regex : "(\\\\[)(" + escaped("]") + ")(\\\\]\\s*\\\\[)("+ escaped("]") + ")(\\\\])"\n }, { // link by url\n token : ["text", "string", "text", "markup.underline", "string", "text"],\n - regex : "(\\\\[)"+\n - "(\\\\[[^\\\\]]*\\\\]|[^\\\\[\\\\]]*)"+\n - "(\\\\]\\\\([ \\\\t]*)"+\n - "(<?(?:(?:[^\\\\(]*?\\\\([^\\\\)]*?\\\\)\\\\S*?)|(?:.*?))>?)"+\n - "((?:[ \\t]*\\"(?:.*?)\\"[ \\\\t]*)?)"+\n - "(\\\\))"\n + regex : "(\\\\[)(" + // [\n + escaped("]") + // link text\n + ")(\\\\]\\\\()"+ // ](\n + \'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^"]))*)\' + // href\n + \'(\\\\s*"\' + escaped(\'"\') + \'"\\\\s*)?\' + // "title"\n + "(\\\\))" // )\n }, { // strong ** __\n token : "string",\n regex : "([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)"\n @@ -380,54 +426,13 @@ var MarkdownHighlightRules = function() {\n {token : "empty", regex : "", next : "start"}\n ],\n \n - "start" : [{\n - token : "empty_line",\n - regex : \'^$\',\n - next: "allowBlock"\n - }, { // h1\n - token: "markup.heading.1",\n - regex: "^=+(?=\\\\s*$)"\n - }, { // h2\n - token: "markup.heading.2",\n - regex: "^\\\\-+(?=\\\\s*$)"\n - }, {\n - token : function(value) {\n - return "markup.heading." + value.length;\n - },\n - regex : /^#{1,6}(?=\\s*[^ #]|\\s+#.)/,\n - next : "header"\n - },\n - github_embed("(?:javascript|js)", "js-"),\n - github_embed("xml", "xml-"),\n - github_embed("html", "html-"),\n - github_embed("css", "css-"),\n - { // Github style block\n - token : "support.function",\n - regex : "^```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$",\n - next : "githubblock"\n - }, { // block quote\n - token : "string",\n - regex : "^>[ ].+$",\n - next : "blockquote"\n - }, { // HR * - _\n - token : "constant",\n - regex : "^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$",\n - next: "allowBlock"\n - }, { // list\n - token : "markup.list",\n - regex : "^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+",\n - next : "listblock-start"\n - }, {\n - include : "basic"\n - }],\n - \n "header" : [{\n regex: "$",\n next : "start"\n }, {\n include: "basic"\n }, {\n - defaultToken : "markup.heading"\n + defaultToken : "heading"\n } ],\n \n "listblock-start" : [{\n @@ -447,7 +452,7 @@ var MarkdownHighlightRules = function() {\n }, {\n include : "basic", noEscape: true\n }, {\n - defaultToken : "markup.list"\n + defaultToken : "list"\n } ],\n \n "blockquote" : [ { // BLockquotes only escape on blank lines.\n @@ -467,39 +472,31 @@ var MarkdownHighlightRules = function() {\n token : "support.function",\n regex : ".+"\n } ]\n - };\n + });\n \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n + this.embedRules(JavaScriptHighlightRules, "jscode-", [{\n token : "support.function",\n regex : "^```",\n - next : "start"\n + next : "pop"\n }]);\n \n - this.embedRules(HtmlHighlightRules, "html-", [{\n + this.embedRules(HtmlHighlightRules, "htmlcode-", [{\n token : "support.function",\n regex : "^```",\n - next : "start"\n + next : "pop"\n }]);\n \n - this.embedRules(CssHighlightRules, "css-", [{\n + this.embedRules(CssHighlightRules, "csscode-", [{\n token : "support.function",\n regex : "^```",\n - next : "start"\n + next : "pop"\n }]);\n \n - this.embedRules(XmlHighlightRules, "xml-", [{\n + this.embedRules(XmlHighlightRules, "xmlcode-", [{\n token : "support.function",\n regex : "^```",\n - next : "start"\n + next : "pop"\n }]);\n -\n - var html = new HtmlHighlightRules().getRules();\n - for (var i in html) {\n - if (this.$rules[i])\n - this.$rules[i] = this.$rules[i].concat(html[i]);\n - else\n - this.$rules[i] = html[i];\n - }\n \n this.normalizeRules();\n };\n @@ -557,7 +554,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -632,7 +630,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -677,8 +675,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -765,6 +763,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -859,36 +865,181 @@ var oop = require("../lib/oop");\n var xmlUtil = require("./xml_util");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n \n -var XmlHighlightRules = function() {\n +var XmlHighlightRules = function(normalize) {\n this.$rules = {\n start : [\n - {token : "text", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n - {token : "xml-pe", regex : "<\\\\?.*?\\\\?>"},\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n {token : "comment", regex : "<\\\\!--", next : "comment"},\n - {token : "xml-pe", regex : "<\\\\!.*?>"},\n - {token : "meta.tag", regex : "<\\\\/?", next : "tag"},\n - {token : "text", regex : "\\\\s+"},\n {\n - token : "constant.character.entity", \n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n - }\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n ],\n - \n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n cdata : [\n - {token : "text", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n {token : "text", regex : "\\\\s+"},\n {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n ],\n \n comment : [\n - {token : "comment", regex : ".*?-->", next : "start"},\n - {token : "comment", regex : ".+"}\n - ]\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start");\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n oop.inherits(XmlHighlightRules, TextHighlightRules);\n \n exports.XmlHighlightRules = XmlHighlightRules;\n @@ -964,15 +1115,14 @@ exports.tag = function(states, name, nextState, tagMap) {\n \n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -981,6 +1131,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -994,78 +1145,66 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "text",\n - regex : "\\\\s+"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n - token : "constant.character.entity",\n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ]\n - };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n \n exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n @@ -1095,152 +1234,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-java.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-java.js.xml index da3b30b11a..a26e284b67 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-java.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-java.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155558.74</string> </value> + <value> <string>ts83646621.99</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -32,8 +32,7 @@ var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules;\n \n var Mode = function() {\n JavaScriptMode.call(this);\n - \n - this.$tokenizer = new Tokenizer(new JavaHighlightRules().getRules());\n + this.HighlightRules = JavaHighlightRules;\n };\n oop.inherits(Mode, JavaScriptMode);\n \n @@ -62,7 +61,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -77,7 +77,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -183,7 +183,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -258,7 +259,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -303,8 +304,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -391,6 +392,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1028,7 +1037,7 @@ exports.JavaHighlightRules = JavaHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>42256</int> </value> + <value> <int>42555</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-javascript.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-javascript.js.xml index 7b94c6b620..681fdfb4ff 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-javascript.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-javascript.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155558.88</string> </value> + <value> <string>ts83646621.97</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -66,7 +66,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -81,7 +82,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -187,7 +188,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -262,7 +264,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -307,8 +309,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -395,6 +397,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -908,7 +918,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>37963</int> </value> + <value> <int>38295</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-json.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-json.js.xml index daa4c2b9b0..1b61bcf4ae 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-json.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-json.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155559.13</string> </value> + <value> <string>ts83646621.96</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -65,7 +65,7 @@ var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n var WorkerClient = require("../worker/worker_client").WorkerClient;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new HighlightRules().getRules());\n + this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -610,7 +610,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>22267</int> </value> + <value> <int>22239</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsoniq.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsoniq.js.xml index 6822b70732..fb2561d08b 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsoniq.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsoniq.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155559.02</string> </value> + <value> <string>ts83646621.94</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>329346</int> </value> + <value> <int>329317</int> </value> </item> <item> <key> <string>title</string> </key> @@ -1948,7 +1948,26 @@ JSONiqTokenizer.MAP0 =\n ];\n \n JSONiqTokenizer.MAP1 =\n -[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n +[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 21</string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>4, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n ];\n \n JSONiqTokenizer.MAP2 =\n @@ -1960,7 +1979,64 @@ JSONiqTokenizer.INITIAL =\n ];\n \n JSONiqTokenizer.TRANSITION =\n -[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22874, 18847, 17152, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 17365, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 17470, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 18199, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 17890, 17922, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18065, 36544, 18632, 18081, 18098, 18114, 18159, 18185, 18215, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17756, 18816, 18429, 18445, 18143, 17393, 18500, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18590, 21686, 17152, 19027, 19252, 17687, 19027, 28677, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 17365, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 17470, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 18199, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 17890, 17922, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18065, 36544, 18632, 18081, 18098, 18114, 18159, 18185, 18215, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17756, 18816, 18429, 18445, 18143, 17393, 18500, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20083, 18847, 18648, 19027, 19252, 21242, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18774, 18789, 18805, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18832, 22889, 18925, 19027, 19252, 17569, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18956, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 19073, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 18972, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21818, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21671, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22395, 20098, 18731, 19027, 19252, 17687, 19027, 17173, 23525, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 18129, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 20746, 19130, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19043, 18847, 18620, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19100, 22410, 19006, 19027, 19252, 17687, 19027, 19084, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21967, 21982, 19006, 19027, 19252, 17687, 19027, 18701, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22380, 18847, 19006, 19027, 19252, 30659, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 19157, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 19299, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 19191, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21758, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 19237, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21626, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19268, 19284, 19326, 18482, 27869, 30509, 24384, 31417, 23323, 18482, 19370, 18482, 18484, 27202, 19389, 27202, 27202, 19411, 24384, 34295, 24384, 24384, 25485, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 28530, 19459, 24384, 24384, 24384, 24384, 24017, 18036, 24041, 18482, 18482, 18482, 18484, 19487, 27202, 27202, 27202, 27202, 19503, 35523, 19539, 24384, 24384, 24384, 19647, 18482, 35623, 18482, 18482, 23052, 27202, 19557, 27202, 27202, 30764, 23993, 24384, 19579, 24384, 24384, 26758, 18482, 18482, 19346, 27867, 27202, 27202, 19599, 17590, 23998, 24384, 24384, 19619, 25683, 18482, 18482, 28511, 27202, 27203, 23997, 19639, 19887, 28419, 18902, 18483, 19663, 27202, 24325, 35844, 19887, 30991, 19713, 19395, 19736, 22259, 19754, 22073, 19770, 35154, 19795, 19816, 19836, 19859, 25794, 34248, 24116, 19720, 19875, 30988, 23482, 30981, 28304, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21743, 18847, 19006, 19027, 19252, 17431, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22365, 18847, 19907, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21641, 18847, 19326, 18482, 27869, 30544, 24384, 29176, 21442, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 19935, 24384, 24384, 24384, 24384, 32316, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 28530, 19965, 24384, 24384, 24384, 24384, 31473, 18475, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19988, 24384, 24384, 24384, 24384, 24384, 33654, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 29523, 29939, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 20017, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20068, 19058, 20158, 20367, 20884, 17944, 20276, 20853, 25651, 20604, 20460, 20185, 20209, 17189, 17208, 17281, 17675, 20232, 20273, 20295, 20338, 22456, 20777, 20600, 21329, 20635, 20365, 20937, 21207, 17292, 17421, 21157, 17192, 21217, 22425, 20279, 25549, 22436, 20276, 20383, 18983, 20421, 20446, 21317, 21051, 20476, 20322, 20663, 20490, 17543, 17559, 17585, 22463, 20540, 19523, 20246, 20556, 20257, 20430, 20585, 20620, 20193, 20651, 17661, 18368, 17703, 17730, 17772, 19513, 20679, 20692, 22446, 21027, 21097, 18990, 21111, 20708, 20736, 17744, 17795, 17874, 17590, 25536, 20349, 20762, 20812, 20169, 20828, 21376, 17714, 17976, 18021, 18560, 20844, 20569, 25560, 20869, 20900, 18114, 18159, 20916, 20953, 21013, 21043, 21067, 18281, 21083, 18574, 21127, 21143, 21181, 20515, 20930, 20883, 20504, 21197, 21233, 21258, 20524, 20216, 17405, 21270, 21286, 21302, 20720, 20310, 21345, 21361, 21392, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21952, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 21427, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 21479, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 36500, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 28667, 21921, 17617, 36472, 18265, 17237, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 21550, 21509, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 21535, 30636, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21773, 18847, 21587, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21611, 18847, 19006, 19027, 19252, 18169, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21728, 19115, 21878, 19027, 19252, 17687, 19027, 19310, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 17379, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 21906, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 18322, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21937, 18605, 19006, 19027, 19252, 22018, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21656, 21833, 19006, 19027, 19252, 17687, 19027, 21519, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 31473, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 32253, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 22228, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 31473, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 31644, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 31473, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 33557, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 34068, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22245, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 31473, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22290, 18847, 22034, 18482, 27869, 34957, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 34436, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22320, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 27077, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 19919, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21803, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22275, 22479, 19006, 19027, 19252, 17687, 19027, 19141, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 22510, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22574, 18847, 22954, 22970, 27597, 22986, 23002, 23033, 22062, 18482, 18482, 18482, 23049, 27202, 27202, 27202, 23068, 22096, 24384, 24384, 24384, 23088, 31359, 31082, 19693, 18482, 28112, 28225, 19443, 35045, 27202, 27202, 23108, 23139, 23155, 23178, 24384, 24384, 23212, 35330, 31659, 23228, 18482, 23256, 23274, 27795, 26712, 23293, 35214, 34879, 33340, 23312, 18235, 23359, 32708, 23949, 24384, 23380, 35255, 23429, 18482, 33884, 23408, 23448, 27202, 27202, 23498, 23518, 21406, 23541, 24384, 24384, 23570, 26114, 23601, 23623, 18482, 33444, 23651, 32875, 27202, 22171, 18862, 23702, 36589, 24384, 18481, 23731, 32601, 27202, 23750, 23768, 20047, 32969, 24367, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 23784, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 28217, 31795, 23804, 26925, 34916, 23831, 26501, 25793, 23859, 23895, 23482, 30981, 22080, 19438, 27956, 19678, 29812, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22589, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 28902, 25794, 27202, 27202, 27202, 34019, 23914, 22148, 24384, 24384, 24384, 28393, 23930, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 26591, 18482, 18482, 18482, 31585, 23965, 27202, 27202, 27202, 23986, 22185, 24014, 24384, 24384, 24384, 24033, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 26504, 24057, 24107, 24132, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22604, 18847, 22034, 19697, 27869, 24166, 24384, 24182, 24198, 26600, 18482, 18482, 18484, 24233, 24249, 27202, 27202, 22096, 24268, 24284, 24384, 24384, 30621, 19800, 35427, 35999, 32609, 18482, 25794, 24303, 28959, 23752, 27202, 35010, 22148, 24341, 32040, 26837, 24383, 31473, 31659, 18482, 18482, 18482, 24784, 18484, 27202, 27202, 27202, 27202, 24401, 19503, 24384, 24384, 24384, 24384, 20134, 31154, 18482, 18482, 18482, 27845, 23052, 27202, 27202, 33502, 27202, 30764, 21406, 24384, 24384, 22938, 24384, 26114, 18482, 36246, 18482, 27867, 27202, 24423, 27202, 22171, 22934, 24384, 24442, 24384, 36762, 28438, 18482, 34466, 34508, 35771, 24461, 24385, 24477, 25677, 18482, 36220, 27202, 27202, 24498, 30954, 23715, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 24521, 30990, 27868, 34251, 30090, 23343, 24546, 19856, 25793, 19779, 30988, 23482, 26152, 22080, 19438, 29824, 24562, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22619, 18847, 22034, 25767, 22132, 25325, 23162, 29176, 24597, 24091, 23607, 24656, 26122, 24680, 24426, 24696, 28551, 22096, 24731, 24445, 24747, 23364, 30621, 18482, 18482, 18482, 18482, 24781, 25794, 27202, 27202, 27202, 34210, 35010, 22148, 24384, 24384, 24384, 33259, 31473, 22525, 24087, 24213, 18482, 18482, 34908, 24800, 30419, 27202, 27202, 32418, 19503, 29781, 35065, 24384, 24384, 19891, 31154, 24835, 18482, 18482, 24854, 29214, 27202, 27202, 32006, 27202, 30764, 35344, 24384, 24384, 31544, 24384, 26114, 33098, 27814, 27002, 27867, 34668, 25625, 24871, 22171, 22934, 19214, 34531, 24889, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 33615, 27202, 27202, 24907, 24930, 23554, 30991, 18484, 27202, 31802, 22199, 19466, 23052, 23296, 19847, 30877, 31015, 24955, 19859, 24983, 34248, 30871, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 24999, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22634, 18847, 25024, 25040, 31293, 25056, 25072, 25088, 22062, 34734, 24217, 36253, 34808, 32637, 25104, 23072, 32848, 22245, 36623, 25120, 30679, 27356, 30621, 25136, 26455, 25174, 25208, 22540, 23240, 25224, 25240, 25256, 25306, 25341, 25357, 25418, 25446, 25470, 26739, 25522, 31659, 23635, 25576, 27398, 25593, 28592, 25945, 25617, 27202, 32546, 27295, 25641, 25850, 25667, 24384, 34758, 25699, 25716, 22552, 27787, 30221, 25756, 25789, 25810, 25828, 28333, 28988, 30764, 21493, 33405, 25848, 25866, 25904, 26114, 31227, 26677, 30167, 27867, 25941, 25961, 27202, 22171, 22934, 25977, 25997, 24384, 23394, 27775, 25740, 25270, 26013, 26048, 26064, 26104, 26138, 26178, 26211, 26230, 26247, 30500, 26380, 26282, 28388, 30991, 33711, 27202, 33645, 26324, 36716, 26353, 26374, 35300, 30990, 26396, 26415, 30927, 26358, 33832, 26442, 26471, 26487, 26520, 23482, 33146, 26539, 26555, 27956, 31266, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22649, 18847, 26576, 26189, 26616, 25325, 26643, 29176, 22062, 26669, 18482, 18482, 18484, 26693, 27202, 27202, 27202, 22096, 26728, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 26782, 25794, 27202, 27202, 27202, 26258, 35010, 22148, 24384, 24384, 24384, 21571, 31473, 31659, 18482, 18482, 33949, 18482, 18484, 27202, 27202, 25812, 27202, 27202, 19503, 24384, 24384, 24384, 26800, 24384, 31154, 18482, 18482, 18482, 35570, 23052, 27202, 27202, 27202, 26817, 30764, 21406, 24384, 24384, 24384, 26836, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 31882, 18483, 35699, 27202, 19738, 26853, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 26913, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 24967, 31061, 19438, 26953, 27663, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22664, 18847, 26990, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 23017, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 27024, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 27047, 18482, 18484, 27202, 27202, 27331, 27202, 27202, 27066, 24384, 24384, 29025, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 33957, 27867, 27202, 27202, 27093, 17590, 23998, 24384, 24384, 27114, 27135, 36322, 27153, 27201, 27219, 28359, 18229, 34780, 34405, 27235, 35972, 27268, 27293, 27311, 36040, 33984, 20980, 31851, 21453, 30535, 27347, 32520, 27372, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 26337, 30118, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 27397, 27414, 27436, 27452, 27473, 22062, 18482, 18482, 30171, 18484, 27202, 27202, 27982, 27202, 22096, 24384, 24384, 25700, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 34013, 27202, 27202, 27202, 27202, 29731, 22148, 24384, 24384, 24384, 24384, 27119, 31659, 27489, 18482, 18482, 18482, 18484, 27185, 27202, 27202, 27202, 27202, 19503, 27457, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 27050, 23052, 27202, 27202, 27202, 32469, 30764, 23993, 24384, 24384, 24384, 34982, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 20796, 27202, 29362, 22110, 33940, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22679, 18847, 22034, 27508, 27528, 27553, 35182, 27569, 22062, 29693, 26300, 23258, 27585, 24715, 27613, 27202, 27648, 22096, 36597, 27698, 24384, 27733, 18877, 18482, 27811, 18482, 27830, 22046, 27865, 32194, 27202, 25158, 27885, 27913, 22148, 29458, 24384, 29977, 34392, 26750, 27763, 26889, 18482, 18482, 27252, 29886, 27929, 27202, 27202, 27202, 27981, 27998, 28024, 28045, 24384, 24384, 28062, 28081, 28128, 25506, 28145, 26088, 28160, 27202, 28173, 24640, 28189, 30764, 31496, 24384, 28205, 34154, 36166, 24939, 28241, 28259, 28283, 21463, 33034, 28320, 28349, 17590, 20967, 23092, 28375, 28409, 28095, 28435, 28454, 28474, 28509, 28527, 20001, 33682, 25879, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30272, 28267, 28546, 28567, 19425, 28583, 23052, 23296, 19847, 19471, 28608, 28653, 31075, 25794, 34248, 19856, 25793, 19779, 29644, 35950, 30318, 22080, 19438, 27956, 23123, 28693, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 22494, 18482, 18482, 18482, 18482, 18484, 25283, 27202, 27202, 27202, 27202, 19503, 29397, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22694, 18847, 28740, 28775, 28810, 28834, 28850, 28873, 28889, 24142, 28936, 31945, 36329, 25290, 28954, 27632, 28975, 29004, 24505, 29020, 25454, 29041, 23017, 27512, 29083, 29103, 30721, 18482, 23478, 29123, 24819, 27202, 29148, 28920, 27024, 29166, 23196, 24384, 29192, 35529, 31659, 18482, 18482, 25601, 32589, 29211, 27202, 27202, 31434, 30700, 29230, 27066, 24384, 24384, 24384, 29255, 29306, 19647, 18482, 33383, 18482, 18482, 23052, 27202, 29333, 27202, 27202, 30764, 23993, 35925, 24384, 24384, 24384, 27717, 36123, 18482, 18482, 29350, 29413, 27202, 35642, 17590, 21411, 29432, 24384, 25981, 18481, 33866, 18482, 27202, 26967, 27203, 23997, 32729, 19887, 25677, 18482, 26897, 27202, 27202, 29451, 23870, 24354, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 31737, 19859, 25794, 34248, 19856, 29474, 29539, 29283, 29581, 29637, 22080, 32533, 29501, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22709, 18847, 22034, 29660, 29512, 25325, 33242, 29176, 29682, 27245, 18482, 29709, 33286, 26974, 27202, 29725, 29747, 22096, 19221, 24384, 32702, 29772, 18877, 26784, 33892, 28458, 18482, 18482, 25794, 29797, 27202, 29840, 27202, 35010, 22148, 35817, 24384, 29859, 24384, 24017, 36756, 25192, 18482, 18482, 29879, 18484, 27202, 29902, 27202, 26032, 27202, 29925, 24384, 29960, 24384, 33594, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 29239, 29993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 31665, 18482, 18482, 19603, 27202, 27203, 23997, 30013, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19949, 19466, 36661, 19563, 19847, 30029, 30128, 30062, 19859, 25794, 30078, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 30106, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22724, 18847, 30152, 30187, 30237, 30288, 30304, 30344, 22062, 35616, 32797, 25773, 18484, 29909, 34096, 26820, 27202, 22096, 24914, 23189, 29195, 24384, 18877, 34444, 30360, 18482, 18482, 18482, 23413, 24707, 27202, 27202, 27202, 35010, 30378, 34990, 24384, 24384, 24384, 24017, 29554, 18482, 18482, 27137, 18482, 31281, 30394, 27202, 27202, 30413, 30566, 19503, 30435, 24384, 24384, 29969, 35678, 19647, 28759, 30455, 35459, 35606, 23052, 28724, 30490, 30525, 30560, 30764, 23993, 20123, 30582, 30606, 30675, 26291, 33426, 28938, 27682, 30695, 23675, 33466, 28493, 17590, 23944, 20405, 34338, 20997, 32331, 26308, 30716, 30737, 24315, 30756, 21563, 36372, 30787, 26653, 24611, 33177, 32448, 30814, 31804, 25430, 25917, 26523, 18484, 28818, 31802, 29269, 19466, 28297, 34240, 23815, 26076, 30842, 30858, 32115, 30893, 30915, 32757, 25793, 30943, 30988, 23482, 30981, 30970, 31007, 27956, 19678, 29489, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22739, 18847, 31031, 31047, 32397, 31098, 31114, 31170, 22062, 18482, 29565, 35577, 36725, 27202, 33216, 31186, 24407, 22096, 24384, 20142, 31202, 34301, 27748, 31218, 33388, 27166, 18482, 29087, 27277, 27202, 31251, 31309, 27202, 31328, 31344, 24384, 31375, 31391, 24384, 31410, 31659, 18482, 36130, 32801, 18482, 18484, 27202, 27202, 31433, 31450, 27202, 19503, 24384, 24384, 31470, 33588, 24384, 32977, 18482, 18482, 18482, 18482, 30038, 27202, 27202, 27202, 27202, 31489, 32244, 24384, 24384, 24384, 24384, 31512, 18482, 28755, 18482, 24634, 35732, 27202, 27202, 28637, 31538, 35788, 24384, 24384, 19337, 31986, 18482, 33208, 25316, 27203, 29997, 29863, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 31560, 19887, 31601, 32369, 33316, 30136, 31629, 19972, 31681, 31726, 31753, 31781, 30046, 31820, 31847, 25794, 34282, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 31867, 30252, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22754, 18847, 22034, 18909, 30474, 31902, 24287, 31918, 31934, 32767, 35262, 27008, 29621, 34103, 19820, 29416, 33323, 22096, 27031, 30439, 29435, 28857, 29596, 18482, 18482, 18482, 31961, 18482, 25794, 27202, 27202, 35038, 27202, 35010, 22148, 24384, 24384, 29389, 24384, 24017, 31979, 18482, 26937, 18482, 18482, 18484, 27202, 31454, 32002, 27202, 27202, 32022, 24384, 33015, 32056, 24384, 24384, 33690, 18482, 18482, 33119, 18482, 23052, 27202, 27202, 27624, 27202, 29756, 32078, 24384, 24384, 34332, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 36691, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 31710, 22155, 33181, 24252, 32103, 30990, 27868, 34251, 19859, 25794, 34248, 30265, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 32138, 32166, 32186, 30826, 33252, 29067, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 23585, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 32210, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 32233, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 33857, 18483, 36057, 27202, 19738, 35289, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22769, 18847, 32269, 31613, 34604, 32285, 32301, 32351, 22062, 18482, 32367, 19354, 32385, 27202, 32413, 27098, 32434, 22096, 24384, 32485, 20052, 32506, 18877, 25396, 23734, 18482, 18482, 32562, 32625, 27202, 32653, 27202, 23664, 32673, 32689, 24384, 32724, 24384, 25888, 32745, 34706, 18482, 27381, 32783, 24577, 24838, 32817, 24873, 32838, 32864, 27202, 32899, 32934, 24384, 32957, 29317, 24384, 30798, 26214, 27678, 33875, 18482, 23052, 36352, 27202, 32993, 27202, 30764, 23993, 32087, 24384, 33013, 24384, 35853, 18482, 18482, 30362, 27965, 27202, 27202, 33754, 17590, 20112, 24384, 24384, 34576, 20792, 18482, 18482, 33031, 27202, 27203, 36159, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 34554, 24150, 33050, 33080, 33114, 27868, 34251, 23843, 26560, 31696, 19856, 25793, 19779, 30988, 23482, 30981, 33135, 22123, 27956, 23463, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22784, 18847, 33162, 28106, 33197, 25325, 33232, 29176, 22062, 33275, 35433, 18482, 18484, 33302, 26399, 33339, 27202, 22096, 33356, 28065, 33404, 24384, 18877, 22229, 18482, 33421, 18482, 18482, 33442, 33460, 24811, 27202, 27202, 26627, 22148, 24758, 35190, 24384, 24384, 25925, 29611, 18482, 18482, 29290, 25186, 33482, 33501, 27202, 27202, 33518, 36276, 19503, 33554, 24384, 24384, 33573, 32490, 19647, 18482, 18482, 31235, 33610, 23052, 27202, 27202, 33631, 27202, 30764, 23993, 24384, 24384, 33670, 24384, 26862, 27492, 18482, 33706, 27867, 32883, 34639, 27202, 17590, 32036, 24765, 23788, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 33727, 36097, 19887, 25677, 18482, 23334, 27202, 29150, 19738, 23870, 35357, 30328, 18484, 33748, 34675, 33770, 19466, 34050, 33824, 31831, 30990, 27868, 34251, 33848, 28913, 33908, 19856, 30469, 33973, 25385, 36033, 34000, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22799, 18847, 34035, 32576, 34084, 34119, 34135, 34170, 34186, 32150, 36005, 31522, 31886, 34202, 34226, 34267, 29334, 34317, 34354, 34378, 34421, 26801, 18877, 26195, 29666, 25402, 18482, 35091, 25794, 34460, 34482, 34504, 25832, 35010, 22148, 34524, 34547, 34570, 19623, 24017, 36654, 35111, 24664, 18482, 32335, 34592, 31312, 34620, 34636, 27202, 34655, 34691, 28046, 34750, 34774, 24384, 33785, 19647, 34796, 32170, 34844, 24581, 33485, 26704, 34828, 34860, 35493, 29132, 36704, 33800, 35368, 32941, 34146, 26758, 34895, 18482, 18482, 34932, 34948, 27202, 32997, 17590, 29944, 34973, 24384, 36296, 25500, 30202, 35875, 35006, 35026, 26266, 20396, 31146, 35061, 35081, 35127, 24623, 28484, 27897, 19738, 35143, 35170, 26162, 28794, 35206, 35230, 33064, 35245, 23052, 23296, 29054, 30990, 27868, 34251, 19859, 25794, 34248, 24530, 25147, 35278, 31765, 35316, 33370, 22080, 19438, 27956, 24072, 28623, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22814, 18847, 22034, 34720, 34059, 35384, 20989, 35400, 35416, 35449, 18482, 18482, 23432, 35475, 27202, 27202, 27202, 35509, 31127, 24384, 24384, 24384, 35545, 18482, 26871, 35101, 35593, 24855, 25794, 30397, 23502, 26024, 35639, 35658, 22148, 19541, 19583, 30590, 35674, 27709, 35560, 29107, 18482, 18482, 18482, 18484, 27202, 35694, 27202, 27202, 27202, 35715, 24384, 36580, 24384, 24384, 24384, 19647, 30215, 18482, 18482, 18482, 23052, 35731, 27202, 27202, 27202, 27537, 22904, 24384, 24384, 24384, 24384, 23879, 35748, 18482, 18482, 25008, 35770, 27202, 27202, 17590, 20031, 35787, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 23898, 18484, 34488, 31802, 25371, 19466, 23052, 23296, 26426, 30990, 27868, 34251, 19859, 25794, 35804, 19856, 27178, 35833, 33092, 23482, 30981, 22080, 22212, 28705, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22829, 18847, 22034, 35869, 28716, 25325, 31137, 29176, 22062, 26766, 18482, 22558, 18484, 23970, 27202, 29843, 27202, 22096, 33732, 24384, 31394, 24384, 18877, 18482, 18482, 26880, 18482, 18482, 25794, 27202, 30740, 27202, 27202, 35010, 22148, 24384, 24891, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22844, 18847, 22034, 27849, 27869, 35891, 24384, 35907, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 31575, 18482, 18482, 18482, 18482, 26231, 27202, 27202, 27202, 27202, 27202, 19503, 35923, 24384, 24384, 24384, 24384, 19647, 18482, 28129, 18482, 18482, 35941, 27202, 32822, 27202, 32657, 30764, 23993, 24384, 32217, 24384, 32062, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22859, 18847, 22034, 35966, 34820, 25325, 33931, 29176, 35988, 18482, 23277, 18482, 36021, 27202, 27202, 36056, 36073, 22096, 24384, 24384, 36096, 33921, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 36113, 18482, 25577, 18482, 18482, 18484, 27202, 27202, 27324, 27202, 27202, 36146, 24384, 24384, 34362, 24384, 24384, 19647, 28243, 18482, 18482, 18482, 23052, 30899, 27202, 27202, 27202, 23686, 23993, 33808, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 19373, 27869, 36182, 24384, 36198, 22062, 18482, 18482, 18482, 18049, 27202, 27202, 27202, 35485, 22096, 24384, 24384, 24384, 29371, 18877, 18482, 36214, 18482, 28788, 18482, 25794, 34872, 27202, 27420, 27202, 35010, 22148, 29380, 24384, 24482, 24384, 24017, 31659, 18482, 36236, 18482, 18482, 18484, 27202, 36080, 27202, 27202, 27202, 19503, 24384, 28029, 24384, 24384, 24384, 19647, 18482, 18482, 32122, 18482, 35754, 27202, 27202, 36269, 27202, 33531, 23993, 24384, 24384, 36292, 24384, 36312, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 25730, 18482, 18482, 36345, 27202, 27203, 19203, 24385, 19887, 25677, 31963, 18483, 27202, 32462, 19738, 23870, 36368, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22350, 18847, 36388, 19027, 19252, 17687, 36433, 17173, 17595, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 36452, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 17682, 21701, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22335, 18847, 19006, 19027, 19252, 17687, 19027, 21712, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21788, 18847, 36488, 19027, 19252, 17687, 19027, 17173, 17779, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17810, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21165, 21997, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21803, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 36516, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21803, 18847, 19326, 18482, 27869, 30764, 24384, 29176, 28008, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 36566, 24384, 24384, 24384, 24384, 22919, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 28530, 36613, 24384, 24384, 24384, 24384, 24017, 18892, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36639, 36677, 18731, 19027, 19252, 17687, 19027, 17454, 17595, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17223, 17308, 17327, 17346, 18937, 36741, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 17682, 21701, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45\n +[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22874, 18847, 17152, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 17365, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 17470, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 18199, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 17890, 17922, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18065, 36544, 18632, 18081, 18098, 18114, 18159, 18185, 18215, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17756, 18816, 18429, 18445, 18143, 17393, 18500, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18590, 21686, 17152, 19027, 19252, 17687, 19027, 28677, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 17365, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 17470, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 18199, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 17890, 17922, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18065, 36544, 18632, 18081, 18098, 18114, 18159, 18185, 18215, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17756, 18816, 18429, 18445, 18143, 17393, 18500, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20083, 18847, 18648, 19027, 19252, 21242, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18774, 18789, 18805, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18832, 22889, 18925, 19027, 19252, 17569, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18956, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 19073, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 18972, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21818, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21671, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22395, 20098, 18731, 19027, 19252, 17687, 19027, 17173, 23525, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 18129, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 20746, 19130, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19043, 18847, 18620, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19100, 22410, 19006, 19027, 19252, 17687, 19027, 19084, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21967, 21982, 19006, 19027, 19252, 17687, 19027, 18701, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22380, 18847, 19006, 19027, 19252, 30659, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 19157, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 19299, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 19191, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21758, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 19237, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21626, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19268, 19284, 19326, 18482, 27869, 30509, 24384, 31417, 23323, 18482, 19370, 18482, 18484, 27202, 19389, 27202, 27202, 19411, 24384, 34295, 24384, 24384, 25485, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 28530, 19459, 24384, 24384, 24384, 24384, 24017, 18036, 24041, 18482, 18482, 18482, 18484, 19487, 27202, 27202, 27202, 27202, 19503, 35523, 19539, 24384, 24384, 24384, 19647, 18482, 35623, 18482, 18482, 23052, 27202, 19557, 27202, 27202, 30764, 23993, 24384, 19579, 24384, 24384, 26758, 18482, 18482, 19346, 27867, 27202, 27202, 19599, 17590, 23998, 24384, 24384, 19619, 25683, 18482, 18482, 28511, 27202, 27203, 23997, 19639, 19887, 28419, 18902, 18483, 19663, 27202, 24325, 35844, 19887, 30991, 19713, 19395, 19736, 22259, 19754, 22073, 19770, 35154, 19795, 19816, 19836, 19859, 25794, 34248, 24116, 19720, 19875, 30988, 23482, 30981, 28304, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21743, 18847, 19006, 19027, 19252, 17431, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22365, 18847, 19907, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21641, 18847, 19326, 18482, 27869, 30544, 24384, 29176, 21442, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 19935, 24384, 24384, 24384, 24384, 32316, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 28530, 19965, 24384, 24384, 24384, 24384, 31473, 18475, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19988, 24384, 24384, 24384, 24384, 24384, 33654, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 29523, 29939, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 20017, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20068, 19058, 20158, 20367, 20884, 17944, 20276, 20853, 25651, 20604, 20460, 20185, 20209, 17189, 17208, 17281, 17675, 20232, 20273, 20295, 20338, 22456, 20777, 20600, 21329, 20635, 20365, 20937, 21207, 17292, 17421, 21157, 17192, 21217, 22425, 20279, 25549, 22436, 20276, 20383, 18983, 20421, 20446, 21317, 21051, 20476, 20322, 20663, 20490, 17543, 17559, 17585, 22463, 20540, 19523, 20246, 20556, 20257, 20430, 20585, 20620, 20193, 20651, 17661, 18368, 17703, 17730, 17772, 19513, 20679, 20692, 22446, 21027, 21097, 18990, 21111, 20708, 20736, 17744, 17795, 17874, 17590, 25536, 20349, 20762, 20812, 20169, 20828, 21376, 17714, 17976, 18021, 18560, 20844, 20569, 25560, 20869, 20900, 18114, 18159, 20916, 20953, 21013, 21043, 21067, 18281, 21083, 18574, 21127, 21143, 21181, 20515, 20930, 20883, 20504, 21197, 21233, 21258, 20524, 20216, 17405, 21270, 21286, 21302, 20720, 20310, 21345, 21361, 21392, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21952, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 21427, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 21479, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 36500, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 28667, 21921, 17617, 36472, 18265, 17237, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 21550, 21509, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 21535, 30636, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21773, 18847, 21587, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21611, 18847, 19006, 19027, 19252, 18169, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21728, 19115, 21878, 19027, 19252, 17687, 19027, 19310, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 17379, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 21906, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 18322, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21937, 18605, 19006, 19027, 19252, 22018, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21656, 21833, 19006, 19027, 19252, 17687, 19027, 21519, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 31473, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 32253, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 22228, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 31473, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 31644, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 31473, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 33557, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 34068, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22245, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 31473, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 21406, 24384, 24384, 24384, 24384, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22290, 18847, 22034, 18482, 27869, 34957, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 34436, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22320, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 27077, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 19919, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21803, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, </string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22275, 22479, 19006, 19027, 19252, 17687, 19027, 19141, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 22510, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22574, 18847, 22954, 22970, 27597, 22986, 23002, 23033, 22062, 18482, 18482, 18482, 23049, 27202, 27202, 27202, 23068, 22096, 24384, 24384, 24384, 23088, 31359, 31082, 19693, 18482, 28112, 28225, 19443, 35045, 27202, 27202, 23108, 23139, 23155, 23178, 24384, 24384, 23212, 35330, 31659, 23228, 18482, 23256, 23274, 27795, 26712, 23293, 35214, 34879, 33340, 23312, 18235, 23359, 32708, 23949, 24384, 23380, 35255, 23429, 18482, 33884, 23408, 23448, 27202, 27202, 23498, 23518, 21406, 23541, 24384, 24384, 23570, 26114, 23601, 23623, 18482, 33444, 23651, 32875, 27202, 22171, 18862, 23702, 36589, 24384, 18481, 23731, 32601, 27202, 23750, 23768, 20047, 32969, 24367, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 23784, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 28217, 31795, 23804, 26925, 34916, 23831, 26501, 25793, 23859, 23895, 23482, 30981, 22080, 19438, 27956, 19678, 29812, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22589, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 28902, 25794, 27202, 27202, 27202, 34019, 23914, 22148, 24384, 24384, 24384, 28393, 23930, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 31154, 26591, 18482, 18482, 18482, 31585, 23965, 27202, 27202, 27202, 23986, 22185, 24014, 24384, 24384, 24384, 24033, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 26504, 24057, 24107, 24132, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22604, 18847, 22034, 19697, 27869, 24166, 24384, 24182, 24198, 26600, 18482, 18482, 18484, 24233, 24249, 27202, 27202, 22096, 24268, 24284, 24384, 24384, 30621, 19800, 35427, 35999, 32609, 18482, 25794, 24303, 28959, 23752, 27202, 35010, 22148, 24341, 32040, 26837, 24383, 31473, 31659, 18482, 18482, 18482, 24784, 18484, 27202, 27202, 27202, 27202, 24401, 19503, 24384, 24384, 24384, 24384, 20134, 31154, 18482, 18482, 18482, 27845, 23052, 27202, 27202, 33502, 27202, 30764, 21406, 24384, 24384, 22938, 24384, 26114, 18482, 36246, 18482, 27867, 27202, 24423, 27202, 22171, 22934, 24384, 24442, 24384, 36762, 28438, 18482, 34466, 34508, 35771, 24461, 24385, 24477, 25677, 18482, 36220, 27202, 27202, 24498, 30954, 23715, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 24521, 30990, 27868, 34251, 30090, 23343, 24546, 19856, 25793, 19779, 30988, 23482, 26152, 22080, 19438, 29824, 24562, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22619, 18847, 22034, 25767, 22132, 25325, 23162, 29176, 24597, 24091, 23607, 24656, 26122, 24680, 24426, 24696, 28551, 22096, 24731, 24445, 24747, 23364, 30621, 18482, 18482, 18482, 18482, 24781, 25794, 27202, 27202, 27202, 34210, 35010, 22148, 24384, 24384, 24384, 33259, 31473, 22525, 24087, 24213, 18482, 18482, 34908, 24800, 30419, 27202, 27202, 32418, 19503, 29781, 35065, 24384, 24384, 19891, 31154, 24835, 18482, 18482, 24854, 29214, 27202, 27202, 32006, 27202, 30764, 35344, 24384, 24384, 31544, 24384, 26114, 33098, 27814, 27002, 27867, 34668, 25625, 24871, 22171, 22934, 19214, 34531, 24889, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 18482, 33615, 27202, 27202, 24907, 24930, 23554, 30991, 18484, 27202, 31802, 22199, 19466, 23052, 23296, 19847, 30877, 31015, 24955, 19859, 24983, 34248, 30871, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 24999, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22634, 18847, 25024, 25040, 31293, 25056, 25072, 25088, 22062, 34734, 24217, 36253, 34808, 32637, 25104, 23072, 32848, 22245, 36623, 25120, 30679, 27356, 30621, 25136, 26455, 25174, 25208, 22540, 23240, 25224, 25240, 25256, 25306, 25341, 25357, 25418, 25446, 25470, 26739, 25522, 31659, 23635, 25576, 27398, 25593, 28592, 25945, 25617, 27202, 32546, 27295, 25641, 25850, 25667, 24384, 34758, 25699, 25716, 22552, 27787, 30221, 25756, 25789, 25810, 25828, 28333, 28988, 30764, 21493, 33405, 25848, 25866, 25904, 26114, 31227, 26677, 30167, 27867, 25941, 25961, 27202, 22171, 22934, 25977, 25997, 24384, 23394, 27775, 25740, 25270, 26013, 26048, 26064, 26104, 26138, 26178, 26211, 26230, 26247, 30500, 26380, 26282, 28388, 30991, 33711, 27202, 33645, 26324, 36716, 26353, 26374, 35300, 30990, 26396, 26415, 30927, 26358, 33832, 26442, 26471, 26487, 26520, 23482, 33146, 26539, 26555, 27956, 31266, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22649, 18847, 26576, 26189, 26616, 25325, 26643, 29176, 22062, 26669, 18482, 18482, 18484, 26693, 27202, 27202, 27202, 22096, 26728, 24384, 24384, 24384, 30621, 18482, 18482, 18482, 18482, 26782, 25794, 27202, 27202, 27202, 26258, 35010, 22148, 24384, 24384, 24384, 21571, 31473, 31659, 18482, 18482, 33949, 18482, 18484, 27202, 27202, 25812, 27202, 27202, 19503, 24384, 24384, 24384, 26800, 24384, 31154, 18482, 18482, 18482, 35570, 23052, 27202, 27202, 27202, 26817, 30764, 21406, 24384, 24384, 24384, 26836, 26114, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 22171, 22934, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 35771, 20047, 24385, 19887, 25677, 31882, 18483, 35699, 27202, 19738, 26853, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 26913, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 24967, 31061, 19438, 26953, 27663, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22664, 18847, 26990, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 23017, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 27024, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 27047, 18482, 18484, 27202, 27202, 27331, 27202, 27202, 27066, 24384, 24384, 29025, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 33957, 27867, 27202, 27202, 27093, 17590, 23998, 24384, 24384, 27114, 27135, 36322, 27153, 27201, 27219, 28359, 18229, 34780, 34405, 27235, 35972, 27268, 27293, 27311, 36040, 33984, 20980, 31851, 21453, 30535, 27347, 32520, 27372, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 26337, 30118, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 27397, 27414, 27436, 27452, 27473, 22062, 18482, 18482, 30171, 18484, 27202, 27202, 27982, 27202, 22096, 24384, 24384, 25700, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 34013, 27202, 27202, 27202, 27202, 29731, 22148, 24384, 24384, 24384, 24384, 27119, 31659, 27489, 18482, 18482, 18482, 18484, 27185, 27202, 27202, 27202, 27202, 19503, 27457, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 27050, 23052, 27202, 27202, 27202, 32469, 30764, 23993, 24384, 24384, 24384, 34982, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 20796, 27202, 29362, 22110, 33940, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22679, 18847, 22034, 27508, 27528, 27553, 35182, 27569, 22062, 29693, 26300, 23258, 27585, 24715, 27613, 27202, 27648, 22096, 36597, 27698, 24384, 27733, 18877, 18482, 27811, 18482, 27830, 22046, 27865, 32194, 27202, 25158, 27885, 27913, 22148, 29458, 24384, 29977, 34392, 26750, 27763, 26889, 18482, 18482, 27252, 29886, 27929, 27202, 27202, 27202, 27981, 27998, 28024, 28045, 24384, 24384, 28062, 28081, 28128, 25506, 28145, 26088, 28160, 27202, 28173, 24640, 28189, 30764, 31496, 24384, 28205, 34154, 36166, 24939, 28241, 28259, 28283, 21463, 33034, 28320, 28349, 17590, 20967, 23092, 28375, 28409, 28095, 28435, 28454, 28474, 28509, 28527, 20001, 33682, 25879, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30272, 28267, 28546, 28567, 19425, 28583, 23052, 23296, 19847, 19471, 28608, 28653, 31075, 25794, 34248, 19856, 25793, 19779, 29644, 35950, 30318, 22080, 19438, 27956, 23123, 28693, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 18482, 27869, 25325, 24384, 29176, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 22494, 18482, 18482, 18482, 18482, 18484, 25283, 27202, 27202, 27202, 27202, 19503, 29397, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22694, 18847, 28740, 28775, 28810, 28834, 28850, 28873, 28889, 24142, 28936, 31945, 36329, 25290, 28954, 27632, 28975, 29004, 24505, 29020, 25454, 29041, 23017, 27512, 29083, 29103, 30721, 18482, 23478, 29123, 24819, 27202, 29148, 28920, 27024, 29166, 23196, 24384, 29192, 35529, 31659, 18482, 18482, 25601, 32589, 29211, 27202, 27202, 31434, 30700, 29230, 27066, 24384, 24384, 24384, 29255, 29306, 19647, 18482, 33383, 18482, 18482, 23052, 27202, 29333, 27202, 27202, 30764, 23993, 35925, 24384, 24384, 24384, 27717, 36123, 18482, 18482, 29350, 29413, 27202, 35642, 17590, 21411, 29432, 24384, 25981, 18481, 33866, 18482, 27202, 26967, 27203, 23997, 32729, 19887, 25677, 18482, 26897, 27202, 27202, 29451, 23870, 24354, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 31737, 19859, 25794, 34248, 19856, 29474, 29539, 29283, 29581, 29637, 22080, 32533, 29501, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22709, 18847, 22034, 29660, 29512, 25325, 33242, 29176, 29682, 27245, 18482, 29709, 33286, 26974, 27202, 29725, 29747, 22096, 19221, 24384, 32702, 29772, 18877, 26784, 33892, 28458, 18482, 18482, 25794, 29797, 27202, 29840, 27202, 35010, 22148, 35817, 24384, 29859, 24384, 24017, 36756, 25192, 18482, 18482, 29879, 18484, 27202, 29902, 27202, 26032, 27202, 29925, 24384, 29960, 24384, 33594, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 29239, 29993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 31665, 18482, 18482, 19603, 27202, 27203, 23997, 30013, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19949, 19466, 36661, 19563, 19847, 30029, 30128, 30062, 19859, 25794, 30078, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 30106, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22724, 18847, 30152, 30187, 30237, 30288, 30304, 30344, 22062, 35616, 32797, 25773, 18484, 29909, 34096, 26820, 27202, 22096, 24914, 23189, 29195, 24384, 18877, 34444, 30360, 18482, 18482, 18482, 23413, 24707, 27202, 27202, 27202, 35010, 30378, 34990, 24384, 24384, 24384, 24017, 29554, 18482, 18482, 27137, 18482, 31281, 30394, 27202, 27202, 30413, 30566, 19503, 30435, 24384, 24384, 29969, 35678, 19647, 28759, 30455, 35459, 35606, 23052, 28724, 30490, 30525, 30560, 30764, 23993, 20123, 30582, 30606, 30675, 26291, 33426, 28938, 27682, 30695, 23675, 33466, 28493, 17590, 23944, 20405, 34338, 20997, 32331, 26308, 30716, 30737, 24315, 30756, 21563, 36372, 30787, 26653, 24611, 33177, 32448, 30814, 31804, 25430, 25917, 26523, 18484, 28818, 31802, 29269, 19466, 28297, 34240, 23815, 26076, 30842, 30858, 32115, 30893, 30915, 32757, 25793, 30943, 30988, 23482, 30981, 30970, 31007, 27956, 19678, 29489, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22739, 18847, 31031, 31047, 32397, 31098, 31114, 31170, 22062, 18482, 29565, 35577, 36725, 27202, 33216, 31186, 24407, 22096, 24384, 20142, 31202, 34301, 27748, 31218, 33388, 27166, 18482, 29087, 27277, 27202, 31251, 31309, 27202, 31328, 31344, 24384, 31375, 31391, 24384, 31410, 31659, 18482, 36130, 32801, 18482, 18484, 27202, 27202, 31433, 31450, 27202, 19503, 24384, 24384, 31470, 33588, 24384, 32977, 18482, 18482, 18482, 18482, 30038, 27202, 27202, 27202, 27202, 31489, 32244, 24384, 24384, 24384, 24384, 31512, 18482, 28755, 18482, 24634, 35732, 27202, 27202, 28637, 31538, 35788, 24384, 24384, 19337, 31986, 18482, 33208, 25316, 27203, 29997, 29863, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 31560, 19887, 31601, 32369, 33316, 30136, 31629, 19972, 31681, 31726, 31753, 31781, 30046, 31820, 31847, 25794, 34282, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 31867, 30252, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22754, 18847, 22034, 18909, 30474, 31902, 24287, 31918, 31934, 32767, 35262, 27008, 29621, 34103, 19820, 29416, 33323, 22096, 27031, 30439, 29435, 28857, 29596, 18482, 18482, 18482, 31961, 18482, 25794, 27202, 27202, 35038, 27202, 35010, 22148, 24384, 24384, 29389, 24384, 24017, 31979, 18482, 26937, 18482, 18482, 18484, 27202, 31454, 32002, 27202, 27202, 32022, 24384, 33015, 32056, 24384, 24384, 33690, 18482, 18482, 33119, 18482, 23052, 27202, 27202, 27624, 27202, 29756, 32078, 24384, 24384, 34332, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 36691, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 31710, 22155, 33181, 24252, 32103, 30990, 27868, 34251, 19859, 25794, 34248, 30265, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 32138, 32166, 32186, 30826, 33252, 29067, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 23585, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 32210, 24384, 24384, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 32233, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 33857, 18483, 36057, 27202, 19738, 35289, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22769, 18847, 32269, 31613, 34604, 32285, 32301, 32351, 22062, 18482, 32367, 19354, 32385, 27202, 32413, 27098, 32434, 22096, 24384, 32485, 20052, 32506, 18877, 25396, 23734, 18482, 18482, 32562, 32625, 27202, 32653, 27202, 23664, 32673, 32689, 24384, 32724, 24384, 25888, 32745, 34706, 18482, 27381, 32783, 24577, 24838, 32817, 24873, 32838, 32864, 27202, 32899, 32934, 24384, 32957, 29317, 24384, 30798, 26214, 27678, 33875, 18482, 23052, 36352, 27202, 32993, 27202, 30764, 23993, 32087, 24384, 33013, 24384, 35853, 18482, 18482, 30362, 27965, 27202, 27202, 33754, 17590, 20112, 24384, 24384, 34576, 20792, 18482, 18482, 33031, 27202, 27203, 36159, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 34554, 24150, 33050, 33080, 33114, 27868, 34251, 23843, 26560, 31696, 19856, 25793, 19779, 30988, 23482, 30981, 33135, 22123, 27956, 23463, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22784, 18847, 33162, 28106, 33197, 25325, 33232, 29176, 22062, 33275, 35433, 18482, 18484, 33302, 26399, 33339, 27202, 22096, 33356, 28065, 33404, 24384, 18877, 22229, 18482, 33421, 18482, 18482, 33442, 33460, 24811, 27202, 27202, 26627, 22148, 24758, 35190, 24384, 24384, 25925, 29611, 18482, 18482, 29290, 25186, 33482, 33501, 27202, 27202, 33518, 36276, 19503, 33554, 24384, 24384, 33573, 32490, 19647, 18482, 18482, 31235, 33610, 23052, 27202, 27202, 33631, 27202, 30764, 23993, 24384, 24384, 33670, 24384, 26862, 27492, 18482, 33706, 27867, 32883, 34639, 27202, 17590, 32036, 24765, 23788, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 33727, 36097, 19887, 25677, 18482, 23334, 27202, 29150, 19738, 23870, 35357, 30328, 18484, 33748, 34675, 33770, 19466, 34050, 33824, 31831, 30990, 27868, 34251, 33848, 28913, 33908, 19856, 30469, 33973, 25385, 36033, 34000, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22799, 18847, 34035, 32576, 34084, 34119, 34135, 34170, 34186, 32150, 36005, 31522, 31886, 34202, 34226, 34267, 29334, 34317, 34354, 34378, 34421, 26801, 18877, 26195, 29666, 25402, 18482, 35091, 25794, 34460, 34482, 34504, 25832, 35010, 22148, 34524, 34547, 34570, 19623, 24017, 36654, 35111, 24664, 18482, 32335, 34592, 31312, 34620, 34636, 27202, 34655, 34691, 28046, 34750, 34774, 24384, 33785, 19647, 34796, 32170, 34844, 24581, 33485, 26704, 34828, 34860, 35493, 29132, 36704, 33800, 35368, 32941, 34146, 26758, 34895, 18482, 18482, 34932, 34948, 27202, 32997, 17590, 29944, 34973, 24384, 36296, 25500, 30202, 35875, 35006, 35026, 26266, 20396, 31146, 35061, 35081, 35127, 24623, 28484, 27897, 19738, 35143, 35170, 26162, 28794, 35206, 35230, 33064, 35245, 23052, 23296, 29054, 30990, 27868, 34251, 19859, 25794, 34248, 24530, 25147, 35278, 31765, 35316, 33370, 22080, 19438, 27956, 24072, 28623, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22814, 18847, 22034, 34720, 34059, 35384, 20989, 35400, 35416, 35449, 18482, 18482, 23432, 35475, 27202, 27202, 27202, 35509, 31127, 24384, 24384, 24384, 35545, 18482, 26871, 35101, 35593, 24855, 25794, 30397, 23502, 26024, 35639, 35658, 22148, 19541, 19583, 30590, 35674, 27709, 35560, 29107, 18482, 18482, 18482, 18484, 27202, 35694, 27202, 27202, 27202, 35715, 24384, 36580, 24384, 24384, 24384, 19647, 30215, 18482, 18482, 18482, 23052, 35731, 27202, 27202, 27202, 27537, 22904, 24384, 24384, 24384, 24384, 23879, 35748, 18482, 18482, 25008, 35770, 27202, 27202, 17590, 20031, 35787, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 23898, 18484, 34488, 31802, 25371, 19466, 23052, 23296, 26426, 30990, 27868, 34251, 19859, 25794, 35804, 19856, 27178, 35833, 33092, 23482, 30981, 22080, 22212, 28705, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22829, 18847, 22034, 35869, 28716, 25325, 31137, 29176, 22062, 26766, 18482, 22558, 18484, 23970, 27202, 29843, 27202, 22096, 33732, 24384, 31394, 24384, 18877, 18482, 18482, 26880, 18482, 18482, 25794, 27202, 30740, 27202, 27202, 35010, 22148, 24384, 24891, 24384, 24384, 24017, 31659, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22844, 18847, 22034, 27849, 27869, 35891, 24384, 35907, 22062, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 22096, 24384, 24384, 24384, 24384, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 31575, 18482, 18482, 18482, 18482, 26231, 27202, 27202, 27202, 27202, 27202, 19503, 35923, 24384, 24384, 24384, 24384, 19647, 18482, 28129, 18482, 18482, 35941, 27202, 32822, 27202, 32657, 30764, 23993, 24384, 32217, 24384, 32062, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22859, 18847, 22034, 35966, 34820, 25325, 33931, 29176, 35988, 18482, 23277, 18482, 36021, 27202, 27202, 36056, 36073, 22096, 24384, 24384, 36096, 33921, 18877, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 35010, 22148, 24384, 24384, 24384, 24384, 24017, 36113, 18482, 25577, 18482, 18482, 18484, 27202, 27202, 27324, 27202, 27202, 36146, 24384, 24384, 34362, 24384, 24384, 19647, 28243, 18482, 18482, 18482, 23052, 30899, 27202, 27202, 27202, 23686, 23993, 33808, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22305, 18847, 22034, 19373, 27869, 36182, 24384, 36198, 22062, 18482, 18482, 18482, 18049, 27202, 27202, 27202, 35485, 22096, 24384, 24384, 24384, 29371, 18877, 18482, 36214, 18482, 28788, 18482, 25794, 34872, 27202, 27420, 27202, 35010, 22148, 29380, 24384, 24482, 24384, 24017, 31659, 18482, 36236, 18482, 18482, 18484, 27202, 36080, 27202, 27202, 27202, 19503, 24384, 28029, 24384, 24384, 24384, 19647, 18482, 18482, 32122, 18482, 35754, 27202, 27202, 36269, 27202, 33531, 23993, 24384, 24384, 36292, 24384, 36312, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 25730, 18482, 18482, 36345, 27202, 27203, 19203, 24385, 19887, 25677, 31963, 18483, 27202, 32462, 19738, 23870, 36368, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22350, 18847, 36388, 19027, 19252, 17687, 36433, 17173, 17595, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 36452, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 17682, 21701, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22335, 18847, 19006, 19027, 19252, 17687, 19027, 21712, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17991, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21788, 18847, 36488, 19027, 19252, 17687, 19027, 17173, 17779, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17810, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21165, 21997, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21803, 18847, 19006, 19027, 19252, 17687, 19027, 17173, 30771, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 36516, 17308, 17327, 17346, 18937, 18460, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 21217, 21848, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21803, 18847, 19326, 18482, 27869, 30764, 24384, 29176, 28008, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 36566, 24384, 24384, 24384, 24384, 22919, 18482, 18482, 18482, 18482, 18482, 25794, 27202, 27202, 27202, 27202, 28530, 36613, 24384, 24384, 24384, 24384, 24017, 18892, 18482, 18482, 18482, 18482, 18484, 27202, 27202, 27202, 27202, 27202, 19503, 24384, 24384, 24384, 24384, 24384, 19647, 18482, 18482, 18482, 18482, 23052, 27202, 27202, 27202, 27202, 30764, 23993, 24384, 24384, 24384, 24384, 26758, 18482, 18482, 18482, 27867, 27202, 27202, 27202, 17590, 23998, 24384, 24384, 24384, 18481, 18482, 18482, 27202, 27202, 27203, 23997, 24385, 19887, 25677, 18482, 18483, 27202, 27202, 19738, 23870, 19887, 30991, 18484, 27202, 31802, 19425, 19466, 23052, 23296, 19847, 30990, 27868, 34251, 19859, 25794, 34248, 19856, 25793, 19779, 30988, 23482, 30981, 22080, 19438, 27956, 19678, 27944, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36639, 36677, 18731, 19027, 19252, 17687, 19027, 17454, 17595, 36436, 17330, 17349, 18940, 17189, 17208, 17281, 17675, 17223, 17308, 17327, 17346, 18937, 36741, 21855, 18660, 18676, 19025, 17265, 22008, 17292, 17421, 21157, 17192, 17682, 21701, 17311, 18669, 19018, 19027, 17447, 32909, 17497, 17520, 17251, 36410, 17824, 20322, 20663, 20490, 17543, 17559, 17585, 21862, 17504, 17527, 17258, 36417, 21890, 21915, 17611, 36466, 18259, 17633, 17661, 18368, 17703, 17730, 17772, 33538, 21921, 17617, 36472, 18265, 36530, 17477, 19171, 17902, 17934, 17744, 17795, 17874, 17590, 21595, 17481, 19175, 17906, 18742, 17960, 36550, 17714, 17976, 18021, 18738, 18692, 18413, 18632, 18081, 18098, 18114, 18159, 18185, 18717, 18094, 18251, 18292, 18281, 18308, 18005, 18338, 18354, 18384, 17849, 36402, 19251, 17838, 17163, 30650, 18400, 17858, 32918, 17645, 18816, 18429, 18445, 18530, 17393, 18758, 18516, 18546, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, </string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723,</string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string> 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45\n ];\n \n JSONiqTokenizer.EXPECTED =\n @@ -2643,14 +2719,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -2664,6 +2735,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token \046\046 hasType(token, \'string\') \046\046 iterator.getCurrentTokenColumn() + token.value.length \076 position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') \046\046 !(hasType(token, \'text\') \046\046 token.value.match(\'/\'))){\n do {\n @@ -2672,8 +2746,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -2690,11 +2764,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'\074/\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -2765,6 +2839,12 @@ oop.inherits(FoldMode, BaseFoldMode);\n });\n </string> </value> </item> + <item> + <key> <string>next</string> </key> + <value> + <none/> + </value> + </item> </dictionary> </pickle> </record> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsp.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsp.js.xml index 9f87e69d76..741a20b5b2 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsp.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsp.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155559.23</string> </value> + <value> <string>ts83646621.91</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,8 +64,7 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new JspHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = JspHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -88,45 +87,52 @@ var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules;\n \n var JspHighlightRules = function() {\n HtmlHighlightRules.call(this);\n - for (var i in this.$rules) {\n - this.$rules[i].unshift({\n - token : "meta.tag", // jsp open tag\n - regex : "<%@?|<%=?|<jsp:[^>]+>",\n - next : "jsp-start"\n - });\n - }\n \n var builtinVariables = \'request|response|out|session|\' +\n \'application|config|pageContext|page|Exception\';\n \n var keywords = \'page|include|taglib\';\n \n - this.embedRules(JavaHighlightRules, "jsp-");\n + var startRules = [\n + {\n + token : "comment",\n + regex : "<%--",\n + push : "jsp-dcomment"\n + }, {\n + token : "meta.tag", // jsp open tag\n + regex : "<%@?|<%=?|<jsp:[^>]+>",\n + push : "jsp-start"\n + }\n + ];\n \n - this.$rules["start"].unshift({\n - token : "comment",\n - regex : "<%--",\n - next : "comment"\n - });\n + var endRules = [\n + {\n + token : "meta.tag", // jsp close tag\n + regex : "%>|<\\\\/jsp:[^>]+>",\n + next : "pop"\n + }, {\n + token: "variable.language",\n + regex : builtinVariables\n + }, {\n + token: "keyword",\n + regex : keywords\n + }\n + ];\n \n - this.$rules["jsp-start"].unshift({\n - token : "meta.tag", // jsp close tag\n - regex : "%>|<\\\\/jsp:[^>]+>",\n - next : "start"\n - },\n - {\n - token: "variable.language",\n - regex : builtinVariables\n - }, {\n - token: "keyword",\n - regex : keywords\n - });\n + for (var key in this.$rules)\n + this.$rules[key].unshift.apply(this.$rules[key], startRules);\n \n - this.$rules.comment.unshift({\n - token : "comment",\n - regex : ".*?--%>",\n - next : "start"\n + this.embedRules(JavaHighlightRules, "jsp-", endRules, ["start"]);\n +\n + this.addRules({\n + "jsp-dcomment" : [{\n + token : "comment",\n + regex : ".*?--%>",\n + next : "pop"\n + }]\n });\n +\n + this.normalizeRules();\n };\n \n oop.inherits(JspHighlightRules, HtmlHighlightRules);\n @@ -134,15 +140,14 @@ oop.inherits(JspHighlightRules, HtmlHighlightRules);\n exports.JspHighlightRules = JspHighlightRules;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -151,6 +156,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -164,78 +170,66 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "text",\n - regex : "\\\\s+"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n - token : "constant.character.entity",\n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ]\n - };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n \n exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n @@ -265,152 +259,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -468,7 +427,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -543,7 +503,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -588,8 +548,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -676,6 +636,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -763,6 +731,193 @@ exports.DocCommentHighlightRules = DocCommentHighlightRules;\n \n });\n \n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n \n @@ -1383,7 +1538,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>59568</int> </value> + <value> <int>64897</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsx.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsx.js.xml index e7a0f03b19..9955103cb0 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsx.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-jsx.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155559.38</string> </value> + <value> <string>ts83646621.9</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -34,7 +34,7 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n function Mode() {\n - this.$tokenizer = new Tokenizer(new JsxHighlightRules().getRules());\n + this.HighlightRules = JsxHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -49,7 +49,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -667,7 +667,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>23960</int> </value> + <value> <int>23936</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-julia.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-julia.js.xml index a1a3756684..372d1525a4 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-julia.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-julia.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155559.48</string> </value> + <value> <string>ts83646621.89</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,9 +67,8 @@ var JuliaHighlightRules = require("./julia_highlight_rules").JuliaHighlightRules var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new JuliaHighlightRules();\n + this.HighlightRules = JuliaHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -277,7 +276,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>10504</int> </value> + <value> <int>10441</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-latex.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-latex.js.xml index a580e39a93..8a7fa2fa14 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-latex.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-latex.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155559.58</string> </value> + <value> <string>ts83646621.88</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -33,7 +33,7 @@ var LatexFoldMode = require("./folding/latex").FoldMode;\n var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new LatexHighlightRules().getRules());\n + this.HighlightRules = LatexHighlightRules;\n this.foldingRules = new LatexFoldMode();\n };\n oop.inherits(Mode, TextMode);\n @@ -221,7 +221,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>6040</int> </value> + <value> <int>6012</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-less.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-less.js.xml index cf8021652f..24916b43eb 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-less.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-less.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155559.73</string> </value> + <value> <string>ts83646621.87</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,7 +64,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new LessHighlightRules().getRules());\n + this.HighlightRules = LessHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -78,7 +78,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -839,7 +839,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>33949</int> </value> + <value> <int>33925</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-liquid.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-liquid.js.xml index 062a0bb542..5b72c739dd 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-liquid.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-liquid.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155559.89</string> </value> + <value> <string>ts83646621.85</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new LiquidHighlightRules().getRules());\n + this.HighlightRules = LiquidHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n };\n oop.inherits(Mode, TextMode);\n @@ -74,7 +74,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -105,16 +105,15 @@ oop.inherits(Mode, TextMode);\n exports.Mode = Mode;\n });\n \n -define(\'ace/mode/liquid_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/liquid_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\', \'ace/mode/html_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n -var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n -var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n \n var LiquidHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n var functions = (\n "date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|" +\n "escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|" +\n @@ -137,63 +136,27 @@ var LiquidHighlightRules = function() {\n "support.function": functions,\n "keyword.definition": definitions\n }, "identifier");\n -\n - this.$rules = {\n - start : [{\n + for (var rule in this.$rules) {\n + this.$rules[rule].unshift({\n token : "variable",\n regex : "{%",\n - next : "liquid_start"\n + push : "liquid-start"\n }, {\n token : "variable",\n regex : "{{",\n - next : "liquid_start"\n - }, {\n - token : "meta.tag",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=\\\\s*script\\\\b)",\n - next : "script"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=\\\\s*style\\\\b)",\n - next : "style"\n - }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?",\n - next : "tag"\n - } ],\n -\n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n -\n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ] ,\n + push : "liquid-start"\n + });\n + }\n \n - liquid_start : [{\n + this.addRules({\n + "liquid-start" : [{\n token: "variable",\n regex: "}}",\n - next: "start"\n + next: "pop"\n }, {\n token: "variable",\n regex: "%}",\n - next: "start"\n + next: "pop"\n }, {\n token : "string", // single line\n regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n @@ -225,33 +188,109 @@ var LiquidHighlightRules = function() {\n token : "text",\n regex : "\\\\s+"\n }]\n - };\n -\n - xmlUtil.tag(this.$rules, "tag", "start");\n - xmlUtil.tag(this.$rules, "style", "css-start");\n - xmlUtil.tag(this.$rules, "script", "js-start");\n + });\n \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n -\n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.normalizeRules();\n };\n oop.inherits(LiquidHighlightRules, TextHighlightRules);\n \n exports.LiquidHighlightRules = LiquidHighlightRules;\n });\n \n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n +var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n +\n +var tagMap = lang.createMap({\n + a : \'anchor\',\n + button \t : \'form\',\n + form : \'form\',\n + img : \'image\',\n + input : \'form\',\n + label : \'form\',\n + option : \'form\',\n + script : \'script\',\n + select : \'form\',\n + textarea : \'form\',\n + style : \'style\',\n + table : \'table\',\n + tbody : \'table\',\n + td : \'table\',\n + tfoot : \'table\',\n + th : \'table\',\n + tr : \'table\'\n +});\n +\n +var HtmlHighlightRules = function() {\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n + }, {\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n + }, {\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n + }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n define(\'ace/mode/css_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n \n \n @@ -277,152 +316,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -480,7 +484,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -555,7 +560,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -600,8 +605,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -688,6 +693,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -775,6 +788,193 @@ exports.DocCommentHighlightRules = DocCommentHighlightRules;\n \n });\n \n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n \n @@ -894,7 +1094,7 @@ exports.MatchingBraceOutdent = MatchingBraceOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>39557</int> </value> + <value> <int>46287</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lisp.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lisp.js.xml index 6e315eccd3..61d214a6f3 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lisp.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lisp.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.02</string> </value> + <value> <string>ts83646621.83</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,9 +62,7 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var LispHighlightRules = require("./lisp_highlight_rules").LispHighlightRules;\n \n var Mode = function() {\n - var highlighter = new LispHighlightRules();\n - \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = LispHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -170,7 +168,7 @@ exports.LispHighlightRules = LispHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>4952</int> </value> + <value> <int>4884</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-livescript.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-livescript.js.xml index 5080dbda63..232e09dd47 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-livescript.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-livescript.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.17</string> </value> + <value> <string>ts83646621.8</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-logiql.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-logiql.js.xml index 222b2f5fe6..51b6ff3df1 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-logiql.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-logiql.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.28</string> </value> + <value> <string>ts83646621.78</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -66,9 +66,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n \n var Mode = function() {\n - var highlighter = new LogiQLHighlightRules();\n + this.HighlightRules = LogiQLHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n };\n @@ -81,7 +80,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n if (/comment|string/.test(endState)) \n @@ -182,7 +181,7 @@ var LogiQLHighlightRules = function() {\n regex: \'//.*\',\n },\n { token: \'constant.numeric\',\n - regex: \'\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?\',\n + regex: \'\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?[fd]?\',\n },\n { token: \'string\',\n regex: \'"\',\n @@ -696,7 +695,7 @@ exports.MatchingBraceOutdent = MatchingBraceOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>25957</int> </value> + <value> <int>25903</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lsl.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lsl.js.xml index 05ece651b4..3447ce8804 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lsl.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lsl.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.34</string> </value> + <value> <string>ts83646622.75</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -65,7 +65,7 @@ var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n var oop = require("../lib/oop");\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new Rules().getRules());\n + this.HighlightRules = Rules;\n this.$outdent = new Outdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -84,7 +84,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -126,61 +126,62 @@ oop.inherits(LSLHighlightRules, TextHighlightRules);\n function LSLHighlightRules() {\n var keywordMapper = this.createKeywordMapper({\n "constant.language.float.lsl" : "DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI",\n - "constant.language.integer.lsl": "ACTIVE|ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|" +\n - "AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|" +\n - "AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|" +\n + "constant.language.integer.lsl": "ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|" +\n + "AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|" +\n + "AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|" +\n "AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|" +\n - "AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|" +\n - "ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|" +\n - "ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|" +\n - "ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|" +\n - "ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|" +\n - "ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|" +\n - "ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|" +\n - "ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|" +\n - "ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|" +\n - "CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|" +\n - "CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|" +\n - "CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|" +\n - "CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|" +\n - "CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|" +\n - "CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|" +\n - "CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|" +\n - "CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|" +\n - "CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|" +\n - "CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|" +\n - "CHARACTER_RADIUS|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|" +\n - "CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|" +\n - "CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|" +\n - "CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|" +\n - "CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|" +\n - "CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|" +\n - "CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|" +\n - "CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|" +\n - "DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|" +\n - "DENSITY|DEBUG_CHANNEL|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|" +\n - "ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|" +\n - "ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|" +\n - "FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|" +\n - "HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|" +\n - "HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|" +\n - "HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|" +\n - "INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|" +\n - "INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|" +\n - "INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|" +\n - "KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|" +\n - "KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|" +\n - "KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|" +\n - "LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|" +\n - "LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|" +\n - "LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|" +\n - "LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|" +\n - "MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_CREATOR|OBJECT_DESC|" +\n - "OBJECT_GROUP|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHYSICS_COST|" +\n - "OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|" +\n + "AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|" +\n + "ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|" +\n + "ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|" +\n + "ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|" +\n + "ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|" +\n + "ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|" +\n + "ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|" +\n + "ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|" +\n + "ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|" +\n + "AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|" +\n + "CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|" +\n + "CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|" +\n + "CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|" +\n + "CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|" +\n + "CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|" +\n + "CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|" +\n + "CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|" +\n + "CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|" +\n + "CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|" +\n + "CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|" +\n + "CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|" +\n + "CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|" +\n + "CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|" +\n + "CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|" +\n + "CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|" +\n + "CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|" +\n + "CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|" +\n + "CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|" +\n + "DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|" +\n + "ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|" +\n + "ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|" +\n + "ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FORCE_DIRECT_PATH|" +\n + "FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|" +\n + "HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|" +\n + "HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|" +\n + "INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|" +\n + "INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|" +\n + "INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|" +\n + "KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|" +\n + "KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|" +\n + "LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|" +\n + "LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|" +\n + "LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|" +\n + "LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|" +\n + "LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|" +\n + "OBJECT_CHARACTER_TIME|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_NAME|" +\n + "OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|" +\n + "OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|" +\n + "OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|" +\n "OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|" +\n - "OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|" +\n - "OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|" +\n + "OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|" +\n + "OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|" +\n "OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|" +\n "PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|" +\n "PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|" +\n @@ -196,75 +197,79 @@ function LSLHighlightRules() {\n "PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|" +\n "PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|" +\n "PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|" +\n - "PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|" +\n - "PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|" +\n - "PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|" +\n - "PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|" +\n - "PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|" +\n - "PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|" +\n - "PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|" +\n - "PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|" +\n - "PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|" +\n - "PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|" +\n - "PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_LIGHT|" +\n - "PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|" +\n - "PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|" +\n - "PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_STANDARD|" +\n - "PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|" +\n - "PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|" +\n - "PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|" +\n - "PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|" +\n - "PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|" +\n - "PRIM_MEDIA_WIDTH_PIXELS|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|" +\n - "PRIM_NAME|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|" +\n - "PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|" +\n - "PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|" +\n - "PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|" +\n - "PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|" +\n - "PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|" +\n - "PRIM_SLICE|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|" +\n - "PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|" +\n + "PAY_DEFAULT|PAY_HIDE|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PERM_ALL|" +\n + "PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|" +\n + "PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|" +\n + "PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|" +\n + "PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|" +\n + "PING_PONG|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|" +\n + "PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|" +\n + "PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|" +\n + "PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|" +\n + "PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|" +\n + "PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|" +\n + "PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|" +\n + "PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|" +\n + "PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|" +\n + "PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|" +\n + "PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|" +\n + "PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|" +\n + "PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|" +\n + "PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|" +\n + "PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|" +\n + "PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_WHITELIST|" +\n + "PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_OMEGA|" +\n + "PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|" +\n + "PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POS_LOCAL|" +\n + "PRIM_POSITION|PRIM_ROT_LOCAL|PRIM_ROTATION|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|" +\n + "PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|" +\n + "PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|" +\n + "PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_TEMP_ON_REZ|" +\n + "PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|" +\n + "PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|" +\n "PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|" +\n - "PROFILE_SCRIPT_MEMORY|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|" +\n - "PSYS_PART_END_COLOR|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|" +\n - "PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|" +\n - "PSYS_PART_MAX_AGE|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_SCALE|" +\n - "PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|" +\n - "PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|" +\n - "PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|" +\n - "PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|" +\n - "PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|" +\n - "PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|" +\n - "PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|" +\n - "PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|" +\n - "PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|" +\n - "PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|" +\n - "PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|" +\n - "RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|" +\n - "RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|" +\n + "PROFILE_SCRIPT_MEMORY|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|" +\n + "PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|" +\n + "PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|" +\n + "PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_START_ALPHA|" +\n + "PSYS_PART_START_COLOR|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|" +\n + "PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|" +\n + "PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|" +\n + "PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|" +\n + "PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|" +\n + "PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|" +\n + "PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|" +\n + "PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|" +\n + "PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|" +\n + "PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|" +\n + "PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|" +\n + "PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|RC_DATA_FLAGS|" +\n + "RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|" +\n + "RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|" +\n "RC_REJECT_TYPES|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|" +\n "REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|" +\n "REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|" +\n "REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|" +\n "REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|" +\n - "RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|" +\n - "STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|" +\n - "STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|" +\n - "STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|" +\n - "STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|" +\n - "STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|" +\n - "TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|" +\n - "TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|" +\n - "TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|" +\n - "VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|" +\n - "VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|" +\n - "VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|" +\n - "VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|" +\n - "VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|" +\n - "VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|" +\n - "VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|" +\n - "VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|" +\n - "VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|" +\n + "RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|" +\n + "SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|" +\n + "STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|" +\n + "STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|" +\n + "STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|" +\n + "STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|" +\n + "STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|" +\n + "TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TYPE_FLOAT|" +\n + "TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|" +\n + "VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|" +\n + "VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|" +\n + "VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|" +\n + "VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|" +\n + "VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|" +\n + "VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|" +\n + "VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|" +\n + "VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|" +\n + "VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|" +\n + "VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|" +\n "VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|" +\n "VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|" +\n "VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|" +\n @@ -276,16 +281,21 @@ function LSLHighlightRules() {\n "TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|" +\n "TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED",\n "constant.language.vector.lsl" : "TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR",\n - "invalid.deprecated.lsl" : "llCloud|llCollisionSprite|llGodLikeRezObject|llMakeExplosion|" +\n - "llMakeFountain|llMakeSmoke|llMakeFire|llPointAt|llStopPointAt|llRefreshPrimURL|" +\n - "llSetPrimURL|llReleaseCamera|llTakeCamera|llRemoteDataSetRegion|llRemoteLoadScript|" +\n - "llSetInventoryPermMask|llSound|llSoundPreload|llXorBase64Strings|AGENT|" +\n - "CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|" +\n - "DATA_RATING|LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH|PERMISSION_CHANGE_JOINTS|" +\n - "PERMISSION_CHANGE_PERMISSIONS|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|" +\n - "PRIM_CAST_SHADOWS|PRIM_PHYSICS_MATERIAL|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|" +\n - "PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP",\n - "invalid.illegal.lsl" : "event|print",\n + "invalid.broken.lsl": "LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH",\n + "invalid.deprecated.lsl" : "ATTACH_LPEC|ATTACH_RPEC|CHARACTER_MAX_ANGULAR_ACCEL|" +\n + "CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|DATA_RATING|" +\n + "PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_PHYSICS_MATERIAL|PRIM_TYPE_LEGACY|" +\n + "PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llCloud|" +\n + "llGodLikeRezObject|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|" +\n + "llRemoteDataSetRegion|llSetInventoryPermMask|llSetObjectPermMask|llSound|" +\n + "llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect",\n + "invalid.godmode.lsl": "llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask",\n + "invalid.illegal.lsl" : "print",\n + "invalid.unimplemented.lsl": "CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|" +\n + "CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|" +\n + "PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PRIM_TYPE_LEGACY|" +\n + "PSYS_SRC_OBJ_REL_MASK|event|llCollisionSprite|llPointAt|llRefreshPrimURL|" +\n + "llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera",\n "keyword.control.lsl" : "do|else|for|if|jump|return|while",\n "storage.type.lsl" : "float|integer|key|list|quaternion|rotation|string|vector",\n "support.function.lsl": "llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|" +\n @@ -345,7 +355,8 @@ function LSLHighlightRules() {\n "llRequestAgentData|llRequestDisplayName|llRequestInventoryData|llRequestPermissions|" +\n "llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|" +\n "llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|" +\n - "llResetScript|llResetTime|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|" +\n + "llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|" +\n + "llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|" +\n "llRot2Fwd|llRot2Left|llRot2Up|llRotateTexture|llRotBetween|llRotLookAt|" +\n "llRotTarget|llRotTargetRemove|llRound|llSameGroup|llSay|llScaleTexture|" +\n "llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|" +\n @@ -367,7 +378,7 @@ function LSLHighlightRules() {\n "llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|" +\n "llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|" +\n "llUnescapeURL|llUnSit|llUpdateCharacter|llVecDist|llVecMag|llVecNorm|" +\n - "llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64StringsCorrect",\n + "llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64",\n "support.function.event.lsl" : "at_rot_target|at_target|attach|changed|collision|" +\n "collision_end|collision_start|control|dataserver|email|http_request|" +\n "http_response|land_collision|land_collision_end|land_collision_start|" +\n @@ -864,7 +875,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>45785</int> </value> + <value> <int>46609</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lua.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lua.js.xml index 764de24238..afdff86ba0 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lua.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lua.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.45</string> </value> + <value> <string>ts83646621.76</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,7 +64,8 @@ var Range = require("../range").Range;\n var WorkerClient = require("../worker/worker_client").WorkerClient;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new LuaHighlightRules().getRules());\n + this.HighlightRules = LuaHighlightRules;\n + \n this.foldingRules = new LuaFoldMode();\n };\n oop.inherits(Mode, TextMode);\n @@ -118,7 +119,7 @@ oop.inherits(Mode, TextMode);\n var indent = this.$getIndent(line);\n var level = 0;\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (state == "start") {\n @@ -141,7 +142,7 @@ oop.inherits(Mode, TextMode);\n if (line.match(/^\\s*[\\)\\}\\]]$/))\n return true;\n \n - var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n \n if (!tokens || !tokens.length)\n return false;\n @@ -152,7 +153,7 @@ oop.inherits(Mode, TextMode);\n this.autoOutdent = function(state, session, row) {\n var prevLine = session.getLine(row - 1);\n var prevIndent = this.$getIndent(prevLine).length;\n - var prevTokens = this.$tokenizer.getLineTokens(prevLine, "start").tokens;\n + var prevTokens = this.getTokenizer().getLineTokens(prevLine, "start").tokens;\n var tabLength = session.getTabString().length;\n var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);\n var curIndent = this.$getIndent(session.getLine(row)).length;\n @@ -251,7 +252,7 @@ var LuaHighlightRules = function() {\n "start" : [{\n stateName: "bracketedComment",\n onMatch : function(value, currentState, stack){\n - stack.unshift(this.next, value.length, currentState);\n + stack.unshift(this.next, value.length - 2, currentState);\n return "comment";\n },\n regex : /\\-\\-\\[=*\\[/,\n @@ -267,7 +268,7 @@ var LuaHighlightRules = function() {\n }\n return "comment";\n },\n - regex : /(?:[^\\\\]|\\\\.)*?\\]=*\\]/,\n + regex : /\\]=*\\]/,\n next : "start"\n }, {\n defaultToken : "comment"\n @@ -299,7 +300,7 @@ var LuaHighlightRules = function() {\n return "comment";\n },\n \n - regex : /(?:[^\\\\]|\\\\.)*?\\]=*\\]/,\n + regex : /\\]=*\\]/,\n next : "start"\n }, {\n defaultToken : "comment"\n @@ -487,7 +488,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>16186</int> </value> + <value> <int>16149</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-luapage.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-luapage.js.xml index 985393ca90..9ea2de4861 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-luapage.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-luapage.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.56</string> </value> + <value> <string>ts83646621.75</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>91308</int> </value> + <value> <int>104757</int> </value> </item> <item> <key> <string>title</string> </key> @@ -59,10 +59,9 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var LuaPageHighlightRules = require("./luapage_highlight_rules").LuaPageHighlightRules;\n \n var Mode = function() {\n - var highlighter = new LuaPageHighlightRules();\n + this.HighlightRules = LuaPageHighlightRules;\n \n - this.$tokenizer = new Tokenizer(new LuaPageHighlightRules().getRules());\n - this.$embeds = highlighter.getEmbeds();\n + this.HighlightRules = LuaPageHighlightRules;\n this.createModeDelegates({\n "lua-": LuaMode\n });\n @@ -72,7 +71,7 @@ oop.inherits(Mode, HtmlMode);\n exports.Mode = Mode;\n });\n \n -define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -83,13 +82,13 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n \n var Mode = function() {\n - var highlighter = new HtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -110,6 +109,10 @@ oop.inherits(Mode, TextMode);\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n \n }).call(Mode.prototype);\n \n @@ -130,7 +133,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -145,7 +149,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -251,7 +255,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -326,7 +331,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -371,8 +376,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -459,6 +464,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -976,7 +989,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -990,7 +1003,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1057,152 +1070,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1290,15 +1268,14 @@ oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -1307,6 +1284,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -1320,80 +1298,255 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n token : "text",\n regex : "\\\\s+"\n }, {\n - token : "constant.character.entity",\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n }, {\n - defaultToken : "comment"\n - } ]\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n \n -exports.HtmlHighlightRules = HtmlHighlightRules;\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n });\n \n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n @@ -1476,14 +1629,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1498,7 +1646,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1508,8 +1656,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1539,14 +1687,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1560,6 +1703,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1568,8 +1714,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1586,11 +1732,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1669,6 +1815,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -1745,7 +1893,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -1778,7 +1926,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -1811,7 +1959,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -1926,6 +2074,286 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n });\n \n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n +\n define(\'ace/mode/lua\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/lua_highlight_rules\', \'ace/mode/folding/lua\', \'ace/range\', \'ace/worker/worker_client\'], function(require, exports, module) {\n \n \n @@ -1938,7 +2366,8 @@ var Range = require("../range").Range;\n var WorkerClient = require("../worker/worker_client").WorkerClient;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new LuaHighlightRules().getRules());\n + this.HighlightRules = LuaHighlightRules;\n + \n this.foldingRules = new LuaFoldMode();\n };\n oop.inherits(Mode, TextMode);\n @@ -1992,7 +2421,7 @@ oop.inherits(Mode, TextMode);\n var indent = this.$getIndent(line);\n var level = 0;\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (state == "start") {\n @@ -2015,7 +2444,7 @@ oop.inherits(Mode, TextMode);\n if (line.match(/^\\s*[\\)\\}\\]]$/))\n return true;\n \n - var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n \n if (!tokens || !tokens.length)\n return false;\n @@ -2026,7 +2455,7 @@ oop.inherits(Mode, TextMode);\n this.autoOutdent = function(state, session, row) {\n var prevLine = session.getLine(row - 1);\n var prevIndent = this.$getIndent(prevLine).length;\n - var prevTokens = this.$tokenizer.getLineTokens(prevLine, "start").tokens;\n + var prevTokens = this.getTokenizer().getLineTokens(prevLine, "start").tokens;\n var tabLength = session.getTabString().length;\n var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);\n var curIndent = this.$getIndent(session.getLine(row)).length;\n @@ -2125,7 +2554,7 @@ var LuaHighlightRules = function() {\n "start" : [{\n stateName: "bracketedComment",\n onMatch : function(value, currentState, stack){\n - stack.unshift(this.next, value.length, currentState);\n + stack.unshift(this.next, value.length - 2, currentState);\n return "comment";\n },\n regex : /\\-\\-\\[=*\\[/,\n @@ -2141,7 +2570,7 @@ var LuaHighlightRules = function() {\n }\n return "comment";\n },\n - regex : /(?:[^\\\\]|\\\\.)*?\\]=*\\]/,\n + regex : /\\]=*\\]/,\n next : "start"\n }, {\n defaultToken : "comment"\n @@ -2173,7 +2602,7 @@ var LuaHighlightRules = function() {\n return "comment";\n },\n \n - regex : /(?:[^\\\\]|\\\\.)*?\\]=*\\]/,\n + regex : /\\]=*\\]/,\n next : "start"\n }, {\n defaultToken : "comment"\n @@ -2359,31 +2788,38 @@ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules;\n \n var LuaPageHighlightRules = function() {\n - this.$rules = new HtmlHighlightRules().getRules();\n - \n - for (var i in this.$rules) {\n - this.$rules[i].unshift({\n + HtmlHighlightRules.call(this);\n +\n + var startRules = [\n + {\n token: "keyword",\n regex: "<\\\\%\\\\=?",\n - next: "lua-start"\n + push: "lua-start"\n }, {\n token: "keyword",\n regex: "<\\\\?lua\\\\=?",\n - next: "lua-start"\n - });\n - }\n - this.embedRules(LuaHighlightRules, "lua-", [\n + push: "lua-start"\n + }\n + ];\n +\n + var endRules = [\n {\n token: "keyword",\n regex: "\\\\%>",\n - next: "start"\n - },\n - {\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "\\\\?>",\n - next: "start"\n + next: "pop"\n }\n - ]);\n + ];\n +\n + this.embedRules(LuaHighlightRules, "lua-", endRules, ["start"]);\n +\n + for (var key in this.$rules)\n + this.$rules[key].unshift.apply(this.$rules[key], startRules);\n +\n + this.normalizeRules();\n };\n \n oop.inherits(LuaPageHighlightRules, HtmlHighlightRules);\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lucene.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lucene.js.xml index db61223c5f..3b933bf792 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lucene.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-lucene.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.66</string> </value> + <value> <string>ts83646621.7</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-makefile.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-makefile.js.xml index 7254252443..440f05665b 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-makefile.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-makefile.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.76</string> </value> + <value> <string>ts83646621.68</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,16 +67,16 @@ var MakefileHighlightRules = require("./makefile_highlight_rules").MakefileHighl var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - var highlighter = new MakefileHighlightRules();\n + this.HighlightRules = MakefileHighlightRules;\n this.foldingRules = new FoldMode();\n - \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n (function() {\n \n - this.lineCommentStart = "#";\n + this.lineCommentStart = "#"; \n + this.$indentWithTabs = true;\n + \n }).call(Mode.prototype);\n \n exports.Mode = Mode;\n @@ -201,12 +201,28 @@ var ShHighlightRules = function() {\n var func = "(?:" + variableName + "\\\\s*\\\\(\\\\))";\n \n this.$rules = {\n - "start" : [ {\n + "start" : [{\n + token : "constant",\n + regex : /\\\\./\n + }, {\n token : ["text", "comment"],\n regex : /(^|\\s)(#.*)$/\n }, {\n - token : "string", // " string\n - regex : \'"(?:[^\\\\\\\\]|\\\\\\\\.)*?"\'\n + token : "string",\n + regex : \'"\',\n + push : [{\n + token : "constant.language.escape",\n + regex : /\\\\(?:[$abeEfnrtv\\\\\'"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n + }, {\n + token : "constant",\n + regex : /\\$\\w+/\n + }, {\n + token : "string",\n + regex : \'"\',\n + next: "pop"\n + }, {\n + defaultToken: "string"\n + }]\n }, {\n token : "variable.language",\n regex : builtinVariable\n @@ -221,7 +237,7 @@ var ShHighlightRules = function() {\n regex : fileDescriptor\n }, {\n token : "string", // \' string\n - regex : "\'(?:[^\\\\\\\\]|\\\\\\\\.)*?\'"\n + start : "\'", end : "\'"\n }, {\n token : "constant.numeric", // float\n regex : floatNumber\n @@ -242,6 +258,8 @@ var ShHighlightRules = function() {\n regex : "[\\\\]\\\\)\\\\}]"\n } ]\n };\n + \n + this.normalizeRules();\n };\n \n oop.inherits(ShHighlightRules, TextHighlightRules);\n @@ -345,7 +363,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>10463</int> </value> + <value> <int>10935</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-markdown.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-markdown.js.xml index d9bd5704c4..bd6d0f9cb6 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-markdown.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-markdown.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155560.91</string> </value> + <value> <string>ts83646621.67</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>89860</int> </value> + <value> <int>101742</int> </value> </item> <item> <key> <string>title</string> </key> @@ -92,14 +92,12 @@ var MarkdownHighlightRules = require("./markdown_highlight_rules").MarkdownHighl var MarkdownFoldMode = require("./folding/markdown").FoldMode;\n \n var Mode = function() {\n - var highlighter = new MarkdownHighlightRules();\n + this.HighlightRules = MarkdownHighlightRules;\n \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n - "js-": JavaScriptMode,\n - "xml-": XmlMode,\n - "html-": HtmlMode\n + "js-": JavaScriptMode,\n + "xml-": XmlMode,\n + "html-": HtmlMode\n });\n \n this.foldingRules = new MarkdownFoldMode();\n @@ -107,7 +105,7 @@ var Mode = function() {\n oop.inherits(Mode, TextMode);\n \n (function() {\n - \n + this.type = "text";\n this.lineCommentStart = ">";\n \n this.getNextLineIndent = function(state, line, tab) {\n @@ -142,7 +140,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -157,7 +156,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -263,7 +262,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -338,7 +338,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -383,8 +383,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -471,6 +471,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -986,7 +994,7 @@ var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;\n var XmlFoldMode = require("./folding/xml").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());\n + this.HighlightRules = XmlHighlightRules;\n this.$behaviour = new XmlBehaviour();\n this.foldingRules = new XmlFoldMode();\n };\n @@ -1009,36 +1017,181 @@ var oop = require("../lib/oop");\n var xmlUtil = require("./xml_util");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n \n -var XmlHighlightRules = function() {\n +var XmlHighlightRules = function(normalize) {\n this.$rules = {\n start : [\n - {token : "text", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n - {token : "xml-pe", regex : "<\\\\?.*?\\\\?>"},\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n {token : "comment", regex : "<\\\\!--", next : "comment"},\n - {token : "xml-pe", regex : "<\\\\!.*?>"},\n - {token : "meta.tag", regex : "<\\\\/?", next : "tag"},\n - {token : "text", regex : "\\\\s+"},\n {\n - token : "constant.character.entity", \n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n - }\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n ],\n - \n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n cdata : [\n - {token : "text", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n {token : "text", regex : "\\\\s+"},\n {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n ],\n \n comment : [\n - {token : "comment", regex : ".*?-->", next : "start"},\n - {token : "comment", regex : ".+"}\n - ]\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start");\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n oop.inherits(XmlHighlightRules, TextHighlightRules);\n \n exports.XmlHighlightRules = XmlHighlightRules;\n @@ -1123,14 +1276,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1144,6 +1292,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1152,8 +1303,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1170,11 +1321,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1230,7 +1381,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -1263,7 +1414,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -1296,7 +1447,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -1411,7 +1562,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n });\n \n -define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -1422,13 +1573,13 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n \n var Mode = function() {\n - var highlighter = new HtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -1449,6 +1600,10 @@ oop.inherits(Mode, TextMode);\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n \n }).call(Mode.prototype);\n \n @@ -1468,7 +1623,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1482,7 +1637,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1549,152 +1704,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1782,15 +1902,14 @@ oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -1799,6 +1918,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -1812,78 +1932,66 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "text",\n - regex : "\\\\s+"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n - token : "constant.character.entity",\n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ]\n - };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n \n exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n @@ -1898,14 +2006,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1920,7 +2023,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1930,8 +2033,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -2015,6 +2118,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -2051,27 +2156,354 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n });\n \n -define(\'ace/mode/markdown_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\', \'ace/mode/html_highlight_rules\', \'ace/mode/css_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n +\n +define(\'ace/mode/markdown_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/text_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\', \'ace/mode/html_highlight_rules\', \'ace/mode/css_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n \n +var escaped = function(ch) {\n + return "(?:[^" + lang.escapeRegExp(ch) + "\\\\\\\\]|\\\\\\\\.)*";\n +}\n +\n function github_embed(tag, prefix) {\n return { // Github style block\n token : "support.function",\n regex : "^```" + tag + "\\\\s*$",\n - next : prefix + "start"\n + push : prefix + "start"\n };\n }\n \n var MarkdownHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n +\n + this.$rules["start"].unshift({\n + token : "empty_line",\n + regex : \'^$\',\n + next: "allowBlock"\n + }, { // h1\n + token: "markup.heading.1",\n + regex: "^=+(?=\\\\s*$)"\n + }, { // h2\n + token: "markup.heading.2",\n + regex: "^\\\\-+(?=\\\\s*$)"\n + }, {\n + token : function(value) {\n + return "markup.heading." + value.length;\n + },\n + regex : /^#{1,6}(?=\\s*[^ #]|\\s+#.)/,\n + next : "header"\n + },\n + github_embed("(?:javascript|js)", "jscode-"),\n + github_embed("xml", "xmlcode-"),\n + github_embed("html", "htmlcode-"),\n + github_embed("css", "csscode-"),\n + { // Github style block\n + token : "support.function",\n + regex : "^```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$",\n + next : "githubblock"\n + }, { // block quote\n + token : "string",\n + regex : "^>[ ].+$",\n + next : "blockquote"\n + }, { // HR * - _\n + token : "constant",\n + regex : "^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$",\n + next: "allowBlock"\n + }, { // list\n + token : "markup.list",\n + regex : "^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+",\n + next : "listblock-start"\n + }, {\n + include : "basic"\n + });\n \n - this.$rules = {\n + this.addRules({\n "basic" : [{\n token : "constant.language.escape",\n regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n @@ -2083,15 +2515,15 @@ var MarkdownHighlightRules = function() {\n regex : "^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\"][^\\"]+[\\"])?(\\\\s*))$"\n }, { // link by reference\n token : ["text", "string", "text", "constant", "text"],\n - regex : "(\\\\[)((?:[[^\\\\]]*\\\\]|[^\\\\[\\\\]])*)(\\\\][ ]?(?:\\\\n[ ]*)?\\\\[)(.*?)(\\\\])"\n + regex : "(\\\\[)(" + escaped("]") + ")(\\\\]\\s*\\\\[)("+ escaped("]") + ")(\\\\])"\n }, { // link by url\n token : ["text", "string", "text", "markup.underline", "string", "text"],\n - regex : "(\\\\[)"+\n - "(\\\\[[^\\\\]]*\\\\]|[^\\\\[\\\\]]*)"+\n - "(\\\\]\\\\([ \\\\t]*)"+\n - "(<?(?:(?:[^\\\\(]*?\\\\([^\\\\)]*?\\\\)\\\\S*?)|(?:.*?))>?)"+\n - "((?:[ \\t]*\\"(?:.*?)\\"[ \\\\t]*)?)"+\n - "(\\\\))"\n + regex : "(\\\\[)(" + // [\n + escaped("]") + // link text\n + ")(\\\\]\\\\()"+ // ](\n + \'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^"]))*)\' + // href\n + \'(\\\\s*"\' + escaped(\'"\') + \'"\\\\s*)?\' + // "title"\n + "(\\\\))" // )\n }, { // strong ** __\n token : "string",\n regex : "([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)"\n @@ -2111,54 +2543,13 @@ var MarkdownHighlightRules = function() {\n {token : "empty", regex : "", next : "start"}\n ],\n \n - "start" : [{\n - token : "empty_line",\n - regex : \'^$\',\n - next: "allowBlock"\n - }, { // h1\n - token: "markup.heading.1",\n - regex: "^=+(?=\\\\s*$)"\n - }, { // h2\n - token: "markup.heading.2",\n - regex: "^\\\\-+(?=\\\\s*$)"\n - }, {\n - token : function(value) {\n - return "markup.heading." + value.length;\n - },\n - regex : /^#{1,6}(?=\\s*[^ #]|\\s+#.)/,\n - next : "header"\n - },\n - github_embed("(?:javascript|js)", "js-"),\n - github_embed("xml", "xml-"),\n - github_embed("html", "html-"),\n - github_embed("css", "css-"),\n - { // Github style block\n - token : "support.function",\n - regex : "^```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$",\n - next : "githubblock"\n - }, { // block quote\n - token : "string",\n - regex : "^>[ ].+$",\n - next : "blockquote"\n - }, { // HR * - _\n - token : "constant",\n - regex : "^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$",\n - next: "allowBlock"\n - }, { // list\n - token : "markup.list",\n - regex : "^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+",\n - next : "listblock-start"\n - }, {\n - include : "basic"\n - }],\n - \n "header" : [{\n regex: "$",\n next : "start"\n }, {\n include: "basic"\n }, {\n - defaultToken : "markup.heading"\n + defaultToken : "heading"\n } ],\n \n "listblock-start" : [{\n @@ -2178,7 +2569,7 @@ var MarkdownHighlightRules = function() {\n }, {\n include : "basic", noEscape: true\n }, {\n - defaultToken : "markup.list"\n + defaultToken : "list"\n } ],\n \n "blockquote" : [ { // BLockquotes only escape on blank lines.\n @@ -2198,39 +2589,31 @@ var MarkdownHighlightRules = function() {\n token : "support.function",\n regex : ".+"\n } ]\n - };\n + });\n \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n + this.embedRules(JavaScriptHighlightRules, "jscode-", [{\n token : "support.function",\n regex : "^```",\n - next : "start"\n + next : "pop"\n }]);\n \n - this.embedRules(HtmlHighlightRules, "html-", [{\n + this.embedRules(HtmlHighlightRules, "htmlcode-", [{\n token : "support.function",\n regex : "^```",\n - next : "start"\n + next : "pop"\n }]);\n \n - this.embedRules(CssHighlightRules, "css-", [{\n + this.embedRules(CssHighlightRules, "csscode-", [{\n token : "support.function",\n regex : "^```",\n - next : "start"\n + next : "pop"\n }]);\n \n - this.embedRules(XmlHighlightRules, "xml-", [{\n + this.embedRules(XmlHighlightRules, "xmlcode-", [{\n token : "support.function",\n regex : "^```",\n - next : "start"\n + next : "pop"\n }]);\n -\n - var html = new HtmlHighlightRules().getRules();\n - for (var i in html) {\n - if (this.$rules[i])\n - this.$rules[i] = this.$rules[i].concat(html[i]);\n - else\n - this.$rules[i] = html[i];\n - }\n \n this.normalizeRules();\n };\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-matlab.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-matlab.js.xml index c59055287b..b1c8cc13c5 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-matlab.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-matlab.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.01</string> </value> + <value> <string>ts83646621.65</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var MatlabHighlightRules = require("./matlab_highlight_rules").MatlabHighlightRu var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new MatlabHighlightRules().getRules());\n + this.HighlightRules = MatlabHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -260,7 +260,7 @@ exports.MatlabHighlightRules = MatlabHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>23383</int> </value> + <value> <int>23355</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mushcode.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mushcode.js.xml index bff3d5f7cd..a17100fdfd 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mushcode.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mushcode.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.21</string> </value> + <value> <string>ts83646621.64</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,7 +63,7 @@ var PythonFoldMode = require("./folding/pythonic").FoldMode;\n var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new MushCodeRules().getRules());\n + this.HighlightRules = MushCodeRules;\n this.foldingRules = new PythonFoldMode("\\\\:");\n };\n oop.inherits(Mode, TextMode);\n @@ -75,7 +75,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -104,7 +104,7 @@ oop.inherits(Mode, TextMode);\n if (input !== "\\r\\n" && input !== "\\r" && input !== "\\n")\n return false;\n \n - var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n \n if (!tokens)\n return false;\n @@ -689,7 +689,7 @@ var MushCodeRules = function() {\n }, {\n token : "text",\n regex : "\\\\s+"\n - } ],\n + } ]\n };\n };\n \n @@ -736,7 +736,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>13720</int> </value> + <value> <int>13699</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mushcode_high_rules.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mushcode_high_rules.js.xml index 27f87318fe..6216295fdb 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mushcode_high_rules.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mushcode_high_rules.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.11</string> </value> + <value> <string>ts83646621.62</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -583,7 +583,7 @@ var MushCodeRules = function() {\n }, {\n token : "text",\n regex : "\\\\s+"\n - } ],\n + } ]\n };\n };\n \n @@ -601,7 +601,7 @@ exports.MushCodeRules = MushCodeRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>8780</int> </value> + <value> <int>8779</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mysql.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mysql.js.xml index 2efed87867..d2a3c6006a 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mysql.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-mysql.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.31</string> </value> + <value> <string>ts83646622.62</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -61,7 +61,7 @@ var MysqlHighlightRules = require("./mysql_highlight_rules").MysqlHighlightRules var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new MysqlHighlightRules().getRules());\n + this.HighlightRules = MysqlHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -151,7 +151,7 @@ var MysqlHighlightRules = function() {\n "comment" : [\n {token : "comment", regex : "\\\\*\\\\/", next : "start"},\n {defaultToken : "comment"}\n - ],\n + ]\n };\n \n this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]);\n @@ -216,7 +216,7 @@ exports.DocCommentHighlightRules = DocCommentHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>10182</int> </value> + <value> <int>10153</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-nix.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-nix.js.xml new file mode 100644 index 0000000000..10a21513d8 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-nix.js.xml @@ -0,0 +1,930 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.3</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-nix.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2012, Ajax.org B.V.\n + * All rights reserved.\n + * \n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + * \n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + *\n + * Contributor(s):\n + * \n + * Zef Hemel\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/mode/nix\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/c_cpp\', \'ace/tokenizer\', \'ace/mode/nix_highlight_rules\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var CMode = require("./c_cpp").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var NixHighlightRules = require("./nix_highlight_rules").NixHighlightRules;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + CMode.call(this);\n + this.HighlightRules = NixHighlightRules;\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, CMode);\n +\n +(function() { \n + this.lineCommentStart = "#";\n + this.blockComment = {start: "/*", end: "*/"};\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/c_cpp\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/c_cpp_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/range\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var Range = require("../range").Range;\n +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + this.HighlightRules = c_cppHighlightRules;\n +\n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CstyleBehaviour();\n +\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.lineCommentStart = "//";\n + this.blockComment = {start: "/*", end: "*/"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + var indent = this.$getIndent(line);\n +\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n + var tokens = tokenizedLine.tokens;\n + var endState = tokenizedLine.state;\n +\n + if (tokens.length && tokens[tokens.length-1].type == "comment") {\n + return indent;\n + }\n +\n + if (state == "start") {\n + var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n + if (match) {\n + indent += tab;\n + }\n + } else if (state == "doc-start") {\n + if (endState == "start") {\n + return "";\n + }\n + var match = line.match(/^\\s*(\\/?)\\*/);\n + if (match) {\n + if (match[1]) {\n + indent += " ";\n + }\n + indent += "* ";\n + }\n + }\n +\n + return indent;\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return this.$outdent.checkOutdent(line, input);\n + };\n +\n + this.autoOutdent = function(state, doc, row) {\n + this.$outdent.autoOutdent(doc, row);\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +define(\'ace/mode/c_cpp_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/doc_comment_highlight_rules\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var cFunctions = exports.cFunctions = "\\\\s*\\\\bhypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len)))\\\\b"\n +\n +var c_cppHighlightRules = function() {\n +\n + var keywordControls = (\n + "break|case|continue|default|do|else|for|goto|if|_Pragma|" +\n + "return|switch|while|catch|operator|try|throw|using"\n + );\n + \n + var storageType = (\n + "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" +\n + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" +\n + "class|wchar_t|template"\n + );\n +\n + var storageModifiers = (\n + "const|extern|register|restrict|static|volatile|inline|private:|" +\n + "protected:|public:|friend|explicit|virtual|export|mutable|typename"\n + );\n +\n + var keywordOperators = (\n + "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" +\n + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace"\n + );\n +\n + var builtinConstants = (\n + "NULL|true|false|TRUE|FALSE"\n + );\n +\n + var keywordMapper = this.$keywords = this.createKeywordMapper({\n + "keyword.control" : keywordControls,\n + "storage.type" : storageType,\n + "storage.modifier" : storageModifiers,\n + "keyword.operator" : keywordOperators,\n + "variable.language": "this",\n + "constant.language": builtinConstants\n + }, "identifier");\n +\n + var identifierRe = "[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\d\\\\$_\\u00a1-\\uffff]*\\\\b";\n +\n + this.$rules = {\n + "start" : [\n + {\n + token : "comment",\n + regex : "\\\\/\\\\/.*$"\n + },\n + DocCommentHighlightRules.getStartRule("doc-start"),\n + {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + next : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // multi line string start\n + regex : \'["].*\\\\\\\\$\',\n + next : "qqstring"\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : "string", // multi line string start\n + regex : "[\'].*\\\\\\\\$",\n + next : "qstring"\n + }, {\n + token : "constant.numeric", // hex\n + regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b"\n + }, {\n + token : "constant.numeric", // float\n + regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b"\n + }, {\n + token : "keyword", // pre-compiler directives\n + regex : "#\\\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\\\b",\n + next : "directive"\n + }, {\n + token : "keyword", // special case pre-compiler directive\n + regex : "(?:#\\\\s*endif)\\\\b"\n + }, {\n + token : "support.function.C99.c",\n + regex : cFunctions\n + }, {\n + token : keywordMapper,\n + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n + }, {\n + token : "keyword.operator",\n + regex : "!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)"\n + }, {\n + token : "punctuation.operator",\n + regex : "\\\\?|\\\\:|\\\\,|\\\\;|\\\\."\n + }, {\n + token : "paren.lparen",\n + regex : "[[({]"\n + }, {\n + token : "paren.rparen",\n + regex : "[\\\\])}]"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + }\n + ],\n + "comment" : [\n + {\n + token : "comment", // closing comment\n + regex : ".*?\\\\*\\\\/",\n + next : "start"\n + }, {\n + token : "comment", // comment spanning whole line\n + regex : ".+"\n + }\n + ],\n + "qqstring" : [\n + {\n + token : "string",\n + regex : \'(?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?"\',\n + next : "start"\n + }, {\n + token : "string",\n + regex : \'.+\'\n + }\n + ],\n + "qstring" : [\n + {\n + token : "string",\n + regex : "(?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?\'",\n + next : "start"\n + }, {\n + token : "string",\n + regex : \'.+\'\n + }\n + ],\n + "directive" : [\n + {\n + token : "constant.other.multiline",\n + regex : /\\\\/\n + },\n + {\n + token : "constant.other.multiline",\n + regex : /.*\\\\/\n + },\n + {\n + token : "constant.other",\n + regex : "\\\\s*<.+?>",\n + next : "start"\n + },\n + {\n + token : "constant.other", // single line\n + regex : \'\\\\s*["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\',\n + next : "start"\n + }, \n + {\n + token : "constant.other", // single line\n + regex : "\\\\s*[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']",\n + next : "start"\n + },\n + {\n + token : "constant.other",\n + regex : /[^\\\\\\/]+/,\n + next : "start"\n + }\n + ]\n + };\n +\n + this.embedRules(DocCommentHighlightRules, "doc-",\n + [ DocCommentHighlightRules.getEndRule("start") ]);\n +};\n +\n +oop.inherits(c_cppHighlightRules, TextHighlightRules);\n +\n +exports.c_cppHighlightRules = c_cppHighlightRules;\n +});\n +\n +define(\'ace/mode/doc_comment_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var DocCommentHighlightRules = function() {\n +\n + this.$rules = {\n + "start" : [ {\n + token : "comment.doc.tag",\n + regex : "@[\\\\w\\\\d_]+" // TODO: fix email addresses\n + }, {\n + token : "comment.doc.tag",\n + regex : "\\\\bTODO\\\\b"\n + }, {\n + defaultToken : "comment.doc"\n + }]\n + };\n +};\n +\n +oop.inherits(DocCommentHighlightRules, TextHighlightRules);\n +\n +DocCommentHighlightRules.getStartRule = function(start) {\n + return {\n + token : "comment.doc", // doc comment\n + regex : "\\\\/\\\\*(?=\\\\*)",\n + next : start\n + };\n +};\n +\n +DocCommentHighlightRules.getEndRule = function (start) {\n + return {\n + token : "comment.doc", // closing comment\n + regex : "\\\\*\\\\/",\n + next : start\n + };\n +};\n +\n +\n +exports.DocCommentHighlightRules = DocCommentHighlightRules;\n +\n +});\n +\n +define(\'ace/mode/matching_brace_outdent\', [\'require\', \'exports\', \'module\' , \'ace/range\'], function(require, exports, module) {\n +\n +\n +var Range = require("../range").Range;\n +\n +var MatchingBraceOutdent = function() {};\n +\n +(function() {\n +\n + this.checkOutdent = function(line, input) {\n + if (! /^\\s+$/.test(line))\n + return false;\n +\n + return /^\\s*\\}/.test(input);\n + };\n +\n + this.autoOutdent = function(doc, row) {\n + var line = doc.getLine(row);\n + var match = line.match(/^(\\s*\\})/);\n +\n + if (!match) return 0;\n +\n + var column = match[1].length;\n + var openBracePos = doc.findMatchingBracket({row: row, column: column});\n +\n + if (!openBracePos || openBracePos.row == row) return 0;\n +\n + var indent = this.$getIndent(doc.getLine(openBracePos.row));\n + doc.replace(new Range(row, 0, row, column-1), indent);\n + };\n +\n + this.$getIndent = function(line) {\n + return line.match(/^\\s*/)[0];\n + };\n +\n +}).call(MatchingBraceOutdent.prototype);\n +\n +exports.MatchingBraceOutdent = MatchingBraceOutdent;\n +});\n +\n +define(\'ace/mode/behaviour/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/token_iterator\', \'ace/lib/lang\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +var lang = require("../../lib/lang");\n +\n +var SAFE_INSERT_IN_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator"];\n +var SAFE_INSERT_BEFORE_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator", "comment"];\n +\n +\n +var autoInsertedBrackets = 0;\n +var autoInsertedRow = -1;\n +var autoInsertedLineEnd = "";\n +var maybeInsertedBrackets = 0;\n +var maybeInsertedRow = -1;\n +var maybeInsertedLineStart = "";\n +var maybeInsertedLineEnd = "";\n +\n +var CstyleBehaviour = function () {\n + \n + CstyleBehaviour.isSaneInsertion = function(editor, session) {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {\n + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))\n + return false;\n + }\n + iterator.stepForward();\n + return iterator.getCurrentTokenRow() !== cursor.row ||\n + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);\n + };\n + \n + CstyleBehaviour.$matchTokenType = function(token, types) {\n + return types.indexOf(token.type || token) > -1;\n + };\n + \n + CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))\n + autoInsertedBrackets = 0;\n + autoInsertedRow = cursor.row;\n + autoInsertedLineEnd = bracket + line.substr(cursor.column);\n + autoInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isMaybeInsertedClosing(cursor, line))\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = cursor.row;\n + maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n + maybeInsertedLineEnd = line.substr(cursor.column);\n + maybeInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n + return autoInsertedBrackets > 0 &&\n + cursor.row === autoInsertedRow &&\n + bracket === autoInsertedLineEnd[0] &&\n + line.substr(cursor.column) === autoInsertedLineEnd;\n + };\n + \n + CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n + return maybeInsertedBrackets > 0 &&\n + cursor.row === maybeInsertedRow &&\n + line.substr(cursor.column) === maybeInsertedLineEnd &&\n + line.substr(0, cursor.column) == maybeInsertedLineStart;\n + };\n + \n + CstyleBehaviour.popAutoInsertedClosing = function() {\n + autoInsertedLineEnd = autoInsertedLineEnd.substr(1);\n + autoInsertedBrackets--;\n + };\n + \n + CstyleBehaviour.clearMaybeInsertedClosing = function() {\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = -1;\n + };\n +\n + this.add("braces", "insertion", function (state, action, editor, session, text) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (text == \'{\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'{\' + selected + \'}\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + if (/[\\]\\}\\)]/.test(line[cursor.column])) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "}");\n + return {\n + text: \'{}\',\n + selection: [1, 1]\n + };\n + } else {\n + CstyleBehaviour.recordMaybeInsert(editor, session, "{");\n + return {\n + text: \'{\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == \'}\') {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\') {\n + var matching = session.$findOpeningBracket(\'}\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == "\\n" || text == "\\r\\n") {\n + var closing = "";\n + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n + closing = lang.stringRepeat("}", maybeInsertedBrackets);\n + CstyleBehaviour.clearMaybeInsertedClosing();\n + }\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\' || closing !== "") {\n + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, \'}\');\n + if (!openBracePos)\n + return null;\n +\n + var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());\n + var next_indent = this.$getIndent(line);\n +\n + return {\n + text: \'\\n\' + indent + \'\\n\' + next_indent + closing,\n + selection: [1, indent.length, 1, indent.length]\n + };\n + }\n + }\n + });\n +\n + this.add("braces", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'{\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.end.column, range.end.column + 1);\n + if (rightChar == \'}\') {\n + range.end.column++;\n + return range;\n + } else {\n + maybeInsertedBrackets--;\n + }\n + }\n + });\n +\n + this.add("parens", "insertion", function (state, action, editor, session, text) {\n + if (text == \'(\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'(\' + selected + \')\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, ")");\n + return {\n + text: \'()\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \')\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \')\') {\n + var matching = session.$findOpeningBracket(\')\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("parens", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'(\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \')\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("brackets", "insertion", function (state, action, editor, session, text) {\n + if (text == \'[\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'[\' + selected + \']\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "]");\n + return {\n + text: \'[]\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \']\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \']\') {\n + var matching = session.$findOpeningBracket(\']\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("brackets", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'[\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \']\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {\n + if (text == \'"\' || text == "\'") {\n + var quote = text;\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "\'" && selected != \'"\' && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: quote + selected + quote,\n + selection: false\n + };\n + } else {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var leftChar = line.substring(cursor.column-1, cursor.column);\n + if (leftChar == \'\\\\\') {\n + return null;\n + }\n + var tokens = session.getTokens(selection.start.row);\n + var col = 0, token;\n + var quotepos = -1; // Track whether we\'re inside an open quote.\n +\n + for (var x = 0; x < tokens.length; x++) {\n + token = tokens[x];\n + if (token.type == "string") {\n + quotepos = -1;\n + } else if (quotepos < 0) {\n + quotepos = token.value.indexOf(quote);\n + }\n + if ((token.value.length + col) > selection.start.column) {\n + break;\n + }\n + col += tokens[x].value.length;\n + }\n + if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {\n + if (!CstyleBehaviour.isSaneInsertion(editor, session))\n + return;\n + return {\n + text: quote + quote,\n + selection: [1,1]\n + };\n + } else if (token && token.type === "string") {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == quote) {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && (selected == \'"\' || selected == "\'")) {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == selected) {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n +};\n +\n +oop.inherits(CstyleBehaviour, Behaviour);\n +\n +exports.CstyleBehaviour = CstyleBehaviour;\n +});\n +\n +define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Range = require("../../range").Range;\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(commentRegex) {\n + if (commentRegex) {\n + this.foldingStartMarker = new RegExp(\n + this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n + );\n + this.foldingStopMarker = new RegExp(\n + this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n + );\n + }\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n + this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var line = session.getLine(row);\n + var match = line.match(this.foldingStartMarker);\n + if (match) {\n + var i = match.index;\n +\n + if (match[1])\n + return this.openingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i + match[0].length, 1);\n + }\n +\n + if (foldStyle !== "markbeginend")\n + return;\n +\n + var match = line.match(this.foldingStopMarker);\n + if (match) {\n + var i = match.index + match[0].length;\n +\n + if (match[1])\n + return this.closingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i, -1);\n + }\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +define(\'ace/mode/nix_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n + \n +\n + var oop = require("../lib/oop");\n + var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n + var NixHighlightRules = function() {\n +\n + var constantLanguage = "true|false";\n + var keywordControl = "with|import|if|else|then|inherit";\n + var keywordDeclaration = "let|in|rec";\n +\n + var keywordMapper = this.createKeywordMapper({\n + "constant.language.nix": constantLanguage,\n + "keyword.control.nix": keywordControl,\n + "keyword.declaration.nix": keywordDeclaration\n + }, "identifier");\n +\n + this.$rules = {\n + "start": [{\n + token: "comment",\n + regex: /#.*$/\n + }, {\n + token: "comment",\n + regex: /\\/\\*/,\n + next: "comment"\n + }, {\n + token: "constant",\n + regex: "<[^>]+>"\n + }, {\n + regex: "(==|!=|<=?|>=?)",\n + token: ["keyword.operator.comparison.nix"]\n + }, {\n + regex: "((?:[+*/%-]|\\\\~)=)",\n + token: ["keyword.operator.assignment.arithmetic.nix"]\n + }, {\n + regex: "=",\n + token: "keyword.operator.assignment.nix"\n + }, {\n + token: "string",\n + regex: "\'\'",\n + next: "qqdoc"\n + }, {\n + token: "string",\n + regex: "\'",\n + next: "qstring"\n + }, {\n + token: "string",\n + regex: \'"\',\n + push: "qqstring"\n + }, {\n + token: "constant.numeric", // hex\n + regex: "0[xX][0-9a-fA-F]+\\\\b"\n + }, {\n + token: "constant.numeric", // float\n + regex: "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n + }, {\n + token: keywordMapper,\n + regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n + }, {\n + regex: "}",\n + token: function(val, start, stack) {\n + return stack[1] && stack[1].charAt(0) == "q" ? "constant.language.escape" : "text";\n + },\n + next: "pop"\n + }],\n + "comment": [{\n + token: "comment", // closing comment\n + regex: ".*?\\\\*\\\\/",\n + next: "start"\n + }, {\n + token: "comment", // comment spanning whole line\n + regex: ".+"\n + }],\n + "qqdoc": [\n + {\n + token: "constant.language.escape",\n + regex: /\\$\\{/,\n + push: "start"\n + }, {\n + token: "string",\n + regex: "\'\'",\n + next: "pop"\n + }, {\n + defaultToken: "string"\n + }],\n + "qqstring": [\n + {\n + token: "constant.language.escape",\n + regex: /\\$\\{/,\n + push: "start"\n + }, {\n + token: "string",\n + regex: \'"\',\n + next: "pop"\n + }, {\n + defaultToken: "string"\n + }],\n + "qstring": [\n + {\n + token: "constant.language.escape",\n + regex: /\\$\\{/,\n + push: "start"\n + }, {\n + token: "string",\n + regex: "\'",\n + next: "pop"\n + }, {\n + defaultToken: "string"\n + }]\n + };\n +\n + this.normalizeRules();\n + };\n +\n + oop.inherits(NixHighlightRules, TextHighlightRules);\n +\n + exports.NixHighlightRules = NixHighlightRules;\n +}); + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>35142</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-objectivec.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-objectivec.js.xml index 0366485e78..5edad2ddac 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-objectivec.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-objectivec.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.42</string> </value> + <value> <string>ts83646621.6</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,10 +67,8 @@ var ObjectiveCHighlightRules = require("./objectivec_highlight_rules").Objective var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new ObjectiveCHighlightRules();\n + this.HighlightRules = ObjectiveCHighlightRules;\n this.foldingRules = new CStyleFoldMode();\n -\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -691,7 +689,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>63204</int> </value> + <value> <int>63140</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ocaml.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ocaml.js.xml index 573970e110..21a21daa91 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ocaml.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ocaml.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.49</string> </value> + <value> <string>ts83646621.58</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,7 +63,8 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new OcamlHighlightRules().getRules());\n + this.HighlightRules = OcamlHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n };\n oop.inherits(Mode, TextMode);\n @@ -97,7 +98,7 @@ var indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|with))\\s*$/;\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n \n if (!(tokens.length && tokens[tokens.length - 1].type === \'comment\') &&\n state === \'start\' && indenter.test(line))\n @@ -475,7 +476,7 @@ exports.MatchingBraceOutdent = MatchingBraceOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>23167</int> </value> + <value> <int>23148</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-pascal.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-pascal.js.xml index 6adefd469c..1ab1a29b1d 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-pascal.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-pascal.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.6</string> </value> + <value> <string>ts83646621.57</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,9 +67,8 @@ var PascalHighlightRules = require("./pascal_highlight_rules").PascalHighlightRu var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - var highlighter = new PascalHighlightRules();\n + this.HighlightRules = PascalHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -265,7 +264,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>9336</int> </value> + <value> <int>9273</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-perl.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-perl.js.xml index b1e5a79fd2..c3723345f0 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-perl.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-perl.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.74</string> </value> + <value> <string>ts83646621.55</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,7 +64,8 @@ var Range = require("../range").Range;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new PerlHighlightRules().getRules());\n + this.HighlightRules = PerlHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new CStyleFoldMode({start: "^=(begin|item)\\\\b", end: "^=(cut)\\\\b"});\n };\n @@ -82,7 +83,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -161,9 +162,6 @@ var PerlHighlightRules = function() {\n this.$rules = {\n "start" : [\n {\n - token : "comment",\n - regex : "#.*$"\n - }, {\n token : "comment.doc",\n regex : "^=(?:begin|item)\\\\b",\n next : "block_comment"\n @@ -195,7 +193,10 @@ var PerlHighlightRules = function() {\n regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n }, {\n token : "keyword.operator",\n - regex : "\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"\n + regex : "%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"\n + }, {\n + token : "comment",\n + regex : "#.*$"\n }, {\n token : "lparen",\n regex : "[[({]"\n @@ -348,7 +349,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>11746</int> </value> + <value> <int>11735</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-pgsql.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-pgsql.js.xml index 47c67b107d..046a6d8dc1 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-pgsql.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-pgsql.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155561.89</string> </value> + <value> <string>ts83646621.54</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -61,11 +61,11 @@ var PgsqlHighlightRules = require("./pgsql_highlight_rules").PgsqlHighlightRules var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new PgsqlHighlightRules().getRules());\n + this.HighlightRules = PgsqlHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n -(function() { \n +(function() {\n this.lineCommentStart = "--";\n this.blockComment = {start: "/*", end: "*/"};\n \n @@ -712,9 +712,6 @@ var PerlHighlightRules = function() {\n this.$rules = {\n "start" : [\n {\n - token : "comment",\n - regex : "#.*$"\n - }, {\n token : "comment.doc",\n regex : "^=(?:begin|item)\\\\b",\n next : "block_comment"\n @@ -746,7 +743,10 @@ var PerlHighlightRules = function() {\n regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n }, {\n token : "keyword.operator",\n - regex : "\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"\n + regex : "%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"\n + }, {\n + token : "comment",\n + regex : "#.*$"\n }, {\n token : "lparen",\n regex : "[[({]"\n @@ -961,7 +961,7 @@ exports.PythonHighlightRules = PythonHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>53780</int> </value> + <value> <int>53753</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-php.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-php.js.xml index 5c31519101..a7146be405 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-php.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-php.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155562.03</string> </value> + <value> <string>ts83646621.52</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>180760</int> </value> + <value> <int>186061</int> </value> </item> <item> <key> <string>title</string> </key> @@ -97,7 +97,7 @@ var unicode = require("../unicode");\n var Mode = function(opts) {\n var inline = opts && opts.inline;\n var HighlightRules = inline ? PhpLangHighlightRules : PhpHighlightRules;\n - this.$tokenizer = new Tokenizer(new HighlightRules().getRules());\n + this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -127,7 +127,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -1021,7 +1021,30 @@ var PhpLangHighlightRules = function() {\n \'ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|\' +\n \'ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|\' +\n \'ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|\' +\n - \'ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|\' +\n + \'ociserverversion|ocisetprefetch| + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|\' +\n \'PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|\' +\n \'PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|\' +\n \'PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|\' +\n @@ -1132,7 +1155,7 @@ var PhpLangHighlightRules = function() {\n next: "heredoc"\n }, {\n token : "keyword.operator",\n - regex : "::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)"\n + regex : "::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)"\n }, {\n token : "paren.lparen",\n regex : "[[({]"\n @@ -1147,17 +1170,17 @@ var PhpLangHighlightRules = function() {\n "heredoc" : [\n {\n onMatch : function(value, currentSate, stack) {\n - if (stack[1] + ";" != value)\n + if (stack[1] != value)\n return "string";\n stack.shift();\n stack.shift();\n return "markup.list"\n },\n - regex : "^\\\\w+;$",\n + regex : "^\\\\w+(?=;?$)",\n next: "start"\n }, {\n token: "string",\n - regex : ".*",\n + regex : ".*"\n }\n ],\n "comment" : [\n @@ -1201,21 +1224,27 @@ oop.inherits(PhpLangHighlightRules, TextHighlightRules);\n var PhpHighlightRules = function() {\n HtmlHighlightRules.call(this);\n \n - for (var i in this.$rules) {\n - this.$rules[i].unshift({\n + var startRules = [\n + {\n token : "support.php_tag", // php open tag\n regex : "<\\\\?(?:php|=)?",\n push : "php-start"\n - });\n - }\n + }\n + ];\n \n - this.embedRules(PhpLangHighlightRules, "php-");\n + var endRules = [\n + {\n + token : "support.php_tag", // php close tag\n + regex : "\\\\?>",\n + next : "pop"\n + }\n + ];\n +\n + for (var key in this.$rules)\n + this.$rules[key].unshift.apply(this.$rules[key], startRules);\n +\n + this.embedRules(PhpLangHighlightRules, "php-", endRules, ["start"]);\n \n - this.$rules["php-start"].unshift({\n - token : "support.php_tag", // php close tag\n - regex : "\\\\?>",\n - next : "pop"\n - });\n this.normalizeRules();\n };\n \n @@ -1269,15 +1298,14 @@ exports.DocCommentHighlightRules = DocCommentHighlightRules;\n \n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -1286,6 +1314,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -1299,78 +1328,66 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "text",\n - regex : "\\\\s+"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n - token : "constant.character.entity",\n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n - }, {\n - defaultToken : "comment"\n - } ]\n - };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n \n exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n @@ -1400,152 +1417,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1603,7 +1585,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -1678,7 +1661,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -1723,8 +1706,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -1811,6 +1794,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1854,6 +1845,193 @@ oop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n exports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n });\n \n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n \n @@ -2344,6 +2522,12 @@ oop.inherits(FoldMode, BaseFoldMode);\n ]]></string> </value> </item> + <item> + <key> <string>next</string> </key> + <value> + <none/> + </value> + </item> </dictionary> </pickle> </record> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-plain_text.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-plain_text.js.xml new file mode 100644 index 0000000000..358a9e9e02 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-plain_text.js.xml @@ -0,0 +1,94 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.28</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-plain_text.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string>/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/mode/plain_text\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/text_highlight_rules\', \'ace/mode/behaviour\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var Behaviour = require("./behaviour").Behaviour;\n +\n +var Mode = function() {\n + this.HighlightRules = TextHighlightRules;\n + this.$behaviour = new Behaviour();\n +};\n +\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n + this.type = "text";\n + this.getNextLineIndent = function(state, line, tab) {\n + return \'\';\n + };\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>2453</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-powershell.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-powershell.js.xml index 4c342caadf..81262c618b 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-powershell.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-powershell.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155562.21</string> </value> + <value> <string>ts83646621.46</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -34,7 +34,7 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new PowershellHighlightRules().getRules());\n + this.HighlightRules = PowershellHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode({start: "^\\\\s*(<#)", end: "^[#\\\\s]>\\\\s*$"});\n @@ -49,7 +49,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -650,7 +650,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>25803</int> </value> + <value> <int>25779</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-prolog.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-prolog.js.xml index 27c5a7d43d..0f8d9337c2 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-prolog.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-prolog.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155562.31</string> </value> + <value> <string>ts83646621.44</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,9 +67,8 @@ var PrologHighlightRules = require("./prolog_highlight_rules").PrologHighlightRu var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new PrologHighlightRules();\n + this.HighlightRules = PrologHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -345,7 +344,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>13071</int> </value> + <value> <int>13008</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-properties.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-properties.js.xml index b979f2174c..aa608fc378 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-properties.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-properties.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155562.45</string> </value> + <value> <string>ts83646621.42</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -59,8 +59,7 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var PropertiesHighlightRules = require("./properties_highlight_rules").PropertiesHighlightRules;\n \n var Mode = function() {\n - var highlighter = new PropertiesHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = PropertiesHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -91,7 +90,7 @@ var PropertiesHighlightRules = function() {\n next : "value"\n }, {\n token : "constant.language.escape",\n - regex : escapeRe,\n + regex : escapeRe\n }, {\n defaultToken: "variable"\n }\n @@ -129,7 +128,7 @@ exports.PropertiesHighlightRules = PropertiesHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>3731</int> </value> + <value> <int>3667</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-protobuf.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-protobuf.js.xml new file mode 100644 index 0000000000..ff990e9aa7 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-protobuf.js.xml @@ -0,0 +1,880 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.26</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-protobuf.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2012, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + *\n + * Contributor(s):\n + *\n + * Zef Hemel\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/mode/protobuf\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/c_cpp\', \'ace/tokenizer\', \'ace/mode/protobuf_highlight_rules\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var CMode = require("./c_cpp").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var ProtobufHighlightRules = require("./protobuf_highlight_rules").ProtobufHighlightRules;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + CMode.call(this);\n + var highlighter = new ProtobufHighlightRules();\n + this.foldingRules = new CStyleFoldMode();\n +\n + this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.$keywordList = highlighter.$keywordList;\n +};\n +oop.inherits(Mode, CMode);\n +\n +(function() {\n + this.lineCommentStart = "//";\n + this.blockComment = {start: "/*", end: "*/"};\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/c_cpp\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/c_cpp_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/range\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var c_cppHighlightRules = require("./c_cpp_highlight_rules").c_cppHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var Range = require("../range").Range;\n +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + this.HighlightRules = c_cppHighlightRules;\n +\n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CstyleBehaviour();\n +\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.lineCommentStart = "//";\n + this.blockComment = {start: "/*", end: "*/"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + var indent = this.$getIndent(line);\n +\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n + var tokens = tokenizedLine.tokens;\n + var endState = tokenizedLine.state;\n +\n + if (tokens.length && tokens[tokens.length-1].type == "comment") {\n + return indent;\n + }\n +\n + if (state == "start") {\n + var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n + if (match) {\n + indent += tab;\n + }\n + } else if (state == "doc-start") {\n + if (endState == "start") {\n + return "";\n + }\n + var match = line.match(/^\\s*(\\/?)\\*/);\n + if (match) {\n + if (match[1]) {\n + indent += " ";\n + }\n + indent += "* ";\n + }\n + }\n +\n + return indent;\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return this.$outdent.checkOutdent(line, input);\n + };\n +\n + this.autoOutdent = function(state, doc, row) {\n + this.$outdent.autoOutdent(doc, row);\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +define(\'ace/mode/c_cpp_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/doc_comment_highlight_rules\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var cFunctions = exports.cFunctions = "\\\\s*\\\\bhypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len)))\\\\b"\n +\n +var c_cppHighlightRules = function() {\n +\n + var keywordControls = (\n + "break|case|continue|default|do|else|for|goto|if|_Pragma|" +\n + "return|switch|while|catch|operator|try|throw|using"\n + );\n + \n + var storageType = (\n + "asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|" +\n + "_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|" +\n + "class|wchar_t|template"\n + );\n +\n + var storageModifiers = (\n + "const|extern|register|restrict|static|volatile|inline|private:|" +\n + "protected:|public:|friend|explicit|virtual|export|mutable|typename"\n + );\n +\n + var keywordOperators = (\n + "and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq" +\n + "const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace"\n + );\n +\n + var builtinConstants = (\n + "NULL|true|false|TRUE|FALSE"\n + );\n +\n + var keywordMapper = this.$keywords = this.createKeywordMapper({\n + "keyword.control" : keywordControls,\n + "storage.type" : storageType,\n + "storage.modifier" : storageModifiers,\n + "keyword.operator" : keywordOperators,\n + "variable.language": "this",\n + "constant.language": builtinConstants\n + }, "identifier");\n +\n + var identifierRe = "[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\d\\\\$_\\u00a1-\\uffff]*\\\\b";\n +\n + this.$rules = {\n + "start" : [\n + {\n + token : "comment",\n + regex : "\\\\/\\\\/.*$"\n + },\n + DocCommentHighlightRules.getStartRule("doc-start"),\n + {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + next : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // multi line string start\n + regex : \'["].*\\\\\\\\$\',\n + next : "qqstring"\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : "string", // multi line string start\n + regex : "[\'].*\\\\\\\\$",\n + next : "qstring"\n + }, {\n + token : "constant.numeric", // hex\n + regex : "0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b"\n + }, {\n + token : "constant.numeric", // float\n + regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b"\n + }, {\n + token : "keyword", // pre-compiler directives\n + regex : "#\\\\s*(?:include|import|pragma|line|define|undef|if|ifdef|else|elif|ifndef)\\\\b",\n + next : "directive"\n + }, {\n + token : "keyword", // special case pre-compiler directive\n + regex : "(?:#\\\\s*endif)\\\\b"\n + }, {\n + token : "support.function.C99.c",\n + regex : cFunctions\n + }, {\n + token : keywordMapper,\n + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n + }, {\n + token : "keyword.operator",\n + regex : "!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)"\n + }, {\n + token : "punctuation.operator",\n + regex : "\\\\?|\\\\:|\\\\,|\\\\;|\\\\."\n + }, {\n + token : "paren.lparen",\n + regex : "[[({]"\n + }, {\n + token : "paren.rparen",\n + regex : "[\\\\])}]"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + }\n + ],\n + "comment" : [\n + {\n + token : "comment", // closing comment\n + regex : ".*?\\\\*\\\\/",\n + next : "start"\n + }, {\n + token : "comment", // comment spanning whole line\n + regex : ".+"\n + }\n + ],\n + "qqstring" : [\n + {\n + token : "string",\n + regex : \'(?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?"\',\n + next : "start"\n + }, {\n + token : "string",\n + regex : \'.+\'\n + }\n + ],\n + "qstring" : [\n + {\n + token : "string",\n + regex : "(?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?\'",\n + next : "start"\n + }, {\n + token : "string",\n + regex : \'.+\'\n + }\n + ],\n + "directive" : [\n + {\n + token : "constant.other.multiline",\n + regex : /\\\\/\n + },\n + {\n + token : "constant.other.multiline",\n + regex : /.*\\\\/\n + },\n + {\n + token : "constant.other",\n + regex : "\\\\s*<.+?>",\n + next : "start"\n + },\n + {\n + token : "constant.other", // single line\n + regex : \'\\\\s*["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\',\n + next : "start"\n + }, \n + {\n + token : "constant.other", // single line\n + regex : "\\\\s*[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']",\n + next : "start"\n + },\n + {\n + token : "constant.other",\n + regex : /[^\\\\\\/]+/,\n + next : "start"\n + }\n + ]\n + };\n +\n + this.embedRules(DocCommentHighlightRules, "doc-",\n + [ DocCommentHighlightRules.getEndRule("start") ]);\n +};\n +\n +oop.inherits(c_cppHighlightRules, TextHighlightRules);\n +\n +exports.c_cppHighlightRules = c_cppHighlightRules;\n +});\n +\n +define(\'ace/mode/doc_comment_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var DocCommentHighlightRules = function() {\n +\n + this.$rules = {\n + "start" : [ {\n + token : "comment.doc.tag",\n + regex : "@[\\\\w\\\\d_]+" // TODO: fix email addresses\n + }, {\n + token : "comment.doc.tag",\n + regex : "\\\\bTODO\\\\b"\n + }, {\n + defaultToken : "comment.doc"\n + }]\n + };\n +};\n +\n +oop.inherits(DocCommentHighlightRules, TextHighlightRules);\n +\n +DocCommentHighlightRules.getStartRule = function(start) {\n + return {\n + token : "comment.doc", // doc comment\n + regex : "\\\\/\\\\*(?=\\\\*)",\n + next : start\n + };\n +};\n +\n +DocCommentHighlightRules.getEndRule = function (start) {\n + return {\n + token : "comment.doc", // closing comment\n + regex : "\\\\*\\\\/",\n + next : start\n + };\n +};\n +\n +\n +exports.DocCommentHighlightRules = DocCommentHighlightRules;\n +\n +});\n +\n +define(\'ace/mode/matching_brace_outdent\', [\'require\', \'exports\', \'module\' , \'ace/range\'], function(require, exports, module) {\n +\n +\n +var Range = require("../range").Range;\n +\n +var MatchingBraceOutdent = function() {};\n +\n +(function() {\n +\n + this.checkOutdent = function(line, input) {\n + if (! /^\\s+$/.test(line))\n + return false;\n +\n + return /^\\s*\\}/.test(input);\n + };\n +\n + this.autoOutdent = function(doc, row) {\n + var line = doc.getLine(row);\n + var match = line.match(/^(\\s*\\})/);\n +\n + if (!match) return 0;\n +\n + var column = match[1].length;\n + var openBracePos = doc.findMatchingBracket({row: row, column: column});\n +\n + if (!openBracePos || openBracePos.row == row) return 0;\n +\n + var indent = this.$getIndent(doc.getLine(openBracePos.row));\n + doc.replace(new Range(row, 0, row, column-1), indent);\n + };\n +\n + this.$getIndent = function(line) {\n + return line.match(/^\\s*/)[0];\n + };\n +\n +}).call(MatchingBraceOutdent.prototype);\n +\n +exports.MatchingBraceOutdent = MatchingBraceOutdent;\n +});\n +\n +define(\'ace/mode/behaviour/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/token_iterator\', \'ace/lib/lang\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +var lang = require("../../lib/lang");\n +\n +var SAFE_INSERT_IN_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator"];\n +var SAFE_INSERT_BEFORE_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator", "comment"];\n +\n +\n +var autoInsertedBrackets = 0;\n +var autoInsertedRow = -1;\n +var autoInsertedLineEnd = "";\n +var maybeInsertedBrackets = 0;\n +var maybeInsertedRow = -1;\n +var maybeInsertedLineStart = "";\n +var maybeInsertedLineEnd = "";\n +\n +var CstyleBehaviour = function () {\n + \n + CstyleBehaviour.isSaneInsertion = function(editor, session) {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {\n + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))\n + return false;\n + }\n + iterator.stepForward();\n + return iterator.getCurrentTokenRow() !== cursor.row ||\n + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);\n + };\n + \n + CstyleBehaviour.$matchTokenType = function(token, types) {\n + return types.indexOf(token.type || token) > -1;\n + };\n + \n + CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))\n + autoInsertedBrackets = 0;\n + autoInsertedRow = cursor.row;\n + autoInsertedLineEnd = bracket + line.substr(cursor.column);\n + autoInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isMaybeInsertedClosing(cursor, line))\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = cursor.row;\n + maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n + maybeInsertedLineEnd = line.substr(cursor.column);\n + maybeInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n + return autoInsertedBrackets > 0 &&\n + cursor.row === autoInsertedRow &&\n + bracket === autoInsertedLineEnd[0] &&\n + line.substr(cursor.column) === autoInsertedLineEnd;\n + };\n + \n + CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n + return maybeInsertedBrackets > 0 &&\n + cursor.row === maybeInsertedRow &&\n + line.substr(cursor.column) === maybeInsertedLineEnd &&\n + line.substr(0, cursor.column) == maybeInsertedLineStart;\n + };\n + \n + CstyleBehaviour.popAutoInsertedClosing = function() {\n + autoInsertedLineEnd = autoInsertedLineEnd.substr(1);\n + autoInsertedBrackets--;\n + };\n + \n + CstyleBehaviour.clearMaybeInsertedClosing = function() {\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = -1;\n + };\n +\n + this.add("braces", "insertion", function (state, action, editor, session, text) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (text == \'{\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'{\' + selected + \'}\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + if (/[\\]\\}\\)]/.test(line[cursor.column])) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "}");\n + return {\n + text: \'{}\',\n + selection: [1, 1]\n + };\n + } else {\n + CstyleBehaviour.recordMaybeInsert(editor, session, "{");\n + return {\n + text: \'{\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == \'}\') {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\') {\n + var matching = session.$findOpeningBracket(\'}\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == "\\n" || text == "\\r\\n") {\n + var closing = "";\n + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n + closing = lang.stringRepeat("}", maybeInsertedBrackets);\n + CstyleBehaviour.clearMaybeInsertedClosing();\n + }\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\' || closing !== "") {\n + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, \'}\');\n + if (!openBracePos)\n + return null;\n +\n + var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());\n + var next_indent = this.$getIndent(line);\n +\n + return {\n + text: \'\\n\' + indent + \'\\n\' + next_indent + closing,\n + selection: [1, indent.length, 1, indent.length]\n + };\n + }\n + }\n + });\n +\n + this.add("braces", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'{\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.end.column, range.end.column + 1);\n + if (rightChar == \'}\') {\n + range.end.column++;\n + return range;\n + } else {\n + maybeInsertedBrackets--;\n + }\n + }\n + });\n +\n + this.add("parens", "insertion", function (state, action, editor, session, text) {\n + if (text == \'(\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'(\' + selected + \')\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, ")");\n + return {\n + text: \'()\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \')\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \')\') {\n + var matching = session.$findOpeningBracket(\')\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("parens", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'(\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \')\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("brackets", "insertion", function (state, action, editor, session, text) {\n + if (text == \'[\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'[\' + selected + \']\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "]");\n + return {\n + text: \'[]\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \']\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \']\') {\n + var matching = session.$findOpeningBracket(\']\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("brackets", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'[\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \']\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {\n + if (text == \'"\' || text == "\'") {\n + var quote = text;\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "\'" && selected != \'"\' && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: quote + selected + quote,\n + selection: false\n + };\n + } else {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var leftChar = line.substring(cursor.column-1, cursor.column);\n + if (leftChar == \'\\\\\') {\n + return null;\n + }\n + var tokens = session.getTokens(selection.start.row);\n + var col = 0, token;\n + var quotepos = -1; // Track whether we\'re inside an open quote.\n +\n + for (var x = 0; x < tokens.length; x++) {\n + token = tokens[x];\n + if (token.type == "string") {\n + quotepos = -1;\n + } else if (quotepos < 0) {\n + quotepos = token.value.indexOf(quote);\n + }\n + if ((token.value.length + col) > selection.start.column) {\n + break;\n + }\n + col += tokens[x].value.length;\n + }\n + if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {\n + if (!CstyleBehaviour.isSaneInsertion(editor, session))\n + return;\n + return {\n + text: quote + quote,\n + selection: [1,1]\n + };\n + } else if (token && token.type === "string") {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == quote) {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && (selected == \'"\' || selected == "\'")) {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == selected) {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n +};\n +\n +oop.inherits(CstyleBehaviour, Behaviour);\n +\n +exports.CstyleBehaviour = CstyleBehaviour;\n +});\n +\n +define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Range = require("../../range").Range;\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(commentRegex) {\n + if (commentRegex) {\n + this.foldingStartMarker = new RegExp(\n + this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n + );\n + this.foldingStopMarker = new RegExp(\n + this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n + );\n + }\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n + this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var line = session.getLine(row);\n + var match = line.match(this.foldingStartMarker);\n + if (match) {\n + var i = match.index;\n +\n + if (match[1])\n + return this.openingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i + match[0].length, 1);\n + }\n +\n + if (foldStyle !== "markbeginend")\n + return;\n +\n + var match = line.match(this.foldingStopMarker);\n + if (match) {\n + var i = match.index + match[0].length;\n +\n + if (match[1])\n + return this.closingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i, -1);\n + }\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +define(\'ace/mode/protobuf_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n + \n +\n + var oop = require("../lib/oop");\n + var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n + var ProtobufHighlightRules = function() {\n +\n + var builtinTypes = "double|float|int32|int64|uint32|uint64|sint32|" +\n + "sint64|fixed32|fixed64|sfixed32|sfixed64|bool|" +\n + "string|bytes";\n + var keywordDeclaration = "message|required|optional|repeated|package|" +\n + "import|option|enum";\n +\n + var keywordMapper = this.createKeywordMapper({\n + "keyword.declaration.protobuf": keywordDeclaration,\n + "support.type": builtinTypes\n + }, "identifier");\n +\n + this.$rules = {\n + "start": [{\n + token: "comment",\n + regex: /\\/\\/.*$/\n + }, {\n + token: "comment",\n + regex: /\\/\\*/,\n + next: "comment"\n + }, {\n + token: "constant",\n + regex: "<[^>]+>"\n + }, {\n + regex: "=",\n + token: "keyword.operator.assignment.protobuf"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : \'[\\\'](?:(?:\\\\\\\\.)|(?:[^\\\'\\\\\\\\]))*?[\\\']\'\n + }, {\n + token: "constant.numeric", // hex\n + regex: "0[xX][0-9a-fA-F]+\\\\b"\n + }, {\n + token: "constant.numeric", // float\n + regex: "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n + }, {\n + token: keywordMapper,\n + regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n + }],\n + "comment": [{\n + token: "comment", // closing comment\n + regex: ".*?\\\\*\\\\/",\n + next: "start"\n + }, {\n + token: "comment", // comment spanning whole line\n + regex: ".+"\n + }]\n + };\n +\n + this.normalizeRules();\n + };\n +\n + oop.inherits(ProtobufHighlightRules, TextHighlightRules);\n +\n + exports.ProtobufHighlightRules = ProtobufHighlightRules;\n +}); + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>33700</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-python.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-python.js.xml index 9f0a63722d..de0e3dfcf3 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-python.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-python.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155562.6</string> </value> + <value> <string>ts83646621.41</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,7 +63,7 @@ var PythonFoldMode = require("./folding/pythonic").FoldMode;\n var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new PythonHighlightRules().getRules());\n + this.HighlightRules = PythonHighlightRules;\n this.foldingRules = new PythonFoldMode("\\\\:");\n };\n oop.inherits(Mode, TextMode);\n @@ -75,7 +75,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -104,7 +104,7 @@ oop.inherits(Mode, TextMode);\n if (input !== "\\r\\n" && input !== "\\r" && input !== "\\n")\n return false;\n \n - var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n \n if (!tokens)\n return false;\n @@ -326,7 +326,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>10385</int> </value> + <value> <int>10365</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-r.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-r.js.xml index ca981de3ec..e96031189b 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-r.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-r.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155562.99</string> </value> + <value> <string>ts83646621.39</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -32,11 +32,31 @@ * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n - * This program is licensed to you under the terms of version 3 of the\n - * GNU Affero General Public License. This program is distributed WITHOUT\n - * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n - * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n define(\'ace/mode/r\', [\'require\', \'exports\', \'module\' , \'ace/range\', \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/text_highlight_rules\', \'ace/mode/r_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/unicode\'], function(require, exports, module) {\n @@ -53,7 +73,7 @@ define(\'ace/mode/r\', [\'require\', \'exports\', \'module\' , \'ace/range\', \' \n var Mode = function()\n {\n - this.$tokenizer = new Tokenizer(new RHighlightRules().getRules());\n + this.HighlightRules = RHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n };\n oop.inherits(Mode, TextMode);\n @@ -348,7 +368,7 @@ exports.MatchingBraceOutdent = MatchingBraceOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>10236</int> </value> + <value> <int>11377</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rdoc.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rdoc.js.xml index 1815bba2fa..94ec4efa8e 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rdoc.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rdoc.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155562.71</string> </value> + <value> <string>ts83646621.38</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -27,11 +27,36 @@ *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n - * This program is licensed to you under the terms of version 3 of the\n - * GNU Affero General Public License. This program is distributed WITHOUT\n - * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n - * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n + * The Initial Developer of the Original Code is\n + * Ajax.org B.V.\n + * Portions created by the Initial Developer are Copyright (C) 2010\n + * the Initial Developer. All Rights Reserved.\n + *\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n define(\'ace/mode/rdoc\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/text_highlight_rules\', \'ace/mode/rdoc_highlight_rules\', \'ace/mode/matching_brace_outdent\'], function(require, exports, module) {\n @@ -45,7 +70,7 @@ var RDocHighlightRules = require("./rdoc_highlight_rules").RDocHighlightRules;\n var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n \n var Mode = function(suppressHighlighting) {\n -\tthis.$tokenizer = new Tokenizer(new RDocHighlightRules().getRules());\n +\tthis.HighlightRules = RDocHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n };\n oop.inherits(Mode, TextMode);\n @@ -216,7 +241,7 @@ exports.MatchingBraceOutdent = MatchingBraceOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>6173</int> </value> + <value> <int>7498</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rhtml.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rhtml.js.xml index 70929e37b6..4914f98415 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rhtml.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rhtml.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155562.84</string> </value> + <value> <string>ts83646621.37</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>85016</int> </value> + <value> <int>99555</int> </value> </item> <item> <key> <string>title</string> </key> @@ -59,12 +59,31 @@ * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n - * This program is licensed to you under the terms of version 3 of the\n - * GNU Affero General Public License. This program is distributed WITHOUT\n - * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n - * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n + * Distributed under the BSD license:\n *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n */\n \n define(\'ace/mode/rhtml\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/html\', \'ace/tokenizer\', \'ace/mode/rhtml_highlight_rules\'], function(require, exports, module) {\n @@ -78,7 +97,7 @@ var RHtmlHighlightRules = require("./rhtml_highlight_rules").RHtmlHighlightRules \n var Mode = function(doc, session) {\n this.$session = session;\n - this.$tokenizer = new Tokenizer(new RHtmlHighlightRules().getRules());\n + this.HighlightRules = RHtmlHighlightRules;\n };\n oop.inherits(Mode, HtmlMode);\n \n @@ -98,7 +117,7 @@ oop.inherits(Mode, HtmlMode);\n exports.Mode = Mode;\n });\n \n -define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\'], function(require, exports, module) {\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n @@ -109,13 +128,13 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n \n var Mode = function() {\n - var highlighter = new HtmlHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -136,6 +155,10 @@ oop.inherits(Mode, TextMode);\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n \n }).call(Mode.prototype);\n \n @@ -156,7 +179,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -171,7 +195,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -277,7 +301,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -352,7 +377,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -397,8 +422,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -485,6 +510,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1002,7 +1035,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1016,7 +1049,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1083,152 +1116,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1316,15 +1314,14 @@ oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -1333,6 +1330,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -1346,80 +1344,255 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n token : "text",\n regex : "\\\\s+"\n }, {\n - token : "constant.character.entity",\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n }, {\n - defaultToken : "comment"\n - } ]\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n \n -exports.HtmlHighlightRules = HtmlHighlightRules;\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n });\n \n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n @@ -1502,14 +1675,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1524,7 +1692,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1534,8 +1702,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1565,14 +1733,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1586,6 +1749,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1594,8 +1760,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1612,11 +1778,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1695,6 +1861,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -1771,7 +1939,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -1804,7 +1972,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -1837,7 +2005,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -1951,6 +2119,286 @@ oop.inherits(FoldMode, BaseFoldMode);\n }).call(FoldMode.prototype);\n \n });\n +\n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n define(\'ace/mode/rhtml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/r_highlight_rules\', \'ace/mode/html_highlight_rules\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n \n \n @@ -1960,21 +2408,21 @@ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n \n var RHtmlHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n \n - this.$rules = new HtmlHighlightRules().getRules();\n this.$rules["start"].unshift({\n token: "support.function.codebegin",\n regex: "^<" + "!--\\\\s*begin.rcode\\\\s*(?:.*)",\n next: "r-start"\n });\n \n - var rRules = new RHighlightRules().getRules();\n - this.addRules(rRules, "r-");\n - this.$rules["r-start"].unshift({\n + this.embedRules(RHighlightRules, "r-", [{\n token: "support.function.codeend",\n regex: "^\\\\s*end.rcode\\\\s*-->",\n next: "start"\n - });\n + }], ["start"]);\n +\n + this.normalizeRules();\n };\n oop.inherits(RHtmlHighlightRules, TextHighlightRules);\n \n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ruby.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ruby.js.xml index 0f88ccf96f..bd942c127e 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ruby.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-ruby.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155563.14</string> </value> + <value> <string>ts83646621.35</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,7 +64,7 @@ var Range = require("../range").Range;\n var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new RubyHighlightRules().getRules());\n + this.HighlightRules = RubyHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new FoldMode();\n };\n @@ -78,7 +78,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -463,7 +463,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>17027</int> </value> + <value> <int>17003</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rust.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rust.js.xml index f9ecb06ac9..59a68a25b5 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rust.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-rust.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155563.28</string> </value> + <value> <string>ts83646621.33</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,9 +67,8 @@ var RustHighlightRules = require("./rust_highlight_rules").RustHighlightRules;\n var FoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - var highlighter = new RustHighlightRules();\n + this.HighlightRules = RustHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -236,7 +235,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>9593</int> </value> + <value> <int>9530</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sass.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sass.js.xml index 17235ff798..519a750ded 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sass.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sass.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155563.4</string> </value> + <value> <string>ts83646621.32</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var SassHighlightRules = require("./sass_highlight_rules").SassHighlightRules;\n var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new SassHighlightRules().getRules());\n + this.HighlightRules = SassHighlightRules;\n this.foldingRules = new FoldMode();\n };\n oop.inherits(Mode, TextMode);\n @@ -474,7 +474,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>18814</int> </value> + <value> <int>18786</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scad.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scad.js.xml index 87f479d0fd..a6005f263f 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scad.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scad.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155563.5</string> </value> + <value> <string>ts83646621.3</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -65,7 +65,7 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new scadHighlightRules().getRules());\n + this.HighlightRules = scadHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -80,7 +80,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -702,7 +702,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>25201</int> </value> + <value> <int>25177</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scala.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scala.js.xml index d65ddcf168..bbbd33c1f8 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scala.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scala.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155563.61</string> </value> + <value> <string>ts83646621.28</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -33,7 +33,7 @@ var ScalaHighlightRules = require("./scala_highlight_rules").ScalaHighlightRules var Mode = function() {\n JavaScriptMode.call(this);\n \n - this.$tokenizer = new Tokenizer(new ScalaHighlightRules().getRules());\n + this.HighlightRules = ScalaHighlightRules;\n };\n oop.inherits(Mode, JavaScriptMode);\n \n @@ -62,7 +62,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -77,7 +78,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -183,7 +184,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -258,7 +260,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -303,8 +305,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -391,6 +393,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1057,7 +1067,7 @@ exports.ScalaHighlightRules = ScalaHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>43132</int> </value> + <value> <int>43436</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scheme.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scheme.js.xml index bc92ec0eb5..aad2204ed5 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scheme.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scheme.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155563.72</string> </value> + <value> <string>ts83646621.27</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,9 +64,7 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var SchemeHighlightRules = require("./scheme_highlight_rules").SchemeHighlightRules;\n \n var Mode = function() {\n - var highlighter = new SchemeHighlightRules();\n - \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = SchemeHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -172,7 +170,7 @@ exports.SchemeHighlightRules = SchemeHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>5085</int> </value> + <value> <int>5017</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scss.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scss.js.xml index 2ce73ddbef..fef99094ef 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scss.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-scss.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155563.81</string> </value> + <value> <string>ts83646621.26</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,7 +64,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new ScssHighlightRules().getRules());\n + this.HighlightRules = ScssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -78,7 +78,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -864,7 +864,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>34813</int> </value> + <value> <int>34789</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sh.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sh.js.xml index 2503c18c35..1b38357fdd 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sh.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sh.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155563.96</string> </value> + <value> <string>ts83646621.24</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules;\n var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new ShHighlightRules().getRules());\n + this.HighlightRules = ShHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -74,7 +74,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -103,7 +103,7 @@ oop.inherits(Mode, TextMode);\n if (input !== "\\r\\n" && input !== "\\r" && input !== "\\n")\n return false;\n \n - var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n \n if (!tokens)\n return false;\n @@ -179,12 +179,28 @@ var ShHighlightRules = function() {\n var func = "(?:" + variableName + "\\\\s*\\\\(\\\\))";\n \n this.$rules = {\n - "start" : [ {\n + "start" : [{\n + token : "constant",\n + regex : /\\\\./\n + }, {\n token : ["text", "comment"],\n regex : /(^|\\s)(#.*)$/\n }, {\n - token : "string", // " string\n - regex : \'"(?:[^\\\\\\\\]|\\\\\\\\.)*?"\'\n + token : "string",\n + regex : \'"\',\n + push : [{\n + token : "constant.language.escape",\n + regex : /\\\\(?:[$abeEfnrtv\\\\\'"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n + }, {\n + token : "constant",\n + regex : /\\$\\w+/\n + }, {\n + token : "string",\n + regex : \'"\',\n + next: "pop"\n + }, {\n + defaultToken: "string"\n + }]\n }, {\n token : "variable.language",\n regex : builtinVariable\n @@ -199,7 +215,7 @@ var ShHighlightRules = function() {\n regex : fileDescriptor\n }, {\n token : "string", // \' string\n - regex : "\'(?:[^\\\\\\\\]|\\\\\\\\.)*?\'"\n + start : "\'", end : "\'"\n }, {\n token : "constant.numeric", // float\n regex : floatNumber\n @@ -220,6 +236,8 @@ var ShHighlightRules = function() {\n regex : "[\\\\]\\\\)\\\\}]"\n } ]\n };\n + \n + this.normalizeRules();\n };\n \n oop.inherits(ShHighlightRules, TextHighlightRules);\n @@ -236,7 +254,7 @@ exports.ShHighlightRules = ShHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>6999</int> </value> + <value> <int>7477</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sjs.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sjs.js.xml new file mode 100644 index 0000000000..363ddcad77 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sjs.js.xml @@ -0,0 +1,1150 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.24</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-sjs.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/mode/sjs\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/javascript\', \'ace/tokenizer\', \'ace/mode/sjs_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +var oop = require("../lib/oop");\n +var JSMode = require("./javascript").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var SJSHighlightRules = require("./sjs_highlight_rules").SJSHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + var highlighter = new SJSHighlightRules();\n +\n + this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CstyleBehaviour();\n + this.$keywordList = highlighter.$keywordList;\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, JSMode);\n +(function() {\n + this.createWorker = function(session) {\n + return null;\n + }\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/javascript\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/range\', \'ace/worker/worker_client\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var Range = require("../range").Range;\n +var WorkerClient = require("../worker/worker_client").WorkerClient;\n +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CstyleBehaviour();\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.lineCommentStart = "//";\n + this.blockComment = {start: "/*", end: "*/"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + var indent = this.$getIndent(line);\n +\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n + var tokens = tokenizedLine.tokens;\n + var endState = tokenizedLine.state;\n +\n + if (tokens.length && tokens[tokens.length-1].type == "comment") {\n + return indent;\n + }\n +\n + if (state == "start" || state == "no_regex") {\n + var match = line.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);\n + if (match) {\n + indent += tab;\n + }\n + } else if (state == "doc-start") {\n + if (endState == "start" || endState == "no_regex") {\n + return "";\n + }\n + var match = line.match(/^\\s*(\\/?)\\*/);\n + if (match) {\n + if (match[1]) {\n + indent += " ";\n + }\n + indent += "* ";\n + }\n + }\n +\n + return indent;\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return this.$outdent.checkOutdent(line, input);\n + };\n +\n + this.autoOutdent = function(state, doc, row) {\n + this.$outdent.autoOutdent(doc, row);\n + };\n +\n + this.createWorker = function(session) {\n + var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");\n + worker.attachToDocument(session.getDocument());\n +\n + worker.on("jslint", function(results) {\n + session.setAnnotations(results.data);\n + });\n +\n + worker.on("terminate", function() {\n + session.clearAnnotations();\n + });\n +\n + return worker;\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/javascript_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/doc_comment_highlight_rules\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var JavaScriptHighlightRules = function() {\n + var keywordMapper = this.createKeywordMapper({\n + "variable.language":\n + "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors\n + "Namespace|QName|XML|XMLList|" + // E4X\n + "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +\n + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +\n + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors\n + "SyntaxError|TypeError|URIError|" +\n + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions\n + "isNaN|parseFloat|parseInt|" +\n + "JSON|Math|" + // Other\n + "this|arguments|prototype|window|document" , // Pseudo\n + "keyword":\n + "const|yield|import|get|set|" +\n + "break|case|catch|continue|default|delete|do|else|finally|for|function|" +\n + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +\n + "__parent__|__count__|escape|unescape|with|__proto__|" +\n + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",\n + "storage.type":\n + "const|let|var|function",\n + "constant.language":\n + "null|Infinity|NaN|undefined",\n + "support.function":\n + "alert",\n + "constant.language.boolean": "true|false"\n + }, "identifier");\n + var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";\n + var identifierRe = "[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b";\n +\n + var escapedRe = "\\\\\\\\(?:x[0-9a-fA-F]{2}|" + // hex\n + "u[0-9a-fA-F]{4}|" + // unicode\n + "[0-2][0-7]{0,2}|" + // oct\n + "3[0-6][0-7]?|" + // oct\n + "37[0-7]?|" + // oct\n + "[4-7][0-7]?|" + //oct\n + ".)";\n +\n + this.$rules = {\n + "no_regex" : [\n + {\n + token : "comment",\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n + },\n + DocCommentHighlightRules.getStartRule("doc-start"),\n + {\n + token : "comment", // multi line comment\n + regex : /\\/\\*/,\n + next : "comment"\n + }, {\n + token : "string",\n + regex : "\'(?=.)",\n + next : "qstring"\n + }, {\n + token : "string",\n + regex : \'"(?=.)\',\n + next : "qqstring"\n + }, {\n + token : "constant.numeric", // hex\n + regex : /0[xX][0-9a-fA-F]+\\b/\n + }, {\n + token : "constant.numeric", // float\n + regex : /[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "support.function",\n + "punctuation.operator", "entity.name.function", "text","keyword.operator"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(prototype)(\\\\.)(" + identifierRe +")(\\\\s*)(=)",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "entity.name.function", "text",\n + "keyword.operator", "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "entity.name.function", "text", "keyword.operator", "text", "storage.type",\n + "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "entity.name.function", "text",\n + "keyword.operator", "text",\n + "storage.type", "text", "entity.name.function", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "text", "entity.name.function", "text", "paren.lparen"\n + ],\n + regex : "(function)(\\\\s+)(" + identifierRe + ")(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "entity.name.function", "text", "punctuation.operator",\n + "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "text", "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(:)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : "keyword",\n + regex : "(?:" + kwBeforeRe + ")\\\\b",\n + next : "start"\n + }, {\n + token : ["punctuation.operator", "support.function"],\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + }, {\n + token : ["punctuation.operator", "support.function.dom"],\n + regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n + }, {\n + token : ["punctuation.operator", "support.constant"],\n + regex : /(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n + }, {\n + token : ["storage.type", "punctuation.operator", "support.function.firebug"],\n + regex : /(console)(\\.)(warn|info|log|error|time|timeEnd|assert)\\b/\n + }, {\n + token : keywordMapper,\n + regex : identifierRe\n + }, {\n + token : "keyword.operator",\n + regex : /--|\\+\\+|[!$%&*+\\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=/,\n + next : "start"\n + }, {\n + token : "punctuation.operator",\n + regex : /\\?|\\:|\\,|\\;|\\./,\n + next : "start"\n + }, {\n + token : "paren.lparen",\n + regex : /[\\[({]/,\n + next : "start"\n + }, {\n + token : "paren.rparen",\n + regex : /[\\])}]/\n + }, {\n + token : "keyword.operator",\n + regex : /\\/=?/,\n + next : "start"\n + }, {\n + token: "comment",\n + regex: /^#!.*$/\n + }\n + ],\n + "start": [\n + DocCommentHighlightRules.getStartRule("doc-start"),\n + {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + next : "comment_regex_allowed"\n + }, {\n + token : "comment",\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n + }, {\n + token: "string.regexp",\n + regex: "\\\\/",\n + next: "regex"\n + }, {\n + token : "text",\n + regex : "\\\\s+|^$",\n + next : "start"\n + }, {\n + token: "empty",\n + regex: "",\n + next: "no_regex"\n + }\n + ],\n + "regex": [\n + {\n + token: "regexp.keyword.operator",\n + regex: "\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)"\n + }, {\n + token: "string.regexp",\n + regex: "/\\\\w*",\n + next: "no_regex"\n + }, {\n + token : "invalid",\n + regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n + }, {\n + token : "constant.language.escape",\n + regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?]/\n + }, {\n + token : "constant.language.delimiter",\n + regex: /\\|/\n + }, {\n + token: "constant.language.escape",\n + regex: /\\[\\^?/,\n + next: "regex_character_class"\n + }, {\n + token: "empty",\n + regex: "$",\n + next: "no_regex"\n + }, {\n + defaultToken: "string.regexp"\n + }\n + ],\n + "regex_character_class": [\n + {\n + token: "regexp.keyword.operator",\n + regex: "\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)"\n + }, {\n + token: "constant.language.escape",\n + regex: "]",\n + next: "regex"\n + }, {\n + token: "constant.language.escape",\n + regex: "-"\n + }, {\n + token: "empty",\n + regex: "$",\n + next: "no_regex"\n + }, {\n + defaultToken: "string.regexp.charachterclass"\n + }\n + ],\n + "function_arguments": [\n + {\n + token: "variable.parameter",\n + regex: identifierRe\n + }, {\n + token: "punctuation.operator",\n + regex: "[, ]+"\n + }, {\n + token: "punctuation.operator",\n + regex: "$"\n + }, {\n + token: "empty",\n + regex: "",\n + next: "no_regex"\n + }\n + ],\n + "comment_regex_allowed" : [\n + {token : "comment", regex : "\\\\*\\\\/", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "comment" : [\n + {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n + "qqstring" : [\n + {\n + token : "constant.language.escape",\n + regex : escapedRe\n + }, {\n + token : "string",\n + regex : "\\\\\\\\$",\n + next : "qqstring"\n + }, {\n + token : "string",\n + regex : \'"|$\',\n + next : "no_regex"\n + }, {\n + defaultToken: "string"\n + }\n + ],\n + "qstring" : [\n + {\n + token : "constant.language.escape",\n + regex : escapedRe\n + }, {\n + token : "string",\n + regex : "\\\\\\\\$",\n + next : "qstring"\n + }, {\n + token : "string",\n + regex : "\'|$",\n + next : "no_regex"\n + }, {\n + defaultToken: "string"\n + }\n + ]\n + };\n +\n + this.embedRules(DocCommentHighlightRules, "doc-",\n + [ DocCommentHighlightRules.getEndRule("no_regex") ]);\n +};\n +\n +oop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n +\n +exports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n +});\n +\n +define(\'ace/mode/doc_comment_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var DocCommentHighlightRules = function() {\n +\n + this.$rules = {\n + "start" : [ {\n + token : "comment.doc.tag",\n + regex : "@[\\\\w\\\\d_]+" // TODO: fix email addresses\n + }, {\n + token : "comment.doc.tag",\n + regex : "\\\\bTODO\\\\b"\n + }, {\n + defaultToken : "comment.doc"\n + }]\n + };\n +};\n +\n +oop.inherits(DocCommentHighlightRules, TextHighlightRules);\n +\n +DocCommentHighlightRules.getStartRule = function(start) {\n + return {\n + token : "comment.doc", // doc comment\n + regex : "\\\\/\\\\*(?=\\\\*)",\n + next : start\n + };\n +};\n +\n +DocCommentHighlightRules.getEndRule = function (start) {\n + return {\n + token : "comment.doc", // closing comment\n + regex : "\\\\*\\\\/",\n + next : start\n + };\n +};\n +\n +\n +exports.DocCommentHighlightRules = DocCommentHighlightRules;\n +\n +});\n +\n +define(\'ace/mode/matching_brace_outdent\', [\'require\', \'exports\', \'module\' , \'ace/range\'], function(require, exports, module) {\n +\n +\n +var Range = require("../range").Range;\n +\n +var MatchingBraceOutdent = function() {};\n +\n +(function() {\n +\n + this.checkOutdent = function(line, input) {\n + if (! /^\\s+$/.test(line))\n + return false;\n +\n + return /^\\s*\\}/.test(input);\n + };\n +\n + this.autoOutdent = function(doc, row) {\n + var line = doc.getLine(row);\n + var match = line.match(/^(\\s*\\})/);\n +\n + if (!match) return 0;\n +\n + var column = match[1].length;\n + var openBracePos = doc.findMatchingBracket({row: row, column: column});\n +\n + if (!openBracePos || openBracePos.row == row) return 0;\n +\n + var indent = this.$getIndent(doc.getLine(openBracePos.row));\n + doc.replace(new Range(row, 0, row, column-1), indent);\n + };\n +\n + this.$getIndent = function(line) {\n + return line.match(/^\\s*/)[0];\n + };\n +\n +}).call(MatchingBraceOutdent.prototype);\n +\n +exports.MatchingBraceOutdent = MatchingBraceOutdent;\n +});\n +\n +define(\'ace/mode/behaviour/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/token_iterator\', \'ace/lib/lang\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +var lang = require("../../lib/lang");\n +\n +var SAFE_INSERT_IN_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator"];\n +var SAFE_INSERT_BEFORE_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator", "comment"];\n +\n +\n +var autoInsertedBrackets = 0;\n +var autoInsertedRow = -1;\n +var autoInsertedLineEnd = "";\n +var maybeInsertedBrackets = 0;\n +var maybeInsertedRow = -1;\n +var maybeInsertedLineStart = "";\n +var maybeInsertedLineEnd = "";\n +\n +var CstyleBehaviour = function () {\n + \n + CstyleBehaviour.isSaneInsertion = function(editor, session) {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {\n + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))\n + return false;\n + }\n + iterator.stepForward();\n + return iterator.getCurrentTokenRow() !== cursor.row ||\n + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);\n + };\n + \n + CstyleBehaviour.$matchTokenType = function(token, types) {\n + return types.indexOf(token.type || token) > -1;\n + };\n + \n + CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))\n + autoInsertedBrackets = 0;\n + autoInsertedRow = cursor.row;\n + autoInsertedLineEnd = bracket + line.substr(cursor.column);\n + autoInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isMaybeInsertedClosing(cursor, line))\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = cursor.row;\n + maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n + maybeInsertedLineEnd = line.substr(cursor.column);\n + maybeInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n + return autoInsertedBrackets > 0 &&\n + cursor.row === autoInsertedRow &&\n + bracket === autoInsertedLineEnd[0] &&\n + line.substr(cursor.column) === autoInsertedLineEnd;\n + };\n + \n + CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n + return maybeInsertedBrackets > 0 &&\n + cursor.row === maybeInsertedRow &&\n + line.substr(cursor.column) === maybeInsertedLineEnd &&\n + line.substr(0, cursor.column) == maybeInsertedLineStart;\n + };\n + \n + CstyleBehaviour.popAutoInsertedClosing = function() {\n + autoInsertedLineEnd = autoInsertedLineEnd.substr(1);\n + autoInsertedBrackets--;\n + };\n + \n + CstyleBehaviour.clearMaybeInsertedClosing = function() {\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = -1;\n + };\n +\n + this.add("braces", "insertion", function (state, action, editor, session, text) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (text == \'{\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'{\' + selected + \'}\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + if (/[\\]\\}\\)]/.test(line[cursor.column])) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "}");\n + return {\n + text: \'{}\',\n + selection: [1, 1]\n + };\n + } else {\n + CstyleBehaviour.recordMaybeInsert(editor, session, "{");\n + return {\n + text: \'{\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == \'}\') {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\') {\n + var matching = session.$findOpeningBracket(\'}\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == "\\n" || text == "\\r\\n") {\n + var closing = "";\n + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n + closing = lang.stringRepeat("}", maybeInsertedBrackets);\n + CstyleBehaviour.clearMaybeInsertedClosing();\n + }\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\' || closing !== "") {\n + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, \'}\');\n + if (!openBracePos)\n + return null;\n +\n + var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());\n + var next_indent = this.$getIndent(line);\n +\n + return {\n + text: \'\\n\' + indent + \'\\n\' + next_indent + closing,\n + selection: [1, indent.length, 1, indent.length]\n + };\n + }\n + }\n + });\n +\n + this.add("braces", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'{\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.end.column, range.end.column + 1);\n + if (rightChar == \'}\') {\n + range.end.column++;\n + return range;\n + } else {\n + maybeInsertedBrackets--;\n + }\n + }\n + });\n +\n + this.add("parens", "insertion", function (state, action, editor, session, text) {\n + if (text == \'(\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'(\' + selected + \')\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, ")");\n + return {\n + text: \'()\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \')\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \')\') {\n + var matching = session.$findOpeningBracket(\')\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("parens", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'(\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \')\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("brackets", "insertion", function (state, action, editor, session, text) {\n + if (text == \'[\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'[\' + selected + \']\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "]");\n + return {\n + text: \'[]\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \']\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \']\') {\n + var matching = session.$findOpeningBracket(\']\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("brackets", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'[\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \']\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {\n + if (text == \'"\' || text == "\'") {\n + var quote = text;\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "\'" && selected != \'"\' && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: quote + selected + quote,\n + selection: false\n + };\n + } else {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var leftChar = line.substring(cursor.column-1, cursor.column);\n + if (leftChar == \'\\\\\') {\n + return null;\n + }\n + var tokens = session.getTokens(selection.start.row);\n + var col = 0, token;\n + var quotepos = -1; // Track whether we\'re inside an open quote.\n +\n + for (var x = 0; x < tokens.length; x++) {\n + token = tokens[x];\n + if (token.type == "string") {\n + quotepos = -1;\n + } else if (quotepos < 0) {\n + quotepos = token.value.indexOf(quote);\n + }\n + if ((token.value.length + col) > selection.start.column) {\n + break;\n + }\n + col += tokens[x].value.length;\n + }\n + if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {\n + if (!CstyleBehaviour.isSaneInsertion(editor, session))\n + return;\n + return {\n + text: quote + quote,\n + selection: [1,1]\n + };\n + } else if (token && token.type === "string") {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == quote) {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && (selected == \'"\' || selected == "\'")) {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == selected) {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n +};\n +\n +oop.inherits(CstyleBehaviour, Behaviour);\n +\n +exports.CstyleBehaviour = CstyleBehaviour;\n +});\n +\n +define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Range = require("../../range").Range;\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(commentRegex) {\n + if (commentRegex) {\n + this.foldingStartMarker = new RegExp(\n + this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n + );\n + this.foldingStopMarker = new RegExp(\n + this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n + );\n + }\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n + this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var line = session.getLine(row);\n + var match = line.match(this.foldingStartMarker);\n + if (match) {\n + var i = match.index;\n +\n + if (match[1])\n + return this.openingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i + match[0].length, 1);\n + }\n +\n + if (foldStyle !== "markbeginend")\n + return;\n +\n + var match = line.match(this.foldingStopMarker);\n + if (match) {\n + var i = match.index + match[0].length;\n +\n + if (match[1])\n + return this.closingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i, -1);\n + }\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +\n +define(\'ace/mode/sjs_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var SJSHighlightRules = function() {\n + var parent = new JavaScriptHighlightRules();\n + var escapedRe = "\\\\\\\\(?:x[0-9a-fA-F]{2}|" + // hex\n + "u[0-9a-fA-F]{4}|" + // unicode\n + "[0-2][0-7]{0,2}|" + // oct\n + "3[0-6][0-7]?|" + // oct\n + "37[0-7]?|" + // oct\n + "[4-7][0-7]?|" + //oct\n + ".)";\n +\n + var contextAware = function(f) {\n + f.isContextAware = true;\n + return f;\n + };\n +\n + var ctxBegin = function(opts) {\n + return {\n + token: opts.token,\n + regex: opts.regex,\n + next: contextAware(function(currentState, stack) {\n + if (stack.length === 0)\n + stack.unshift(currentState);\n + stack.unshift(opts.next);\n + return opts.next;\n + }),\n + };\n + };\n +\n + var ctxEnd = function(opts) {\n + return {\n + token: opts.token,\n + regex: opts.regex,\n + next: contextAware(function(currentState, stack) {\n + stack.shift();\n + return stack[0] || "start";\n + }),\n + };\n + };\n +\n + this.$rules = parent.$rules;\n + this.$rules.no_regex = [\n + {\n + token: "keyword",\n + regex: "(waitfor|or|and|collapse|spawn|retract)\\\\b"\n + },\n + {\n + token: "keyword.operator",\n + regex: "(->|=>|\\\\.\\\\.)"\n + },\n + {\n + token: "variable.language",\n + regex: "(hold|default)\\\\b"\n + },\n + ctxBegin({\n + token: "string",\n + regex: "`",\n + next: "bstring"\n + }),\n + ctxBegin({\n + token: "string",\n + regex: \'"\',\n + next: "qqstring"\n + }),\n + ctxBegin({\n + token: "string",\n + regex: \'"\',\n + next: "qqstring"\n + }),\n + {\n + token: ["paren.lparen", "text", "paren.rparen"],\n + regex: "(\\\\{)(\\\\s*)(\\\\|)",\n + next: "block_arguments",\n + }\n +\n + ].concat(this.$rules.no_regex);\n +\n + this.$rules.block_arguments = [\n + {\n + token: "paren.rparen",\n + regex: "\\\\|",\n + next: "no_regex",\n + }\n + ].concat(this.$rules.function_arguments);\n +\n + this.$rules.bstring = [\n + {\n + token : "constant.language.escape",\n + regex : escapedRe\n + },\n + {\n + token : "string",\n + regex : "\\\\\\\\$",\n + next: "bstring"\n + },\n + ctxBegin({\n + token : "paren.lparen",\n + regex : "\\\\$\\\\{",\n + next: "string_interp"\n + }),\n + ctxBegin({\n + token : "paren.lparen",\n + regex : "\\\\$",\n + next: "bstring_interp_single"\n + }),\n + ctxEnd({\n + token : "string",\n + regex : "`",\n + }),\n + {\n + defaultToken: "string"\n + }\n + ];\n + \n + this.$rules.qqstring = [\n + {\n + token : "constant.language.escape",\n + regex : escapedRe\n + },\n + {\n + token : "string",\n + regex : "\\\\\\\\$",\n + next: "qqstring",\n + },\n + ctxBegin({\n + token : "paren.lparen",\n + regex : "#\\\\{",\n + next: "string_interp"\n + }),\n + ctxEnd({\n + token : "string",\n + regex : \'"\',\n + }),\n + {\n + defaultToken: "string"\n + }\n + ];\n + var embeddableRules = [];\n + for (var i=0; i<this.$rules.no_regex.length; i++) {\n + var rule = this.$rules.no_regex[i];\n + var token = String(rule.token);\n + if(token.indexOf(\'paren\') == -1 && (!rule.next || rule.next.isContextAware)) {\n + embeddableRules.push(rule);\n + }\n + };\n +\n + this.$rules.string_interp = [\n + ctxEnd({\n + token: "paren.rparen",\n + regex: "\\\\}"\n + }),\n + ctxBegin({\n + token: "paren.lparen",\n + regex: \'{\',\n + next: "string_interp"\n + }),\n + ].concat(embeddableRules);\n + this.$rules.bstring_interp_single = [\n + {\n + token: ["identifier", "paren.lparen"],\n + regex: \'(\\\\w+)(\\\\()\',\n + next: \'bstring_interp_single_call\'\n + },\n + ctxEnd({\n + token : "identifier",\n + regex : "\\\\w*",\n + })\n + ];\n + this.$rules.bstring_interp_single_call = [\n + ctxBegin({\n + token: "paren.lparen",\n + regex: "\\\\(",\n + next: "bstring_interp_single_call"\n + }),\n + ctxEnd({\n + token: "paren.rparen",\n + regex: "\\\\)"\n + })\n + ].concat(embeddableRules);\n +}\n +oop.inherits(SJSHighlightRules, TextHighlightRules);\n +\n +exports.SJSHighlightRules = SJSHighlightRules;\n +});\n + + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>44535</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-snippets.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-snippets.js.xml index 03ffbcb6c7..6d4c67f286 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-snippets.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-snippets.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155564.07</string> </value> + <value> <string>ts83646621.22</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -108,7 +108,7 @@ var SnippetGroupHighlightRules = function() {\n \t\t{onMatch: function(value, state, stack) {\n \t\t\tstack.splice(stack.length);\n \t\t\treturn this.tokenName;\n -\t\t}, tokenName: "text", regex: "^(?!\\t)", next: "start"},\n +\t\t}, tokenName: "text", regex: "^(?!\\t)", next: "start"}\n \t])\n \t\n };\n @@ -120,16 +120,13 @@ exports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;\n var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - var highlighter = new SnippetGroupHighlightRules();\n + this.HighlightRules = SnippetGroupHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n (function() {\n - this.getNextLineIndent = function(state, line, tab) {\n - return this.$getIndent(line);\n - };\n + this.$indentWithTabs = true;\n }).call(Mode.prototype);\n exports.Mode = Mode;\n \n @@ -232,7 +229,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>6849</int> </value> + <value> <int>6715</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-soy_template.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-soy_template.js.xml new file mode 100644 index 0000000000..c8522d1b73 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-soy_template.js.xml @@ -0,0 +1,2715 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.22</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-soy_template.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>103670</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2012, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + *\n + * Contributor(s):\n + *\n + *\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/mode/soy_template\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/html\', \'ace/tokenizer\', \'ace/mode/soy_template_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var HtmlMode = require("./html").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var SoyTemplateHighlightRules = require("./soy_template_highlight_rules").SoyTemplateHighlightRules;\n +\n +var Mode = function() {\n + HtmlMode.call(this);\n + this.HighlightRules = SoyTemplateHighlightRules;\n +};\n +oop.inherits(Mode, HtmlMode);\n +\n +(function() {\n + this.lineCommentStart = "//";\n + this.blockComment = {start: "/*", end: "*/"};\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/mode/javascript\', \'ace/mode/css\', \'ace/tokenizer\', \'ace/mode/html_highlight_rules\', \'ace/mode/behaviour/html\', \'ace/mode/folding/html\', \'ace/mode/html_completions\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var JavaScriptMode = require("./javascript").Mode;\n +var CssMode = require("./css").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n +var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n +var HtmlFoldMode = require("./folding/html").FoldMode;\n +var HtmlCompletions = require("./html_completions").HtmlCompletions;\n +\n +var Mode = function() {\n + this.HighlightRules = HtmlHighlightRules;\n + this.$behaviour = new HtmlBehaviour();\n + this.$completer = new HtmlCompletions();\n + \n + this.createModeDelegates({\n + "js-": JavaScriptMode,\n + "css-": CssMode\n + });\n + \n + this.foldingRules = new HtmlFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.blockComment = {start: "<!--", end: "-->"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + return this.$getIndent(line);\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return false;\n + };\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + return this.$completer.getCompletions(state, session, pos, prefix);\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/javascript\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/range\', \'ace/worker/worker_client\', \'ace/mode/behaviour/cstyle\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var Range = require("../range").Range;\n +var WorkerClient = require("../worker/worker_client").WorkerClient;\n +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CstyleBehaviour();\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.lineCommentStart = "//";\n + this.blockComment = {start: "/*", end: "*/"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + var indent = this.$getIndent(line);\n +\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n + var tokens = tokenizedLine.tokens;\n + var endState = tokenizedLine.state;\n +\n + if (tokens.length && tokens[tokens.length-1].type == "comment") {\n + return indent;\n + }\n +\n + if (state == "start" || state == "no_regex") {\n + var match = line.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);\n + if (match) {\n + indent += tab;\n + }\n + } else if (state == "doc-start") {\n + if (endState == "start" || endState == "no_regex") {\n + return "";\n + }\n + var match = line.match(/^\\s*(\\/?)\\*/);\n + if (match) {\n + if (match[1]) {\n + indent += " ";\n + }\n + indent += "* ";\n + }\n + }\n +\n + return indent;\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return this.$outdent.checkOutdent(line, input);\n + };\n +\n + this.autoOutdent = function(state, doc, row) {\n + this.$outdent.autoOutdent(doc, row);\n + };\n +\n + this.createWorker = function(session) {\n + var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");\n + worker.attachToDocument(session.getDocument());\n +\n + worker.on("jslint", function(results) {\n + session.setAnnotations(results.data);\n + });\n +\n + worker.on("terminate", function() {\n + session.clearAnnotations();\n + });\n +\n + return worker;\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/javascript_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/doc_comment_highlight_rules\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var JavaScriptHighlightRules = function() {\n + var keywordMapper = this.createKeywordMapper({\n + "variable.language":\n + "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors\n + "Namespace|QName|XML|XMLList|" + // E4X\n + "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +\n + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" +\n + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors\n + "SyntaxError|TypeError|URIError|" +\n + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions\n + "isNaN|parseFloat|parseInt|" +\n + "JSON|Math|" + // Other\n + "this|arguments|prototype|window|document" , // Pseudo\n + "keyword":\n + "const|yield|import|get|set|" +\n + "break|case|catch|continue|default|delete|do|else|finally|for|function|" +\n + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +\n + "__parent__|__count__|escape|unescape|with|__proto__|" +\n + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",\n + "storage.type":\n + "const|let|var|function",\n + "constant.language":\n + "null|Infinity|NaN|undefined",\n + "support.function":\n + "alert",\n + "constant.language.boolean": "true|false"\n + }, "identifier");\n + var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";\n + var identifierRe = "[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b";\n +\n + var escapedRe = "\\\\\\\\(?:x[0-9a-fA-F]{2}|" + // hex\n + "u[0-9a-fA-F]{4}|" + // unicode\n + "[0-2][0-7]{0,2}|" + // oct\n + "3[0-6][0-7]?|" + // oct\n + "37[0-7]?|" + // oct\n + "[4-7][0-7]?|" + //oct\n + ".)";\n +\n + this.$rules = {\n + "no_regex" : [\n + {\n + token : "comment",\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n + },\n + DocCommentHighlightRules.getStartRule("doc-start"),\n + {\n + token : "comment", // multi line comment\n + regex : /\\/\\*/,\n + next : "comment"\n + }, {\n + token : "string",\n + regex : "\'(?=.)",\n + next : "qstring"\n + }, {\n + token : "string",\n + regex : \'"(?=.)\',\n + next : "qqstring"\n + }, {\n + token : "constant.numeric", // hex\n + regex : /0[xX][0-9a-fA-F]+\\b/\n + }, {\n + token : "constant.numeric", // float\n + regex : /[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "support.function",\n + "punctuation.operator", "entity.name.function", "text","keyword.operator"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(prototype)(\\\\.)(" + identifierRe +")(\\\\s*)(=)",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "entity.name.function", "text",\n + "keyword.operator", "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "entity.name.function", "text", "keyword.operator", "text", "storage.type",\n + "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "punctuation.operator", "entity.name.function", "text",\n + "keyword.operator", "text",\n + "storage.type", "text", "entity.name.function", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\.)(" + identifierRe +")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "storage.type", "text", "entity.name.function", "text", "paren.lparen"\n + ],\n + regex : "(function)(\\\\s+)(" + identifierRe + ")(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "entity.name.function", "text", "punctuation.operator",\n + "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(" + identifierRe + ")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : [\n + "text", "text", "storage.type", "text", "paren.lparen"\n + ],\n + regex : "(:)(\\\\s*)(function)(\\\\s*)(\\\\()",\n + next: "function_arguments"\n + }, {\n + token : "keyword",\n + regex : "(?:" + kwBeforeRe + ")\\\\b",\n + next : "start"\n + }, {\n + token : ["punctuation.operator", "support.function"],\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + }, {\n + token : ["punctuation.operator", "support.function.dom"],\n + regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n + }, {\n + token : ["punctuation.operator", "support.constant"],\n + regex : /(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n + }, {\n + token : ["storage.type", "punctuation.operator", "support.function.firebug"],\n + regex : /(console)(\\.)(warn|info|log|error|time|timeEnd|assert)\\b/\n + }, {\n + token : keywordMapper,\n + regex : identifierRe\n + }, {\n + token : "keyword.operator",\n + regex : /--|\\+\\+|[!$%&*+\\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=/,\n + next : "start"\n + }, {\n + token : "punctuation.operator",\n + regex : /\\?|\\:|\\,|\\;|\\./,\n + next : "start"\n + }, {\n + token : "paren.lparen",\n + regex : /[\\[({]/,\n + next : "start"\n + }, {\n + token : "paren.rparen",\n + regex : /[\\])}]/\n + }, {\n + token : "keyword.operator",\n + regex : /\\/=?/,\n + next : "start"\n + }, {\n + token: "comment",\n + regex: /^#!.*$/\n + }\n + ],\n + "start": [\n + DocCommentHighlightRules.getStartRule("doc-start"),\n + {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + next : "comment_regex_allowed"\n + }, {\n + token : "comment",\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n + }, {\n + token: "string.regexp",\n + regex: "\\\\/",\n + next: "regex"\n + }, {\n + token : "text",\n + regex : "\\\\s+|^$",\n + next : "start"\n + }, {\n + token: "empty",\n + regex: "",\n + next: "no_regex"\n + }\n + ],\n + "regex": [\n + {\n + token: "regexp.keyword.operator",\n + regex: "\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)"\n + }, {\n + token: "string.regexp",\n + regex: "/\\\\w*",\n + next: "no_regex"\n + }, {\n + token : "invalid",\n + regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n + }, {\n + token : "constant.language.escape",\n + regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?]/\n + }, {\n + token : "constant.language.delimiter",\n + regex: /\\|/\n + }, {\n + token: "constant.language.escape",\n + regex: /\\[\\^?/,\n + next: "regex_character_class"\n + }, {\n + token: "empty",\n + regex: "$",\n + next: "no_regex"\n + }, {\n + defaultToken: "string.regexp"\n + }\n + ],\n + "regex_character_class": [\n + {\n + token: "regexp.keyword.operator",\n + regex: "\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)"\n + }, {\n + token: "constant.language.escape",\n + regex: "]",\n + next: "regex"\n + }, {\n + token: "constant.language.escape",\n + regex: "-"\n + }, {\n + token: "empty",\n + regex: "$",\n + next: "no_regex"\n + }, {\n + defaultToken: "string.regexp.charachterclass"\n + }\n + ],\n + "function_arguments": [\n + {\n + token: "variable.parameter",\n + regex: identifierRe\n + }, {\n + token: "punctuation.operator",\n + regex: "[, ]+"\n + }, {\n + token: "punctuation.operator",\n + regex: "$"\n + }, {\n + token: "empty",\n + regex: "",\n + next: "no_regex"\n + }\n + ],\n + "comment_regex_allowed" : [\n + {token : "comment", regex : "\\\\*\\\\/", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "comment" : [\n + {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n + "qqstring" : [\n + {\n + token : "constant.language.escape",\n + regex : escapedRe\n + }, {\n + token : "string",\n + regex : "\\\\\\\\$",\n + next : "qqstring"\n + }, {\n + token : "string",\n + regex : \'"|$\',\n + next : "no_regex"\n + }, {\n + defaultToken: "string"\n + }\n + ],\n + "qstring" : [\n + {\n + token : "constant.language.escape",\n + regex : escapedRe\n + }, {\n + token : "string",\n + regex : "\\\\\\\\$",\n + next : "qstring"\n + }, {\n + token : "string",\n + regex : "\'|$",\n + next : "no_regex"\n + }, {\n + defaultToken: "string"\n + }\n + ]\n + };\n +\n + this.embedRules(DocCommentHighlightRules, "doc-",\n + [ DocCommentHighlightRules.getEndRule("no_regex") ]);\n +};\n +\n +oop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n +\n +exports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n +});\n +\n +define(\'ace/mode/doc_comment_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var DocCommentHighlightRules = function() {\n +\n + this.$rules = {\n + "start" : [ {\n + token : "comment.doc.tag",\n + regex : "@[\\\\w\\\\d_]+" // TODO: fix email addresses\n + }, {\n + token : "comment.doc.tag",\n + regex : "\\\\bTODO\\\\b"\n + }, {\n + defaultToken : "comment.doc"\n + }]\n + };\n +};\n +\n +oop.inherits(DocCommentHighlightRules, TextHighlightRules);\n +\n +DocCommentHighlightRules.getStartRule = function(start) {\n + return {\n + token : "comment.doc", // doc comment\n + regex : "\\\\/\\\\*(?=\\\\*)",\n + next : start\n + };\n +};\n +\n +DocCommentHighlightRules.getEndRule = function (start) {\n + return {\n + token : "comment.doc", // closing comment\n + regex : "\\\\*\\\\/",\n + next : start\n + };\n +};\n +\n +\n +exports.DocCommentHighlightRules = DocCommentHighlightRules;\n +\n +});\n +\n +define(\'ace/mode/matching_brace_outdent\', [\'require\', \'exports\', \'module\' , \'ace/range\'], function(require, exports, module) {\n +\n +\n +var Range = require("../range").Range;\n +\n +var MatchingBraceOutdent = function() {};\n +\n +(function() {\n +\n + this.checkOutdent = function(line, input) {\n + if (! /^\\s+$/.test(line))\n + return false;\n +\n + return /^\\s*\\}/.test(input);\n + };\n +\n + this.autoOutdent = function(doc, row) {\n + var line = doc.getLine(row);\n + var match = line.match(/^(\\s*\\})/);\n +\n + if (!match) return 0;\n +\n + var column = match[1].length;\n + var openBracePos = doc.findMatchingBracket({row: row, column: column});\n +\n + if (!openBracePos || openBracePos.row == row) return 0;\n +\n + var indent = this.$getIndent(doc.getLine(openBracePos.row));\n + doc.replace(new Range(row, 0, row, column-1), indent);\n + };\n +\n + this.$getIndent = function(line) {\n + return line.match(/^\\s*/)[0];\n + };\n +\n +}).call(MatchingBraceOutdent.prototype);\n +\n +exports.MatchingBraceOutdent = MatchingBraceOutdent;\n +});\n +\n +define(\'ace/mode/behaviour/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/token_iterator\', \'ace/lib/lang\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +var lang = require("../../lib/lang");\n +\n +var SAFE_INSERT_IN_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator"];\n +var SAFE_INSERT_BEFORE_TOKENS =\n + ["text", "paren.rparen", "punctuation.operator", "comment"];\n +\n +\n +var autoInsertedBrackets = 0;\n +var autoInsertedRow = -1;\n +var autoInsertedLineEnd = "";\n +var maybeInsertedBrackets = 0;\n +var maybeInsertedRow = -1;\n +var maybeInsertedLineStart = "";\n +var maybeInsertedLineEnd = "";\n +\n +var CstyleBehaviour = function () {\n + \n + CstyleBehaviour.isSaneInsertion = function(editor, session) {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {\n + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))\n + return false;\n + }\n + iterator.stepForward();\n + return iterator.getCurrentTokenRow() !== cursor.row ||\n + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);\n + };\n + \n + CstyleBehaviour.$matchTokenType = function(token, types) {\n + return types.indexOf(token.type || token) > -1;\n + };\n + \n + CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))\n + autoInsertedBrackets = 0;\n + autoInsertedRow = cursor.row;\n + autoInsertedLineEnd = bracket + line.substr(cursor.column);\n + autoInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (!this.isMaybeInsertedClosing(cursor, line))\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = cursor.row;\n + maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n + maybeInsertedLineEnd = line.substr(cursor.column);\n + maybeInsertedBrackets++;\n + };\n + \n + CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n + return autoInsertedBrackets > 0 &&\n + cursor.row === autoInsertedRow &&\n + bracket === autoInsertedLineEnd[0] &&\n + line.substr(cursor.column) === autoInsertedLineEnd;\n + };\n + \n + CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n + return maybeInsertedBrackets > 0 &&\n + cursor.row === maybeInsertedRow &&\n + line.substr(cursor.column) === maybeInsertedLineEnd &&\n + line.substr(0, cursor.column) == maybeInsertedLineStart;\n + };\n + \n + CstyleBehaviour.popAutoInsertedClosing = function() {\n + autoInsertedLineEnd = autoInsertedLineEnd.substr(1);\n + autoInsertedBrackets--;\n + };\n + \n + CstyleBehaviour.clearMaybeInsertedClosing = function() {\n + maybeInsertedBrackets = 0;\n + maybeInsertedRow = -1;\n + };\n +\n + this.add("braces", "insertion", function (state, action, editor, session, text) {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + if (text == \'{\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'{\' + selected + \'}\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + if (/[\\]\\}\\)]/.test(line[cursor.column])) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "}");\n + return {\n + text: \'{}\',\n + selection: [1, 1]\n + };\n + } else {\n + CstyleBehaviour.recordMaybeInsert(editor, session, "{");\n + return {\n + text: \'{\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == \'}\') {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\') {\n + var matching = session.$findOpeningBracket(\'}\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + } else if (text == "\\n" || text == "\\r\\n") {\n + var closing = "";\n + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n + closing = lang.stringRepeat("}", maybeInsertedBrackets);\n + CstyleBehaviour.clearMaybeInsertedClosing();\n + }\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \'}\' || closing !== "") {\n + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, \'}\');\n + if (!openBracePos)\n + return null;\n +\n + var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());\n + var next_indent = this.$getIndent(line);\n +\n + return {\n + text: \'\\n\' + indent + \'\\n\' + next_indent + closing,\n + selection: [1, indent.length, 1, indent.length]\n + };\n + }\n + }\n + });\n +\n + this.add("braces", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'{\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.end.column, range.end.column + 1);\n + if (rightChar == \'}\') {\n + range.end.column++;\n + return range;\n + } else {\n + maybeInsertedBrackets--;\n + }\n + }\n + });\n +\n + this.add("parens", "insertion", function (state, action, editor, session, text) {\n + if (text == \'(\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'(\' + selected + \')\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, ")");\n + return {\n + text: \'()\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \')\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \')\') {\n + var matching = session.$findOpeningBracket(\')\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("parens", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'(\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \')\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("brackets", "insertion", function (state, action, editor, session, text) {\n + if (text == \'[\') {\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: \'[\' + selected + \']\',\n + selection: false\n + };\n + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n + CstyleBehaviour.recordAutoInsert(editor, session, "]");\n + return {\n + text: \'[]\',\n + selection: [1, 1]\n + };\n + }\n + } else if (text == \']\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == \']\') {\n + var matching = session.$findOpeningBracket(\']\', {column: cursor.column + 1, row: cursor.row});\n + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n + CstyleBehaviour.popAutoInsertedClosing();\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + });\n +\n + this.add("brackets", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected == \'[\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == \']\') {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {\n + if (text == \'"\' || text == "\'") {\n + var quote = text;\n + var selection = editor.getSelectionRange();\n + var selected = session.doc.getTextRange(selection);\n + if (selected !== "" && selected !== "\'" && selected != \'"\' && editor.getWrapBehavioursEnabled()) {\n + return {\n + text: quote + selected + quote,\n + selection: false\n + };\n + } else {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var leftChar = line.substring(cursor.column-1, cursor.column);\n + if (leftChar == \'\\\\\') {\n + return null;\n + }\n + var tokens = session.getTokens(selection.start.row);\n + var col = 0, token;\n + var quotepos = -1; // Track whether we\'re inside an open quote.\n +\n + for (var x = 0; x < tokens.length; x++) {\n + token = tokens[x];\n + if (token.type == "string") {\n + quotepos = -1;\n + } else if (quotepos < 0) {\n + quotepos = token.value.indexOf(quote);\n + }\n + if ((token.value.length + col) > selection.start.column) {\n + break;\n + }\n + col += tokens[x].value.length;\n + }\n + if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {\n + if (!CstyleBehaviour.isSaneInsertion(editor, session))\n + return;\n + return {\n + text: quote + quote,\n + selection: [1,1]\n + };\n + } else if (token && token.type === "string") {\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar == quote) {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + };\n + }\n + }\n + }\n + }\n + });\n +\n + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && (selected == \'"\' || selected == "\'")) {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n + if (rightChar == selected) {\n + range.end.column++;\n + return range;\n + }\n + }\n + });\n +\n +};\n +\n +oop.inherits(CstyleBehaviour, Behaviour);\n +\n +exports.CstyleBehaviour = CstyleBehaviour;\n +});\n +\n +define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Range = require("../../range").Range;\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(commentRegex) {\n + if (commentRegex) {\n + this.foldingStartMarker = new RegExp(\n + this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n + );\n + this.foldingStopMarker = new RegExp(\n + this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n + );\n + }\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n + this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var line = session.getLine(row);\n + var match = line.match(this.foldingStartMarker);\n + if (match) {\n + var i = match.index;\n +\n + if (match[1])\n + return this.openingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i + match[0].length, 1);\n + }\n +\n + if (foldStyle !== "markbeginend")\n + return;\n +\n + var match = line.match(this.foldingStopMarker);\n + if (match) {\n + var i = match.index + match[0].length;\n +\n + if (match[1])\n + return this.closingBracketBlock(session, match[1], row, i);\n +\n + return session.getCommentFoldRange(row, i, -1);\n + }\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +\n +define(\'ace/mode/css\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/css_highlight_rules\', \'ace/mode/matching_brace_outdent\', \'ace/worker/worker_client\', \'ace/mode/behaviour/css\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n +var WorkerClient = require("../worker/worker_client").WorkerClient;\n +var CssBehaviour = require("./behaviour/css").CssBehaviour;\n +var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n +\n +var Mode = function() {\n + this.HighlightRules = CssHighlightRules;\n + this.$outdent = new MatchingBraceOutdent();\n + this.$behaviour = new CssBehaviour();\n + this.foldingRules = new CStyleFoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +\n +(function() {\n +\n + this.foldingRules = "cStyle";\n + this.blockComment = {start: "/*", end: "*/"};\n +\n + this.getNextLineIndent = function(state, line, tab) {\n + var indent = this.$getIndent(line);\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n + if (tokens.length && tokens[tokens.length-1].type == "comment") {\n + return indent;\n + }\n +\n + var match = line.match(/^.*\\{\\s*$/);\n + if (match) {\n + indent += tab;\n + }\n +\n + return indent;\n + };\n +\n + this.checkOutdent = function(state, line, input) {\n + return this.$outdent.checkOutdent(line, input);\n + };\n +\n + this.autoOutdent = function(state, doc, row) {\n + this.$outdent.autoOutdent(doc, row);\n + };\n +\n + this.createWorker = function(session) {\n + var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");\n + worker.attachToDocument(session.getDocument());\n +\n + worker.on("csslint", function(e) {\n + session.setAnnotations(e.data);\n + });\n +\n + worker.on("terminate", function() {\n + session.clearAnnotations();\n + });\n +\n + return worker;\n + };\n +\n +}).call(Mode.prototype);\n +\n +exports.Mode = Mode;\n +\n +});\n +\n +define(\'ace/mode/css_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index";\n +var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";\n +var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";\n +var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow";\n +var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";\n +\n +var numRe = exports.numRe = "\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))";\n +var pseudoElements = exports.pseudoElements = "(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b";\n +var pseudoClasses = exports.pseudoClasses = "(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b";\n +\n +var CssHighlightRules = function() {\n +\n + var keywordMapper = this.createKeywordMapper({\n + "support.function": supportFunction,\n + "support.constant": supportConstant,\n + "support.type": supportType,\n + "support.constant.color": supportConstantColor,\n + "support.constant.fonts": supportConstantFonts\n + }, "text", true);\n +\n + this.$rules = {\n + "start" : [{\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token: "paren.lparen",\n + regex: "\\\\{",\n + push: "ruleset"\n + }, {\n + token: "string",\n + regex: "@.*?{",\n + push: "media"\n + }, {\n + token: "keyword",\n + regex: "#[a-z0-9-_]+"\n + }, {\n + token: "variable",\n + regex: "\\\\.[a-z0-9-_]+"\n + }, {\n + token: "string",\n + regex: ":[a-z0-9-_]+"\n + }, {\n + token: "constant",\n + regex: "[a-z0-9-_]+"\n + }, {\n + caseInsensitive: true\n + }],\n +\n + "media" : [{\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token: "paren.lparen",\n + regex: "\\\\{",\n + push: "ruleset"\n + }, {\n + token: "string",\n + regex: "\\\\}",\n + next: "pop"\n + }, {\n + token: "keyword",\n + regex: "#[a-z0-9-_]+"\n + }, {\n + token: "variable",\n + regex: "\\\\.[a-z0-9-_]+"\n + }, {\n + token: "string",\n + regex: ":[a-z0-9-_]+"\n + }, {\n + token: "constant",\n + regex: "[a-z0-9-_]+"\n + }, {\n + caseInsensitive: true\n + }],\n +\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n +\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n + };\n +\n + this.normalizeRules();\n +};\n +\n +oop.inherits(CssHighlightRules, TextHighlightRules);\n +\n +exports.CssHighlightRules = CssHighlightRules;\n +\n +});\n +\n +define(\'ace/mode/behaviour/css\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/mode/behaviour/cstyle\', \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +\n +var CssBehaviour = function () {\n +\n + this.inherit(CstyleBehaviour);\n +\n + this.add("colon", "insertion", function (state, action, editor, session, text) {\n + if (text === \':\') {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + var token = iterator.getCurrentToken();\n + if (token && token.value.match(/\\s+/)) {\n + token = iterator.stepBackward();\n + }\n + if (token && token.type === \'support.type\') {\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar === \':\') {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + }\n + }\n + if (!line.substring(cursor.column).match(/^\\s*;/)) {\n + return {\n + text: \':;\',\n + selection: [1, 1]\n + }\n + }\n + }\n + }\n + });\n +\n + this.add("colon", "deletion", function (state, action, editor, session, range) {\n + var selected = session.doc.getTextRange(range);\n + if (!range.isMultiLine() && selected === \':\') {\n + var cursor = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, cursor.row, cursor.column);\n + var token = iterator.getCurrentToken();\n + if (token && token.value.match(/\\s+/)) {\n + token = iterator.stepBackward();\n + }\n + if (token && token.type === \'support.type\') {\n + var line = session.doc.getLine(range.start.row);\n + var rightChar = line.substring(range.end.column, range.end.column + 1);\n + if (rightChar === \';\') {\n + range.end.column ++;\n + return range;\n + }\n + }\n + }\n + });\n +\n + this.add("semicolon", "insertion", function (state, action, editor, session, text) {\n + if (text === \';\') {\n + var cursor = editor.getCursorPosition();\n + var line = session.doc.getLine(cursor.row);\n + var rightChar = line.substring(cursor.column, cursor.column + 1);\n + if (rightChar === \';\') {\n + return {\n + text: \'\',\n + selection: [1, 1]\n + }\n + }\n + }\n + });\n +\n +}\n +oop.inherits(CssBehaviour, CstyleBehaviour);\n +\n +exports.CssBehaviour = CssBehaviour;\n +});\n +\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n +var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n +\n +var tagMap = lang.createMap({\n + a : \'anchor\',\n + button \t : \'form\',\n + form : \'form\',\n + img : \'image\',\n + input : \'form\',\n + label : \'form\',\n + option : \'form\',\n + script : \'script\',\n + select : \'form\',\n + textarea : \'form\',\n + style : \'style\',\n + table : \'table\',\n + tbody : \'table\',\n + td : \'table\',\n + tfoot : \'table\',\n + th : \'table\',\n + tr : \'table\'\n +});\n +\n +var HtmlHighlightRules = function() {\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n + }, {\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n + }, {\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n + }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +function string(state) {\n + return [{\n + token : "string",\n + regex : \'"\',\n + next : state + "_qqstring"\n + }, {\n + token : "string",\n + regex : "\'",\n + next : state + "_qstring"\n + }];\n +}\n +\n +function multiLineString(quote, state) {\n + return [\n + {token : "string", regex : quote, next : state},\n + {\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n + },\n + {defaultToken : "string"}\n + ];\n +}\n +\n +exports.tag = function(states, name, nextState, tagMap) {\n + states[name] = [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + \n + token : !tagMap ? "meta.tag.tag-name" : function(value) {\n + if (tagMap[value])\n + return "meta.tag.tag-name." + tagMap[value];\n + else\n + return "meta.tag.tag-name";\n + },\n + regex : "[-_a-zA-Z0-9:]+",\n + next : name + "_embed_attribute_list" \n + }, {\n + token: "empty",\n + regex: "",\n + next : name + "_embed_attribute_list"\n + }];\n +\n + states[name + "_qstring"] = multiLineString("\'", name + "_embed_attribute_list");\n + states[name + "_qqstring"] = multiLineString("\\"", name + "_embed_attribute_list");\n + \n + states[name + "_embed_attribute_list"] = [{\n + token : "meta.tag.r",\n + regex : "/?>",\n + next : nextState\n + }, {\n + token : "keyword.operator",\n + regex : "="\n + }, {\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n + }, {\n + token : "constant.numeric", // float\n + regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + }].concat(string(name));\n +};\n +\n +});\n +\n +define(\'ace/mode/behaviour/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour/xml\', \'ace/mode/behaviour/cstyle\', \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var XmlBehaviour = require("../behaviour/xml").XmlBehaviour;\n +var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n + return hasType;\n +}\n +\n +var HtmlBehaviour = function () {\n +\n + this.inherit(XmlBehaviour); // Get xml behaviour\n + \n + this.add("autoclosing", "insertion", function (state, action, editor, session, text) {\n + if (text == \'>\') {\n + var position = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, position.row, position.column);\n + var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n + var atCursor = false;\n + if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'keyword.operator\') || hasType(token, \'entity.attribute-name\') || hasType(token, \'text\')));\n + } else {\n + atCursor = true;\n + }\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n + }\n + var element = token.value;\n + if (atCursor){\n + var element = element.substring(0, position.column - token.start);\n + }\n + if (voidElements.indexOf(element) !== -1){\n + return;\n + }\n + return {\n + text: \'>\' + \'</\' + element + \'>\',\n + selection: [1, 1]\n + }\n + }\n + });\n +}\n +oop.inherits(HtmlBehaviour, XmlBehaviour);\n +\n +exports.HtmlBehaviour = HtmlBehaviour;\n +});\n +\n +define(\'ace/mode/behaviour/xml\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/behaviour\', \'ace/mode/behaviour/cstyle\', \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var Behaviour = require("../behaviour").Behaviour;\n +var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n + return hasType;\n +}\n +\n +var XmlBehaviour = function () {\n + \n + this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour\n + \n + this.add("autoclosing", "insertion", function (state, action, editor, session, text) {\n + if (text == \'>\') {\n + var position = editor.getCursorPosition();\n + var iterator = new TokenIterator(session, position.row, position.column);\n + var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n + var atCursor = false;\n + if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'keyword.operator\') || hasType(token, \'entity.attribute-name\') || hasType(token, \'text\')));\n + } else {\n + atCursor = true;\n + }\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n + }\n + var tag = token.value;\n + if (atCursor){\n + var tag = tag.substring(0, position.column - token.start);\n + }\n +\n + return {\n + text: \'>\' + \'</\' + tag + \'>\',\n + selection: [1, 1]\n + }\n + }\n + });\n +\n + this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n + if (text == "\\n") {\n + var cursor = editor.getCursorPosition();\n + var line = session.getLine(cursor.row);\n + var rightChars = line.substring(cursor.column, cursor.column + 2);\n + if (rightChars == \'</\') {\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n +\n + return {\n + text: \'\\n\' + indent + \'\\n\' + next_indent,\n + selection: [1, indent.length, 1, indent.length]\n + }\n + }\n + }\n + });\n + \n +}\n +oop.inherits(XmlBehaviour, Behaviour);\n +\n +exports.XmlBehaviour = XmlBehaviour;\n +});\n +\n +define(\'ace/mode/folding/html\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/folding/mixed\', \'ace/mode/folding/xml\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var MixedFoldMode = require("./mixed").FoldMode;\n +var XmlFoldMode = require("./xml").FoldMode;\n +var CStyleFoldMode = require("./cstyle").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function() {\n + MixedFoldMode.call(this, new XmlFoldMode({\n + "area": 1,\n + "base": 1,\n + "br": 1,\n + "col": 1,\n + "command": 1,\n + "embed": 1,\n + "hr": 1,\n + "img": 1,\n + "input": 1,\n + "keygen": 1,\n + "link": 1,\n + "meta": 1,\n + "param": 1,\n + "source": 1,\n + "track": 1,\n + "wbr": 1,\n + "li": 1,\n + "dt": 1,\n + "dd": 1,\n + "p": 1,\n + "rt": 1,\n + "rp": 1,\n + "optgroup": 1,\n + "option": 1,\n + "colgroup": 1,\n + "td": 1,\n + "th": 1\n + }), {\n + "js-": new CStyleFoldMode(),\n + "css-": new CStyleFoldMode()\n + });\n +};\n +\n +oop.inherits(FoldMode, MixedFoldMode);\n +\n +});\n +\n +define(\'ace/mode/folding/mixed\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +\n +var FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n + this.defaultMode = defaultMode;\n + this.subModes = subModes;\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n +\n + this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n + for (var key in this.subModes) {\n + if (state.indexOf(key) === 0)\n + return this.subModes[key];\n + }\n + return null;\n + };\n + \n + this.$tryMode = function(state, session, foldStyle, row) {\n + var mode = this.$getMode(state);\n + return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");\n + };\n +\n + this.getFoldWidget = function(session, foldStyle, row) {\n + return (\n + this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n + this.$tryMode(session.getState(row), session, foldStyle, row) ||\n + this.defaultMode.getFoldWidget(session, foldStyle, row)\n + );\n + };\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var mode = this.$getMode(session.getState(row-1));\n + \n + if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n + mode = this.$getMode(session.getState(row));\n + \n + if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n + mode = this.defaultMode;\n + \n + return mode.getFoldWidgetRange(session, foldStyle, row);\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +\n +define(\'ace/mode/folding/xml\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/range\', \'ace/mode/folding/fold_mode\', \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var lang = require("../../lib/lang");\n +var Range = require("../../range").Range;\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +var TokenIterator = require("../../token_iterator").TokenIterator;\n +\n +var FoldMode = exports.FoldMode = function(voidElements) {\n + BaseFoldMode.call(this);\n + this.voidElements = voidElements || {};\n +};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.getFoldWidget = function(session, foldStyle, row) {\n + var tag = this._getFirstTagInLine(session, row);\n +\n + if (tag.closing)\n + return foldStyle == "markbeginend" ? "end" : "";\n +\n + if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])\n + return "";\n +\n + if (tag.selfClosing)\n + return "";\n +\n + if (tag.value.indexOf("/" + tag.tagName) !== -1)\n + return "";\n +\n + return "start";\n + };\n + \n + this._getFirstTagInLine = function(session, row) {\n + var tokens = session.getTokens(row);\n + var value = "";\n + for (var i = 0; i < tokens.length; i++) {\n + var token = tokens[i];\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n + value += token.value;\n + else\n + value += lang.stringRepeat(" ", token.value.length);\n + }\n + \n + return this._parseTag(value);\n + };\n +\n + this.tagRe = /^(\\s*)(<?(\\/?)([-_a-zA-Z0-9:!]*)\\s*(\\/?)>?)/;\n + this._parseTag = function(tag) {\n + \n + var match = tag.match(this.tagRe);\n + var column = 0;\n +\n + return {\n + value: tag,\n + match: match ? match[2] : "",\n + closing: match ? !!match[3] : false,\n + selfClosing: match ? !!match[5] || match[2] == "/>" : false,\n + tagName: match ? match[4] : "",\n + column: match[1] ? column + match[1].length : column\n + };\n + };\n + this._readTagForward = function(iterator) {\n + var token = iterator.getCurrentToken();\n + if (!token)\n + return null;\n + \n + var value = "";\n + var start;\n + \n + do {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n + if (!start) {\n + var start = {\n + row: iterator.getCurrentTokenRow(),\n + column: iterator.getCurrentTokenColumn()\n + };\n + }\n + value += token.value;\n + if (value.indexOf(">") !== -1) {\n + var tag = this._parseTag(value);\n + tag.start = start;\n + tag.end = {\n + row: iterator.getCurrentTokenRow(),\n + column: iterator.getCurrentTokenColumn() + token.value.length\n + };\n + iterator.stepForward();\n + return tag;\n + }\n + }\n + } while(token = iterator.stepForward());\n + \n + return null;\n + };\n + \n + this._readTagBackward = function(iterator) {\n + var token = iterator.getCurrentToken();\n + if (!token)\n + return null;\n + \n + var value = "";\n + var end;\n +\n + do {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n + if (!end) {\n + end = {\n + row: iterator.getCurrentTokenRow(),\n + column: iterator.getCurrentTokenColumn() + token.value.length\n + };\n + }\n + value = token.value + value;\n + if (value.indexOf("<") !== -1) {\n + var tag = this._parseTag(value);\n + tag.end = end;\n + tag.start = {\n + row: iterator.getCurrentTokenRow(),\n + column: iterator.getCurrentTokenColumn()\n + };\n + iterator.stepBackward();\n + return tag;\n + }\n + }\n + } while(token = iterator.stepBackward());\n + \n + return null;\n + };\n + \n + this._pop = function(stack, tag) {\n + while (stack.length) {\n + \n + var top = stack[stack.length-1];\n + if (!tag || top.tagName == tag.tagName) {\n + return stack.pop();\n + }\n + else if (this.voidElements[tag.tagName]) {\n + return;\n + }\n + else if (this.voidElements[top.tagName]) {\n + stack.pop();\n + continue;\n + } else {\n + return null;\n + }\n + }\n + };\n + \n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var firstTag = this._getFirstTagInLine(session, row);\n + \n + if (!firstTag.match)\n + return null;\n + \n + var isBackward = firstTag.closing || firstTag.selfClosing;\n + var stack = [];\n + var tag;\n + \n + if (!isBackward) {\n + var iterator = new TokenIterator(session, row, firstTag.column);\n + var start = {\n + row: row,\n + column: firstTag.column + firstTag.tagName.length + 2\n + };\n + while (tag = this._readTagForward(iterator)) {\n + if (tag.selfClosing) {\n + if (!stack.length) {\n + tag.start.column += tag.tagName.length + 2;\n + tag.end.column -= 2;\n + return Range.fromPoints(tag.start, tag.end);\n + } else\n + continue;\n + }\n + \n + if (tag.closing) {\n + this._pop(stack, tag);\n + if (stack.length == 0)\n + return Range.fromPoints(start, tag.start);\n + }\n + else {\n + stack.push(tag)\n + }\n + }\n + }\n + else {\n + var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);\n + var end = {\n + row: row,\n + column: firstTag.column\n + };\n + \n + while (tag = this._readTagBackward(iterator)) {\n + if (tag.selfClosing) {\n + if (!stack.length) {\n + tag.start.column += tag.tagName.length + 2;\n + tag.end.column -= 2;\n + return Range.fromPoints(tag.start, tag.end);\n + } else\n + continue;\n + }\n + \n + if (!tag.closing) {\n + this._pop(stack, tag);\n + if (stack.length == 0) {\n + tag.start.column += tag.tagName.length + 2;\n + return Range.fromPoints(tag.start, end);\n + }\n + }\n + else {\n + stack.push(tag)\n + }\n + }\n + }\n + \n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +\n +define(\'ace/mode/html_completions\', [\'require\', \'exports\', \'module\' , \'ace/token_iterator\'], function(require, exports, module) {\n +\n +\n +var TokenIterator = require("../token_iterator").TokenIterator;\n +\n +var commonAttributes = [\n + "accesskey",\n + "class",\n + "contenteditable",\n + "contextmenu",\n + "dir",\n + "draggable",\n + "dropzone",\n + "hidden",\n + "id",\n + "lang",\n + "spellcheck",\n + "style",\n + "tabindex",\n + "title",\n + "translate"\n +];\n +\n +var eventAttributes = [\n + "onabort",\n + "onblur",\n + "oncancel",\n + "oncanplay",\n + "oncanplaythrough",\n + "onchange",\n + "onclick",\n + "onclose",\n + "oncontextmenu",\n + "oncuechange",\n + "ondblclick",\n + "ondrag",\n + "ondragend",\n + "ondragenter",\n + "ondragleave",\n + "ondragover",\n + "ondragstart",\n + "ondrop",\n + "ondurationchange",\n + "onemptied",\n + "onended",\n + "onerror",\n + "onfocus",\n + "oninput",\n + "oninvalid",\n + "onkeydown",\n + "onkeypress",\n + "onkeyup",\n + "onload",\n + "onloadeddata",\n + "onloadedmetadata",\n + "onloadstart",\n + "onmousedown",\n + "onmousemove",\n + "onmouseout",\n + "onmouseover",\n + "onmouseup",\n + "onmousewheel",\n + "onpause",\n + "onplay",\n + "onplaying",\n + "onprogress",\n + "onratechange",\n + "onreset",\n + "onscroll",\n + "onseeked",\n + "onseeking",\n + "onselect",\n + "onshow",\n + "onstalled",\n + "onsubmit",\n + "onsuspend",\n + "ontimeupdate",\n + "onvolumechange",\n + "onwaiting"\n +];\n +\n +var globalAttributes = commonAttributes.concat(eventAttributes);\n +\n +var attributeMap = {\n + "html": ["manifest"],\n + "head": [],\n + "title": [],\n + "base": ["href", "target"],\n + "link": ["href", "hreflang", "rel", "media", "type", "sizes"],\n + "meta": ["http-equiv", "name", "content", "charset"],\n + "style": ["type", "media", "scoped"],\n + "script": ["charset", "type", "src", "defer", "async"],\n + "noscript": ["href"],\n + "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],\n + "section": [],\n + "nav": [],\n + "article": ["pubdate"],\n + "aside": [],\n + "h1": [],\n + "h2": [],\n + "h3": [],\n + "h4": [],\n + "h5": [],\n + "h6": [],\n + "header": [],\n + "footer": [],\n + "address": [],\n + "main": [],\n + "p": [],\n + "hr": [],\n + "pre": [],\n + "blockquote": ["cite"],\n + "ol": ["start", "reversed"],\n + "ul": [],\n + "li": ["value"],\n + "dl": [],\n + "dt": [],\n + "dd": [],\n + "figure": [],\n + "figcaption": [],\n + "div": [],\n + "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],\n + "em": [],\n + "strong": [],\n + "small": [],\n + "s": [],\n + "cite": [],\n + "q": ["cite"],\n + "dfn": [],\n + "abbr": [],\n + "data": [],\n + "time": ["datetime"],\n + "code": [],\n + "var": [],\n + "samp": [],\n + "kbd": [],\n + "sub": [],\n + "sup": [],\n + "i": [],\n + "b": [],\n + "u": [],\n + "mark": [],\n + "ruby": [],\n + "rt": [],\n + "rp": [],\n + "bdi": [],\n + "bdo": [],\n + "span": [],\n + "br": [],\n + "wbr": [],\n + "ins": ["cite", "datetime"],\n + "del": ["cite", "datetime"],\n + "img": ["alt", "src", "height", "width", "usemap", "ismap"],\n + "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],\n + "embed": ["src", "height", "width", "type"],\n + "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],\n + "param": ["name", "value"],\n + "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],\n + "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],\n + "source": ["src", "type", "media"],\n + "track": ["kind", "src", "srclang", "label", "default"],\n + "canvas": ["width", "height"],\n + "map": ["name"],\n + "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],\n + "svg": [],\n + "math": [],\n + "table": ["summary"],\n + "caption": [],\n + "colgroup": ["span"],\n + "col": ["span"],\n + "tbody": [],\n + "thead": [],\n + "tfoot": [],\n + "tr": [],\n + "td": ["headers", "rowspan", "colspan"],\n + "th": ["headers", "rowspan", "colspan", "scope"],\n + "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],\n + "fieldset": ["disabled", "form", "name"],\n + "legend": [],\n + "label": ["form", "for"],\n + "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],\n + "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],\n + "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],\n + "datalist": [],\n + "optgroup": ["disabled", "label"],\n + "option": ["disabled", "selected", "label", "value"],\n + "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],\n + "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],\n + "output": ["for", "form", "name"],\n + "progress": ["value", "max"],\n + "meter": ["value", "min", "max", "low", "high", "optimum"],\n + "details": ["open"],\n + "summary": [],\n + "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],\n + "menu": ["type", "label"],\n + "dialog": ["open"]\n +};\n +\n +var allElements = Object.keys(attributeMap);\n +\n +function hasType(token, type) {\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n + });\n +}\n +\n +function findTagName(session, pos) {\n + var iterator = new TokenIterator(session, pos.row, pos.column);\n + var token = iterator.getCurrentToken();\n + if (!token || !hasType(token, \'tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n + do {\n + token = iterator.stepBackward();\n + } while (token && (hasType(token, \'string\') || hasType(token, \'operator\') || hasType(token, \'attribute-name\') || hasType(token, \'text\')));\n + }\n + if (token && hasType(token, \'tag-name\') && !iterator.stepBackward().value.match(\'/\'))\n + return token.value;\n +}\n +\n +var HtmlCompletions = function() {\n +\n +};\n +\n +(function() {\n +\n + this.getCompletions = function(state, session, pos, prefix) {\n + var token = session.getTokenAt(pos.row, pos.column);\n +\n + if (!token)\n + return [];\n + if (hasType(token, "tag-name") || (token.value == \'<\' && hasType(token, "text")))\n + return this.getTagCompletions(state, session, pos, prefix);\n + if (hasType(token, \'text\') || hasType(token, \'attribute-name\'))\n + return this.getAttributeCompetions(state, session, pos, prefix);\n +\n + return [];\n + };\n +\n + this.getTagCompletions = function(state, session, pos, prefix) {\n + var elements = allElements;\n + if (prefix) {\n + elements = elements.filter(function(element){\n + return element.indexOf(prefix) === 0;\n + });\n + }\n + return elements.map(function(element){\n + return {\n + value: element,\n + meta: "tag"\n + };\n + });\n + };\n +\n + this.getAttributeCompetions = function(state, session, pos, prefix) {\n + var tagName = findTagName(session, pos);\n + if (!tagName)\n + return [];\n + var attributes = globalAttributes;\n + if (tagName in attributeMap) {\n + attributes = attributes.concat(attributeMap[tagName]);\n + }\n + if (prefix) {\n + attributes = attributes.filter(function(attribute){\n + return attribute.indexOf(prefix) === 0;\n + });\n + }\n + return attributes.map(function(attribute){\n + return {\n + caption: attribute,\n + snippet: attribute + \'="$0"\',\n + meta: "attribute"\n + };\n + });\n + };\n +\n +}).call(HtmlCompletions.prototype);\n +\n +exports.HtmlCompletions = HtmlCompletions;\n +});\n +\n +define(\'ace/mode/soy_template_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/html_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n +\n +var SoyTemplateHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n +\n + var soyRules = { start: \n + [ { include: \'#template\' },\n + { include: \'#if\' },\n + { include: \'#comment-line\' },\n + { include: \'#comment-block\' },\n + { include: \'#comment-doc\' },\n + { include: \'#call\' },\n + { include: \'#css\' },\n + { include: \'#param\' },\n + { include: \'#print\' },\n + { include: \'#msg\' },\n + { include: \'#for\' },\n + { include: \'#foreach\' },\n + { include: \'#switch\' },\n + { include: \'#tag\' },\n + { include: \'text.html.basic\' } ],\n + \'#call\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.call.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(?=call|delcall)\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { include: \'#string-quoted-single\' },\n + { include: \'#string-quoted-double\' },\n + { token: [\'entity.name.tag.soy\', \'variable.parameter.soy\'],\n + regex: \'(call|delcall)(\\\\s+[\\\\.\\\\w]+)\'},\n + { token: \n + [ \'entity.other.attribute-name.soy\',\n + \'text\',\n + \'keyword.operator.soy\' ],\n + regex: \'\\\\b(data)(\\\\s*)(=)\' },\n + { defaultToken: \'meta.tag.call.soy\' } ] } ],\n + \'#comment-line\': \n + [ { token: \n + [ \'comment.line.double-slash.soy\',\n + \'punctuation.definition.comment.soy\',\n + \'comment.line.double-slash.soy\' ],\n + regex: \'(\\\\s+)(//)(.*$)\' } ],\n + \'#comment-block\': \n + [ { token: \'punctuation.definition.comment.begin.soy\',\n + regex: \'/\\\\*(?!\\\\*)\',\n + push: \n + [ { token: \'punctuation.definition.comment.end.soy\',\n + regex: \'\\\\*/\',\n + next: \'pop\' },\n + { defaultToken: \'comment.block.soy\' } ] } ],\n + \'#comment-doc\': \n + [ { token: \'punctuation.definition.comment.begin.soy\',\n + regex: \'/\\\\*\\\\*(?!/)\',\n + push: \n + [ { token: \'punctuation.definition.comment.end.soy\',\n + regex: \'\\\\*/\',\n + next: \'pop\' },\n + { token: [ \'support.type.soy\', \'text\', \'variable.parameter.soy\' ],\n + regex: \'(@param|@param\\\\?)(\\\\s+)(\\\\w+)\' },\n + { defaultToken: \'comment.block.documentation.soy\' } ] } ],\n + \'#css\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.css.soy\',\n + \'entity.name.tag.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(css)\\\\b\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { token: \'support.constant.soy\',\n + regex: \'\\\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\\\b\' },\n + { defaultToken: \'meta.tag.css.soy\' } ] } ],\n + \'#for\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.for.soy\',\n + \'entity.name.tag.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(for)\\\\b\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { token: \'keyword.operator.soy\', regex: \'\\\\bin\\\\b\' },\n + { token: \'support.function.soy\', regex: \'\\\\brange\\\\b\' },\n + { include: \'#variable\' },\n + { include: \'#number\' },\n + { include: \'#primitive\' },\n + { defaultToken: \'meta.tag.for.soy\' } ] } ],\n + \'#foreach\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.foreach.soy\',\n + \'entity.name.tag.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(foreach)\\\\b\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { token: \'keyword.operator.soy\', regex: \'\\\\bin\\\\b\' },\n + { include: \'#variable\' },\n + { defaultToken: \'meta.tag.foreach.soy\' } ] } ],\n + \'#function\': \n + [ { token: \'support.function.soy\',\n + regex: \'\\\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\\\b\' } ],\n + \'#if\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.if.soy\',\n + \'entity.name.tag.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(if|elseif)\\\\b\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { include: \'#variable\' },\n + { include: \'#operator\' },\n + { include: \'#function\' },\n + { include: \'#string-quoted-single\' },\n + { include: \'#string-quoted-double\' },\n + { defaultToken: \'meta.tag.if.soy\' } ] } ],\n + \'#namespace\': \n + [ { token: [ \'entity.name.tag.soy\', \'text\', \'variable.parameter.soy\' ],\n + regex: \'(namespace|delpackage)(\\\\s+)([\\\\w\\\\.]+)\' } ],\n + \'#number\': [ { token: \'constant.numeric\', regex: \'[\\\\d]+\' } ],\n + \'#operator\': \n + [ { token: \'keyword.operator.soy\',\n + regex: \'==|!=|\\\\band\\\\b|\\\\bor\\\\b|\\\\bnot\\\\b|-|\\\\+|/|\\\\?:\' } ],\n + \'#param\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.param.soy\',\n + \'entity.name.tag.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(param)\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { include: \'#variable\' },\n + { token: \n + [ \'entity.other.attribute-name.soy\',\n + \'text\',\n + \'keyword.operator.soy\' ],\n + regex: \'\\\\b([\\\\w]*)(\\\\s*)((?::)?)\' },\n + { defaultToken: \'meta.tag.param.soy\' } ] } ],\n + \'#primitive\': \n + [ { token: \'constant.language.soy\',\n + regex: \'\\\\b(?:null|false|true)\\\\b\' } ],\n + \'#msg\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.msg.soy\',\n + \'entity.name.tag.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(msg)\\\\b\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { include: \'#string-quoted-single\' },\n + { include: \'#string-quoted-double\' },\n + { token: \n + [ \'entity.other.attribute-name.soy\',\n + \'text\',\n + \'keyword.operator.soy\' ],\n + regex: \'\\\\b(meaning|desc)(\\\\s*)(=)\' },\n + { defaultToken: \'meta.tag.msg.soy\' } ] } ],\n + \'#print\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.print.soy\',\n + \'entity.name.tag.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(print)\\\\b\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { include: \'#variable\' },\n + { include: \'#print-parameter\' },\n + { include: \'#number\' },\n + { include: \'#primitive\' },\n + { include: \'#attribute-lookup\' },\n + { defaultToken: \'meta.tag.print.soy\' } ] } ],\n + \'#print-parameter\': \n + [ { token: \'keyword.operator.soy\', regex: \'\\\\|\' },\n + { token: \'variable.parameter.soy\',\n + regex: \'noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate\' } ],\n + \'#special-character\': \n + [ { token: \'support.constant.soy\',\n + regex: \'\\\\bsp\\\\b|\\\\bnil\\\\b|\\\\\\\\r|\\\\\\\\n|\\\\\\\\t|\\\\blb\\\\b|\\\\brb\\\\b\' } ],\n + \'#string-quoted-double\': [ { token: \'string.quoted.double\', regex: \'"[^"]*"\' } ],\n + \'#string-quoted-single\': [ { token: \'string.quoted.single\', regex: \'\\\'[^\\\']*\\\'\' } ],\n + \'#switch\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.switch.soy\',\n + \'entity.name.tag.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(switch|case)\\\\b\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { include: \'#variable\' },\n + { include: \'#function\' },\n + { include: \'#number\' },\n + { include: \'#string-quoted-single\' },\n + { include: \'#string-quoted-double\' },\n + { defaultToken: \'meta.tag.switch.soy\' } ] } ],\n + \'#attribute-lookup\': \n + [ { token: \'punctuation.definition.attribute-lookup.begin.soy\',\n + regex: \'\\\\[\',\n + push: \n + [ { token: \'punctuation.definition.attribute-lookup.end.soy\',\n + regex: \'\\\\]\',\n + next: \'pop\' },\n + { include: \'#variable\' },\n + { include: \'#function\' },\n + { include: \'#operator\' },\n + { include: \'#number\' },\n + { include: \'#primitive\' },\n + { include: \'#string-quoted-single\' },\n + { include: \'#string-quoted-double\' } ] } ],\n + \'#tag\': \n + [ { token: \'punctuation.definition.tag.begin.soy\',\n + regex: \'\\\\{\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { include: \'#namespace\' },\n + { include: \'#variable\' },\n + { include: \'#special-character\' },\n + { include: \'#tag-simple\' },\n + { include: \'#function\' },\n + { include: \'#operator\' },\n + { include: \'#attribute-lookup\' },\n + { include: \'#number\' },\n + { include: \'#primitive\' },\n + { include: \'#print-parameter\' } ] } ],\n + \'#tag-simple\': \n + [ { token: \'entity.name.tag.soy\',\n + regex: \'{{\\\\s*(?:literal|else|ifempty|default)\\\\s*(?=\\\\})\'} ],\n + \'#template\': \n + [ { token: \n + [ \'punctuation.definition.tag.begin.soy\',\n + \'meta.tag.template.soy\' ],\n + regex: \'(\\\\{/?)(\\\\s*)(?=template|deltemplate)\',\n + push: \n + [ { token: \'punctuation.definition.tag.end.soy\',\n + regex: \'\\\\}\',\n + next: \'pop\' },\n + { token: [\'entity.name.tag.soy\', \'text\', \'entity.name.function.soy\' ],\n + regex: \'(template|deltemplate)(\\\\s+)([\\\\.\\\\w]+)\',\n + originalRegex: \'(?<=template|deltemplate)\\\\s+([\\\\.\\\\w]+)\' },\n + { token: \n + [ \'entity.other.attribute-name.soy\',\n + \'text\',\n + \'keyword.operator.soy\',\n + \'text\',\n + \'string.quoted.double.soy\' ],\n + regex: \'\\\\b(private)(\\\\s*)(=)(\\\\s*)("true"|"false")\' },\n + { token: \n + [ \'entity.other.attribute-name.soy\',\n + \'text\',\n + \'keyword.operator.soy\',\n + \'text\',\n + \'string.quoted.single.soy\' ],\n + regex: \'\\\\b(private)(\\\\s*)(=)(\\\\s*)(\\\'true\\\'|\\\'false\\\')\' },\n + { token: \n + [ \'entity.other.attribute-name.soy\',\n + \'text\',\n + \'keyword.operator.soy\',\n + \'text\',\n + \'string.quoted.double.soy\' ],\n + regex: \'\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)("true"|"false"|"contextual")\' },\n + { token: \n + [ \'entity.other.attribute-name.soy\',\n + \'text\',\n + \'keyword.operator.soy\',\n + \'text\',\n + \'string.quoted.single.soy\' ],\n + regex: \'\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\\\'true\\\'|\\\'false\\\'|\\\'contextual\\\')\' },\n + { defaultToken: \'meta.tag.template.soy\' } ] } ],\n + \'#variable\': [ { token: \'variable.other.soy\', regex: \'\\\\$[\\\\w\\\\.]+\' } ] }\n + \n + \n + for (var i in soyRules) {\n + if (this.$rules[i]) {\n + this.$rules[i].unshift.call(this.$rules[i], soyRules[i]);\n + } else {\n + this.$rules[i] = soyRules[i];\n + }\n + }\n + \n + this.normalizeRules();\n +};\n +\n +SoyTemplateHighlightRules.metaData = { comment: \'SoyTemplate\',\n + fileTypes: [ \'soy\' ],\n + firstLineMatch: \'\\\\{\\\\s*namespace\\\\b\',\n + foldingStartMarker: \'\\\\{\\\\s*template\\\\s+[^\\\\}]*\\\\}\',\n + foldingStopMarker: \'\\\\{\\\\s*/\\\\s*template\\\\s*\\\\}\',\n + name: \'SoyTemplate\',\n + scopeName: \'source.soy\' }\n +\n +\n +oop.inherits(SoyTemplateHighlightRules, HtmlHighlightRules);\n +\n +exports.SoyTemplateHighlightRules = SoyTemplateHighlightRules;\n +}); + +]]></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-space.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-space.js.xml new file mode 100644 index 0000000000..16a58ad9b0 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-space.js.xml @@ -0,0 +1,203 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.2</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-space.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +define(\'ace/mode/space\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/folding/coffee\', \'ace/mode/space_highlight_rules\'], function(require, exports, module) {\n +\n +var oop = require("../lib/oop");\n +var TextMode = require("./text").Mode;\n +var Tokenizer = require("../tokenizer").Tokenizer;\n +var FoldMode = require("./folding/coffee").FoldMode;\n +var SpaceHighlightRules = require("./space_highlight_rules").SpaceHighlightRules;\n +var Mode = function() {\n + var highlighter = new SpaceHighlightRules();\n + this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.foldingRules = new FoldMode();\n +};\n +oop.inherits(Mode, TextMode);\n +(function() {\n + \n +}).call(Mode.prototype);\n +exports.Mode = Mode;\n +});\n +\n +define(\'ace/mode/folding/coffee\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/folding/fold_mode\', \'ace/range\'], function(require, exports, module) {\n +\n +\n +var oop = require("../../lib/oop");\n +var BaseFoldMode = require("./fold_mode").FoldMode;\n +var Range = require("../../range").Range;\n +\n +var FoldMode = exports.FoldMode = function() {};\n +oop.inherits(FoldMode, BaseFoldMode);\n +\n +(function() {\n +\n + this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var range = this.indentationBlock(session, row);\n + if (range)\n + return range;\n +\n + var re = /\\S/;\n + var line = session.getLine(row);\n + var startLevel = line.search(re);\n + if (startLevel == -1 || line[startLevel] != "#")\n + return;\n +\n + var startColumn = line.length;\n + var maxRow = session.getLength();\n + var startRow = row;\n + var endRow = row;\n +\n + while (++row < maxRow) {\n + line = session.getLine(row);\n + var level = line.search(re);\n +\n + if (level == -1)\n + continue;\n +\n + if (line[level] != "#")\n + break;\n +\n + endRow = row;\n + }\n +\n + if (endRow > startRow) {\n + var endColumn = session.getLine(endRow).length;\n + return new Range(startRow, startColumn, endRow, endColumn);\n + }\n + };\n + this.getFoldWidget = function(session, foldStyle, row) {\n + var line = session.getLine(row);\n + var indent = line.search(/\\S/);\n + var next = session.getLine(row + 1);\n + var prev = session.getLine(row - 1);\n + var prevIndent = prev.search(/\\S/);\n + var nextIndent = next.search(/\\S/);\n +\n + if (indent == -1) {\n + session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";\n + return "";\n + }\n + if (prevIndent == -1) {\n + if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {\n + session.foldWidgets[row - 1] = "";\n + session.foldWidgets[row + 1] = "";\n + return "start";\n + }\n + } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {\n + if (session.getLine(row - 2).search(/\\S/) == -1) {\n + session.foldWidgets[row - 1] = "start";\n + session.foldWidgets[row + 1] = "";\n + return "";\n + }\n + }\n +\n + if (prevIndent!= -1 && prevIndent < indent)\n + session.foldWidgets[row - 1] = "start";\n + else\n + session.foldWidgets[row - 1] = "";\n +\n + if (indent < nextIndent)\n + return "start";\n + else\n + return "";\n + };\n +\n +}).call(FoldMode.prototype);\n +\n +});\n +define(\'ace/mode/space_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var SpaceHighlightRules = function() {\n + this.$rules = {\n + "start" : [\n + {\n + token : "empty_line",\n + regex : / */,\n + next : "key"\n + },\n + {\n + token : "empty_line",\n + regex : /$/,\n + next : "key"\n + }\n + ],\n + "key" : [\n + {\n + token : "variable",\n + regex : /\\S+/\n + },\n + {\n + token : "empty_line",\n + regex : /$/,\n + next : "start"\n + },{\n + token : "keyword.operator",\n + regex : / /,\n + next : "value"\n + }\n + ],\n + "value" : [\n + {\n + token : "keyword.operator",\n + regex : /$/,\n + next : "start"\n + },\n + {\n + token : "string",\n + regex : /[^$]/\n + }\n + ]\n + };\n + \n +};\n +\n +oop.inherits(SpaceHighlightRules, TextHighlightRules);\n +\n +exports.SpaceHighlightRules = SpaceHighlightRules;\n +});\n + + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>4819</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sql.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sql.js.xml index b533632c90..b0d04f2bac 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sql.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-sql.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155564.21</string> </value> + <value> <string>ts83646621.21</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules;\n var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new SqlHighlightRules().getRules());\n + this.HighlightRules = SqlHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -150,7 +150,7 @@ exports.SqlHighlightRules = SqlHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>4202</int> </value> + <value> <int>4174</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-stylus.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-stylus.js.xml index 84ba1db77b..ae63914f6c 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-stylus.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-stylus.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155564.32</string> </value> + <value> <string>ts83646621.19</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,14 +67,12 @@ var StylusHighlightRules = require("./stylus_highlight_rules").StylusHighlightRu var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - var highlighter = new StylusHighlightRules();\n + this.HighlightRules = StylusHighlightRules;\n this.foldingRules = new FoldMode();\n - \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n -(function() {\n +(function() { \n }).call(Mode.prototype);\n \n exports.Mode = Mode;\n @@ -265,152 +263,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -515,7 +478,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>22102</int> </value> + <value> <int>21100</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-svg.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-svg.js.xml index dfe29bf085..dffb1d5f61 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-svg.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-svg.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155564.42</string> </value> + <value> <string>ts83646621.17</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,10 +67,8 @@ var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n var Mode = function() {\n XmlMode.call(this);\n \n - this.highlighter = new SvgHighlightRules();\n - this.$tokenizer = new Tokenizer(this.highlighter.getRules());\n + this.HighlightRules = SvgHighlightRules;\n \n - this.$embeds = this.highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode\n });\n @@ -105,7 +103,7 @@ var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;\n var XmlFoldMode = require("./folding/xml").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());\n + this.HighlightRules = XmlHighlightRules;\n this.$behaviour = new XmlBehaviour();\n this.foldingRules = new XmlFoldMode();\n };\n @@ -128,36 +126,181 @@ var oop = require("../lib/oop");\n var xmlUtil = require("./xml_util");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n \n -var XmlHighlightRules = function() {\n +var XmlHighlightRules = function(normalize) {\n this.$rules = {\n start : [\n - {token : "text", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n - {token : "xml-pe", regex : "<\\\\?.*?\\\\?>"},\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n {token : "comment", regex : "<\\\\!--", next : "comment"},\n - {token : "xml-pe", regex : "<\\\\!.*?>"},\n - {token : "meta.tag", regex : "<\\\\/?", next : "tag"},\n - {token : "text", regex : "\\\\s+"},\n {\n - token : "constant.character.entity", \n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n - }\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n ],\n - \n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n cdata : [\n - {token : "text", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n {token : "text", regex : "\\\\s+"},\n {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n ],\n \n comment : [\n - {token : "comment", regex : ".*?-->", next : "start"},\n - {token : "comment", regex : ".+"}\n - ]\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start");\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n oop.inherits(XmlHighlightRules, TextHighlightRules);\n \n exports.XmlHighlightRules = XmlHighlightRules;\n @@ -242,14 +385,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -263,6 +401,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -271,8 +412,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -289,11 +430,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -672,7 +813,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -705,7 +846,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -738,7 +879,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -867,7 +1008,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -882,7 +1024,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -988,7 +1130,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -1063,7 +1206,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -1108,8 +1251,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -1196,6 +1339,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1377,34 +1528,19 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n });\n \n -define(\'ace/mode/svg_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\', \'ace/mode/xml_util\'], function(require, exports, module) {\n +define(\'ace/mode/svg_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n -var xmlUtil = require("./xml_util");\n \n var SvgHighlightRules = function() {\n XmlHighlightRules.call(this);\n \n - this.$rules.start.splice(3, 0, {\n - token : "meta.tag",\n - regex : "<(?=script)",\n - next : "script"\n - });\n - \n - xmlUtil.tag(this.$rules, "script", "js-start");\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + this.normalizeRules();\n };\n \n oop.inherits(SvgHighlightRules, XmlHighlightRules);\n @@ -1428,6 +1564,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -1473,7 +1611,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>56203</int> </value> + <value> <int>60437</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tcl.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tcl.js.xml index 9497ed2e3c..c71c5ce457 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tcl.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tcl.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155564.53</string> </value> + <value> <string>ts83646621.16</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,7 +64,7 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new TclHighlightRules().getRules());\n + this.HighlightRules = TclHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new CStyleFoldMode();\n };\n @@ -77,7 +77,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n \n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n @@ -351,7 +351,7 @@ exports.MatchingBraceOutdent = MatchingBraceOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>10853</int> </value> + <value> <int>10829</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tex.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tex.js.xml index 2af0d5e7f5..c9ba0a478c 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tex.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tex.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155564.67</string> </value> + <value> <string>ts83646621.15</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -32,11 +32,31 @@ * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n - * This program is licensed to you under the terms of version 3 of the\n - * GNU Affero General Public License. This program is distributed WITHOUT\n - * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\n - * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\n - * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + *\n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + *\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n define(\'ace/mode/tex\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/text_highlight_rules\', \'ace/mode/tex_highlight_rules\', \'ace/mode/matching_brace_outdent\'], function(require, exports, module) {\n @@ -51,9 +71,9 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd \n var Mode = function(suppressHighlighting) {\n \tif (suppressHighlighting)\n - \tthis.$tokenizer = new Tokenizer(new TextHighlightRules().getRules());\n + \tthis.HighlightRules = TextHighlightRules;\n \telse\n - \tthis.$tokenizer = new Tokenizer(new TexHighlightRules().getRules());\n + \tthis.HighlightRules = TexHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n };\n oop.inherits(Mode, TextMode);\n @@ -198,7 +218,7 @@ exports.MatchingBraceOutdent = MatchingBraceOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>5466</int> </value> + <value> <int>6579</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-text.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-text.js.xml index 2f20007e85..fcb6efd3a8 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-text.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-text.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155564.88</string> </value> + <value> <string>ts83646621.13</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-textile.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-textile.js.xml index df85fb5115..bcb8f8ac94 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-textile.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-textile.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155564.77</string> </value> + <value> <string>ts83646621.12</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -60,7 +60,7 @@ var TextileHighlightRules = require("./textile_highlight_rules").TextileHighligh var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new TextileHighlightRules().getRules());\n + this.HighlightRules = TextileHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n };\n oop.inherits(Mode, TextMode);\n @@ -198,7 +198,7 @@ exports.MatchingBraceOutdent = MatchingBraceOutdent;\n </item> <item> <key> <string>size</string> </key> - <value> <int>5601</int> </value> + <value> <int>5573</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tmsnippet.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tmsnippet.js.xml index 76f82300cc..127297dbf8 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tmsnippet.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-tmsnippet.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155565.02</string> </value> + <value> <string>ts83646621.1</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-toml.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-toml.js.xml index 43bc7b1aa2..15443347b8 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-toml.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-toml.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155565.12</string> </value> + <value> <string>ts83646621.82</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -20,7 +20,9 @@ </item> <item> <key> <string>data</string> </key> - <value> <string>/* ***** BEGIN LICENSE BLOCK *****\n + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n @@ -55,19 +57,18 @@ *\n * ***** END LICENSE BLOCK ***** */\n \n -define(\'ace/mode/toml\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/toml_highlight_rules\', \'ace/mode/folding/cstyle\'], function(require, exports, module) {\n +define(\'ace/mode/toml\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/toml_highlight_rules\', \'ace/mode/folding/ini\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var TextMode = require("./text").Mode;\n var Tokenizer = require("../tokenizer").Tokenizer;\n var TomlHighlightRules = require("./toml_highlight_rules").TomlHighlightRules;\n -var FoldMode = require("./folding/cstyle").FoldMode;\n +var FoldMode = require("./folding/ini").FoldMode;\n \n var Mode = function() {\n - var highlighter = new TomlHighlightRules();\n + this.HighlightRules = TomlHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n };\n oop.inherits(Mode, TextMode);\n \n @@ -147,60 +148,59 @@ oop.inherits(TomlHighlightRules, TextHighlightRules);\n exports.TomlHighlightRules = TomlHighlightRules;\n });\n \n -define(\'ace/mode/folding/cstyle\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n +define(\'ace/mode/folding/ini\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/range\', \'ace/mode/folding/fold_mode\'], function(require, exports, module) {\n \n \n var oop = require("../../lib/oop");\n var Range = require("../../range").Range;\n var BaseFoldMode = require("./fold_mode").FoldMode;\n \n -var FoldMode = exports.FoldMode = function(commentRegex) {\n - if (commentRegex) {\n - this.foldingStartMarker = new RegExp(\n - this.foldingStartMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.start)\n - );\n - this.foldingStopMarker = new RegExp(\n - this.foldingStopMarker.source.replace(/\\|[^|]*?$/, "|" + commentRegex.end)\n - );\n - }\n +var FoldMode = exports.FoldMode = function() {\n };\n oop.inherits(FoldMode, BaseFoldMode);\n \n (function() {\n \n - this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n - this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n + this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n \n this.getFoldWidgetRange = function(session, foldStyle, row) {\n + var re = this.foldingStartMarker;\n var line = session.getLine(row);\n - var match = line.match(this.foldingStartMarker);\n - if (match) {\n - var i = match.index;\n -\n - if (match[1])\n - return this.openingBracketBlock(session, match[1], row, i);\n -\n - return session.getCommentFoldRange(row, i + match[0].length, 1);\n + \n + var m = line.match(re);\n + \n + if (!m) return;\n + \n + var startName = m[1] + ".";\n + \n + var startColumn = line.length;\n + var maxRow = session.getLength();\n + var startRow = row;\n + var endRow = row;\n +\n + while (++row < maxRow) {\n + line = session.getLine(row);\n + if (/^\\s*$/.test(line))\n + continue;\n + m = line.match(re);\n + if (m && m[1].lastIndexOf(startName, 0) !== 0)\n + break;\n +\n + endRow = row;\n }\n \n - if (foldStyle !== "markbeginend")\n - return;\n -\n - var match = line.match(this.foldingStopMarker);\n - if (match) {\n - var i = match.index + match[0].length;\n -\n - if (match[1])\n - return this.closingBracketBlock(session, match[1], row, i);\n -\n - return session.getCommentFoldRange(row, i, -1);\n + if (endRow > startRow) {\n + var endColumn = session.getLine(endRow).length;\n + return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n \n }).call(FoldMode.prototype);\n \n });\n -</string> </value> + + +]]></string> </value> </item> <item> <key> <string>precondition</string> </key> @@ -208,7 +208,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>5886</int> </value> + <value> <int>5521</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-twig.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-twig.js.xml index 20d15e15db..002ebeda22 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-twig.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-twig.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155565.22</string> </value> + <value> <string>ts83646621.08</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>81415</int> </value> + <value> <int>86564</int> </value> </item> <item> <key> <string>title</string> </key> @@ -93,12 +93,10 @@ var HtmlFoldMode = require("./folding/html").FoldMode;\n var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n \n var Mode = function() {\n - var highlighter = new TwigHighlightRules();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = TwigHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new HtmlBehaviour();\n \n - this.$embeds = highlighter.getEmbeds();\n this.createModeDelegates({\n "js-": JavaScriptMode,\n "css-": CssMode\n @@ -114,7 +112,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -158,7 +156,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -173,7 +172,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -279,7 +278,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -354,7 +354,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -399,8 +399,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -487,6 +487,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -1004,7 +1012,7 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());\n + this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -1018,7 +1026,7 @@ oop.inherits(Mode, TextMode);\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n - var tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n + var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == "comment") {\n return indent;\n }\n @@ -1085,152 +1093,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -1343,33 +1316,35 @@ var TwigHighlightRules = function() {\n "keyword.operator.twig": operators,\n "constant.language.twig": constants\n }, "identifier");\n - this.$rules.start.unshift({\n - token : "variable.other.readwrite.local.twig",\n - regex : "\\\\{\\\\{-?",\n - next : "twig-start"\n - }, {\n - token : "meta.tag.twig",\n - regex : "\\\\{%-?",\n - next : "twig-start"\n - }, {\n - token : "comment.block.twig",\n - regex : "\\\\{#-?",\n - next : "comment"\n - });\n - this.$rules.comment.unshift({\n + for (var rule in this.$rules) {\n + this.$rules[rule].unshift({\n + token : "variable.other.readwrite.local.twig",\n + regex : "\\\\{\\\\{-?",\n + push : "twig-start"\n + }, {\n + token : "meta.tag.twig",\n + regex : "\\\\{%-?",\n + push : "twig-start"\n + }, {\n + token : "comment.block.twig",\n + regex : "\\\\{#-?",\n + push : "twig-comment"\n + });\n + }\n + this.$rules["twig-comment"] = [{\n token : "comment.block.twig",\n regex : ".*-?#\\\\}",\n - next : "start"\n - });\n + next : "pop"\n + }];\n \n this.$rules["twig-start"] = [{\n token : "variable.other.readwrite.local.twig",\n regex : "-?\\\\}\\\\}",\n - next : "start"\n + next : "pop"\n }, {\n token : "meta.tag.twig",\n regex : "-?%\\\\}",\n - next : "start"\n + next : "pop"\n }, {\n token : "string",\n regex : "\'",\n @@ -1415,8 +1390,6 @@ var TwigHighlightRules = function() {\n token : "text",\n regex : "\\\\s+"\n } ];\n -\n - \n \n this.$rules["twig-qqstring"] = [{\n token : "constant.language.escape",\n @@ -1424,7 +1397,7 @@ var TwigHighlightRules = function() {\n }, {\n token : "string",\n regex : \'"\',\n - next : "twig-start",\n + next : "twig-start"\n }, {\n defaultToken : "string"\n }\n @@ -1436,11 +1409,13 @@ var TwigHighlightRules = function() {\n }, {\n token : "string",\n regex : "\'",\n - next : "twig-start",\n + next : "twig-start"\n }, {\n defaultToken : "string"\n }\n ];\n +\n + this.normalizeRules();\n };\n \n oop.inherits(TwigHighlightRules, TextHighlightRules);\n @@ -1448,15 +1423,14 @@ oop.inherits(TwigHighlightRules, TextHighlightRules);\n exports.TwigHighlightRules = TwigHighlightRules;\n });\n \n -define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n -var xmlUtil = require("./xml_util");\n -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n \n var tagMap = lang.createMap({\n a : \'anchor\',\n @@ -1465,6 +1439,7 @@ var tagMap = lang.createMap({\n img : \'image\',\n input : \'form\',\n label : \'form\',\n + option : \'form\',\n script : \'script\',\n select : \'form\',\n textarea : \'form\',\n @@ -1478,80 +1453,255 @@ var tagMap = lang.createMap({\n });\n \n var HtmlHighlightRules = function() {\n - this.$rules = {\n - start : [{\n - token : "text",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\!.*?>"\n + XmlHighlightRules.call(this);\n +\n + this.addRules({\n + attributes: [{\n + include : "space"\n }, {\n - token : "meta.tag",\n - regex : "<(?=script\\\\b)",\n - next : "script"\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n }, {\n - token : "meta.tag",\n - regex : "<(?=style\\\\b)",\n - next : "style"\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=\\\\S)",\n - next : "tag"\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n +\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n token : "text",\n regex : "\\\\s+"\n }, {\n - token : "constant.character.entity",\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n }],\n - \n - cdata : [ {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - } ],\n \n - comment : [ {\n - token : "comment",\n - regex : ".*?-->",\n - next : "start"\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n }, {\n - defaultToken : "comment"\n - } ]\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start", tagMap);\n - xmlUtil.tag(this.$rules, "style", "css-start", tagMap);\n - xmlUtil.tag(this.$rules, "script", "js-start", tagMap);\n - \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n - \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n -oop.inherits(HtmlHighlightRules, TextHighlightRules);\n \n -exports.HtmlHighlightRules = HtmlHighlightRules;\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n });\n \n define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n @@ -1634,14 +1784,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1656,7 +1801,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1666,8 +1811,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1697,14 +1842,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1718,6 +1858,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1726,8 +1869,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1744,11 +1887,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1827,6 +1970,8 @@ oop.inherits(FoldMode, BaseFoldMode);\n \n \n this.$getMode = function(state) {\n + if (typeof state != "string") \n + state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n @@ -1903,7 +2048,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -1936,7 +2081,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -1969,7 +2114,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-typescript.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-typescript.js.xml index 1ced0852c8..8c12b17fde 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-typescript.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-typescript.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155565.29</string> </value> + <value> <string>ts83646621.06</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -64,9 +64,8 @@ var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;\n \n var Mode = function() {\n - var highlighter = new TypeScriptHighlightRules();\n + this.HighlightRules = TypeScriptHighlightRules;\n \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -96,7 +95,8 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;\n var CStyleFoldMode = require("./folding/cstyle").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());\n + this.HighlightRules = JavaScriptHighlightRules;\n + \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n @@ -111,7 +111,7 @@ oop.inherits(Mode, TextMode);\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n \n - var tokenizedLine = this.$tokenizer.getLineTokens(line, state);\n + var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n \n @@ -217,7 +217,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -292,7 +293,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -337,8 +338,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -425,6 +426,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -992,7 +1001,7 @@ exports.TypeScriptHighlightRules = TypeScriptHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>41207</int> </value> + <value> <int>41476</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-vbscript.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-vbscript.js.xml index ec22de5f8c..40af88c562 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-vbscript.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-vbscript.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155565.43</string> </value> + <value> <string>ts83646621.04</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -66,9 +66,7 @@ var Tokenizer = require("../tokenizer").Tokenizer;\n var VBScriptHighlightRules = require("./vbscript_highlight_rules").VBScriptHighlightRules;\n \n var Mode = function() {\n - var highlighter = new VBScriptHighlightRules();\n - \n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n + this.HighlightRules = VBScriptHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -192,7 +190,7 @@ var VBScriptHighlightRules = function() {\n token: [\n "support.function.asp"\n ],\n - regex: "(?:\\\\b(Lock|Unlock|SetAbort|SetComplete|BianryRead|AddHeader|AppendToLog|BinaryWrite|Clear|End|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex)\\\\b)"\n + regex: "(?:\\\\b(Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog|BinaryWrite|Clear|End|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex)\\\\b)"\n },\n {\n token: [\n @@ -312,7 +310,7 @@ exports.VBScriptHighlightRules = VBScriptHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>10027</int> </value> + <value> <int>9959</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-velocity.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-velocity.js.xml index 47bbc34b8c..c8c9ea82cb 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-velocity.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-velocity.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155565.56</string> </value> + <value> <string>ts83646621.03</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -18,6 +18,33 @@ <key> <string>content_type</string> </key> <value> <string>application/javascript</string> </value> </item> + <item> + <key> <string>data</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>68951</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> <item> <key> <string>data</string> </key> <value> <string encoding="cdata"><![CDATA[ @@ -64,30 +91,29 @@ var FoldMode = require("./folding/velocity").FoldMode;\n var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;\n \n var Mode = function() {\n - var highlighter = new VelocityHighlightRules();\n + this.HighlightRules = VelocityHighlightRules;\n this.foldingRules = new FoldMode();\n - this.$tokenizer = new Tokenizer(highlighter.getRules());\n this.$behaviour = new HtmlBehaviour();\n };\n oop.inherits(Mode, TextMode);\n \n (function() {\n - this.lineCommentStart = "##";\n - this.blockComment = {start: "#*", end: "*#"};\n + this.lineCommentStart = "##";\n + this.blockComment = {start: "#*", end: "*#"};\n }).call(Mode.prototype);\n \n exports.Mode = Mode;\n -});define(\'ace/mode/velocity_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\'], function(require, exports, module) {\n +});define(\'ace/mode/velocity_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/text_highlight_rules\', \'ace/mode/html_highlight_rules\'], function(require, exports, module) {\n \n \n var oop = require("../lib/oop");\n var lang = require("../lib/lang");\n -var xmlUtil = require("./xml_util");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n -var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n -var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;\n \n var VelocityHighlightRules = function() {\n + HtmlHighlightRules.call(this);\n +\n var builtinConstants = lang.arrayToMap(\n (\'true|false|null\').split(\'|\')\n );\n @@ -107,194 +133,140 @@ var VelocityHighlightRules = function() {\n ).split(\'|\')\n );\n \n - this.$rules = {\n - "start" : [\n - {\n - token : "meta.tag",\n - regex : "<\\\\!\\\\[CDATA\\\\[",\n - next : "cdata"\n - }, {\n - token : "xml-pe",\n - regex : "<\\\\?.*?\\\\?>"\n - }, {\n - token : "comment",\n - regex : "<\\\\!--",\n - next : "comment"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=\\\\s*script\\\\b)",\n - next : "script"\n - }, {\n - token : "meta.tag",\n - regex : "<(?=\\\\s*style\\\\b)",\n - next : "style"\n - }, {\n - token : "meta.tag", // opening tag\n - regex : "<\\\\/?(?=[a-z])",\n - next : "tag"\n - }, {\n - token : "comment",\n - regex : "##.*$"\n - },{\n - token : "comment.block", // multi line comment\n - regex : "#\\\\*",\n - next : "comment"\n - }, {\n - token : "string.regexp",\n - regex : "[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : "constant.numeric", // hex\n - regex : "0[xX][0-9a-fA-F]+\\\\b"\n - }, {\n - token : "constant.numeric", // float\n - regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n - }, {\n - token : "constant.language.boolean",\n - regex : "(?:true|false)\\\\b"\n - }, {\n - token : function(value) {\n - if (keywords.hasOwnProperty(value))\n - return "keyword";\n - else if (builtinConstants.hasOwnProperty(value))\n - return "constant.language";\n - else if (builtinVariables.hasOwnProperty(value))\n - return "variable.language";\n - else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n - return "support.function";\n - else if (value == "debugger")\n - return "invalid.deprecated";\n - else\n - if(value.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/))\n - return "variable";\n - return "identifier";\n - },\n - regex : "[a-zA-Z$#][a-zA-Z0-9_]*\\\\b"\n - }, {\n - token : "keyword.operator",\n - regex : "!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|"\n - }, {\n - token : "lparen",\n - regex : "[[({]"\n - }, {\n - token : "rparen",\n - regex : "[\\\\])}]"\n - }, {\n - token : "text",\n - regex : "\\\\s+"\n - }\n - ],\n - "cdata" : [\n - {\n - token : "text",\n - regex : "\\\\]\\\\]>",\n - next : "start"\n - }, {\n - token : "text",\n - regex : "\\\\s+"\n - }, {\n - token : "text",\n - regex : ".+"\n - }\n - ],\n - "comment" : [\n - {\n - token : "comment", // closing comment\n - regex : "\\\\*#|-->",\n - next : "start"\n - }, {\n - defaultToken: "comment"\n - }\n - ],\n - "vm_start" : [\n - {\n - token: "variable",\n - regex: "}",\n - next: "start"\n - }, {\n - token : "string.regexp",\n - regex : "[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : "constant.numeric", // hex\n - regex : "0[xX][0-9a-fA-F]+\\\\b"\n - }, {\n - token : "constant.numeric", // float\n - regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n - }, {\n - token : "constant.language.boolean",\n - regex : "(?:true|false)\\\\b"\n - }, {\n - token : function(value) {\n - if (keywords.hasOwnProperty(value))\n - return "keyword";\n - else if (builtinConstants.hasOwnProperty(value))\n - return "constant.language";\n - else if (builtinVariables.hasOwnProperty(value))\n - return "variable.language";\n - else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n - return "support.function";\n - else if (value == "debugger")\n - return "invalid.deprecated";\n - else\n - if(value.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/))\n - return "variable";\n - return "identifier";\n - },\n - regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n - }, {\n - token : "keyword.operator",\n - regex : "!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|"\n - }, {\n - token : "lparen",\n - regex : "[[({]"\n - }, {\n - token : "rparen",\n - regex : "[\\\\])}]"\n - }, {\n - token : "text",\n - regex : "\\\\s+"\n - }\n - ]\n - };\n -\n - xmlUtil.tag(this.$rules, "tag", "start");\n - xmlUtil.tag(this.$rules, "style", "css-start");\n - xmlUtil.tag(this.$rules, "script", "js-start");\n + this.$rules.start.push(\n + {\n + token : "comment",\n + regex : "##.*$"\n + },{\n + token : "comment.block", // multi line comment\n + regex : "#\\\\*",\n + next : "vm_comment"\n + }, {\n + token : "string.regexp",\n + regex : "[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : "constant.numeric", // hex\n + regex : "0[xX][0-9a-fA-F]+\\\\b"\n + }, {\n + token : "constant.numeric", // float\n + regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n + }, {\n + token : "constant.language.boolean",\n + regex : "(?:true|false)\\\\b"\n + }, {\n + token : function(value) {\n + if (keywords.hasOwnProperty(value))\n + return "keyword";\n + else if (builtinConstants.hasOwnProperty(value))\n + return "constant.language";\n + else if (builtinVariables.hasOwnProperty(value))\n + return "variable.language";\n + else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n + return "support.function";\n + else if (value == "debugger")\n + return "invalid.deprecated";\n + else\n + if(value.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/))\n + return "variable";\n + return "identifier";\n + },\n + regex : "[a-zA-Z$#][a-zA-Z0-9_]*\\\\b"\n + }, {\n + token : "keyword.operator",\n + regex : "!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|"\n + }, {\n + token : "lparen",\n + regex : "[[({]"\n + }, {\n + token : "rparen",\n + regex : "[\\\\])}]"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + }\n + );\n \n - this.embedRules(JavaScriptHighlightRules, "js-", [{\n - token: "comment",\n - regex: "\\\\/\\\\/.*(?=<\\\\/script>)",\n - next: "tag"\n - }, {\n - token: "meta.tag",\n - regex: "<\\\\/(?=script)",\n - next: "tag"\n - }]);\n + this.$rules["vm_comment"] = [\n + {\n + token : "comment", // closing comment\n + regex : "\\\\*#|-->",\n + next : "start"\n + }, {\n + defaultToken: "comment"\n + }\n + ];\n \n - this.embedRules(CssHighlightRules, "css-", [{\n - token: "meta.tag",\n - regex: "<\\\\/(?=style)",\n - next: "tag"\n - }]);\n + this.$rules["vm_start"] = [\n + {\n + token: "variable",\n + regex: "}",\n + next: "pop"\n + }, {\n + token : "string.regexp",\n + regex : "[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : "constant.numeric", // hex\n + regex : "0[xX][0-9a-fA-F]+\\\\b"\n + }, {\n + token : "constant.numeric", // float\n + regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n + }, {\n + token : "constant.language.boolean",\n + regex : "(?:true|false)\\\\b"\n + }, {\n + token : function(value) {\n + if (keywords.hasOwnProperty(value))\n + return "keyword";\n + else if (builtinConstants.hasOwnProperty(value))\n + return "constant.language";\n + else if (builtinVariables.hasOwnProperty(value))\n + return "variable.language";\n + else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n + return "support.function";\n + else if (value == "debugger")\n + return "invalid.deprecated";\n + else\n + if(value.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/))\n + return "variable";\n + return "identifier";\n + },\n + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n + }, {\n + token : "keyword.operator",\n + regex : "!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|"\n + }, {\n + token : "lparen",\n + regex : "[[({]"\n + }, {\n + token : "rparen",\n + regex : "[\\\\])}]"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + }\n + ];\n \n for (var i in this.$rules) {\n this.$rules[i].unshift({\n token: "variable",\n regex: "\\\\${",\n - next: "vm_start"\n + push: "vm_start"\n });\n }\n +\n + this.normalizeRules();\n };\n \n oop.inherits(VelocityHighlightRules, TextHighlightRules);\n @@ -302,74 +274,98 @@ oop.inherits(VelocityHighlightRules, TextHighlightRules);\n exports.VelocityHighlightRules = VelocityHighlightRules;\n });\n \n -define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +define(\'ace/mode/html_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/css_highlight_rules\', \'ace/mode/javascript_highlight_rules\', \'ace/mode/xml_highlight_rules\'], function(require, exports, module) {\n \n \n -function string(state) {\n - return [{\n - token : "string",\n - regex : \'"\',\n - next : state + "_qqstring"\n - }, {\n - token : "string",\n - regex : "\'",\n - next : state + "_qstring"\n - }];\n -}\n +var oop = require("../lib/oop");\n +var lang = require("../lib/lang");\n +var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;\n +var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;\n +var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;\n +\n +var tagMap = lang.createMap({\n + a : \'anchor\',\n + button \t : \'form\',\n + form : \'form\',\n + img : \'image\',\n + input : \'form\',\n + label : \'form\',\n + option : \'form\',\n + script : \'script\',\n + select : \'form\',\n + textarea : \'form\',\n + style : \'style\',\n + table : \'table\',\n + tbody : \'table\',\n + td : \'table\',\n + tfoot : \'table\',\n + th : \'table\',\n + tr : \'table\'\n +});\n \n -function multiLineString(quote, state) {\n - return [\n - {token : "string", regex : quote, next : state},\n - {\n - token : "constant.language.escape",\n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n - },\n - {defaultToken : "string"}\n - ];\n -}\n +var HtmlHighlightRules = function() {\n + XmlHighlightRules.call(this);\n \n -exports.tag = function(states, name, nextState, tagMap) {\n - states[name] = [{\n - token : "text",\n - regex : "\\\\s+"\n - }, {\n - \n - token : !tagMap ? "meta.tag.tag-name" : function(value) {\n - if (tagMap[value])\n - return "meta.tag.tag-name." + tagMap[value];\n - else\n - return "meta.tag.tag-name";\n - },\n - regex : "[-_a-zA-Z0-9:]+",\n - next : name + "_embed_attribute_list" \n - }, {\n - token: "empty",\n - regex: "",\n - next : name + "_embed_attribute_list"\n - }];\n + this.addRules({\n + attributes: [{\n + include : "space"\n + }, {\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "=",\n + push : [{\n + include: "space"\n + }, {\n + token : "string",\n + regex : "[^<>=\'\\"`\\\\s]+",\n + next : "pop"\n + }, {\n + token : "empty",\n + regex : "",\n + next : "pop"\n + }]\n + }, {\n + include : "string"\n + }],\n + tag: [{\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(<)([-_a-zA-Z0-9:]+)",\n + next: "start_tag_stuff"\n + }, {\n + token : function(start, tag) {\n + var group = tagMap[tag];\n + return ["meta.tag.punctuation.begin",\n + "meta.tag.name" + (group ? "." + group : "")];\n + },\n + regex : "(</)([-_a-zA-Z0-9:]+)",\n + next: "end_tag_stuff"\n + }],\n + start_tag_stuff: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ],\n + end_tag_stuff: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + });\n \n - states[name + "_qstring"] = multiLineString("\'", name + "_embed_attribute_list");\n - states[name + "_qqstring"] = multiLineString("\\"", name + "_embed_attribute_list");\n - \n - states[name + "_embed_attribute_list"] = [{\n - token : "meta.tag.r",\n - regex : "/?>",\n - next : nextState\n - }, {\n - token : "keyword.operator",\n - regex : "="\n - }, {\n - token : "entity.other.attribute-name",\n - regex : "[-_a-zA-Z0-9:]+"\n - }, {\n - token : "constant.numeric", // float\n - regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n - }, {\n - token : "text",\n - regex : "\\\\s+"\n - }].concat(string(name));\n + this.embedTagRules(CssHighlightRules, "css-", "style");\n + this.embedTagRules(JavaScriptHighlightRules, "js-", "script");\n +\n + if (this.constructor === HtmlHighlightRules)\n + this.normalizeRules();\n };\n \n +oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n +\n +exports.HtmlHighlightRules = HtmlHighlightRules;\n });\n \n define(\'ace/mode/css_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/lib/lang\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n @@ -397,152 +393,117 @@ var CssHighlightRules = function() {\n "support.constant.color": supportConstantColor,\n "support.constant.fonts": supportConstantFonts\n }, "text", true);\n -\n - var base_ruleset = [\n - {\n - token : "comment", // multi line comment\n - regex : "\\\\/\\\\*",\n - next : "ruleset_comment"\n - }, {\n - token : "string", // single line\n - regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n - }, {\n - token : "string", // single line\n - regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n - }, {\n - token : ["constant.numeric", "keyword"],\n - regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n - }, {\n - token : "constant.numeric",\n - regex : numRe\n - }, {\n - token : "constant.numeric", // hex6 color\n - regex : "#[a-f0-9]{6}"\n - }, {\n - token : "constant.numeric", // hex3 color\n - regex : "#[a-f0-9]{3}"\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n - regex : pseudoElements\n - }, {\n - token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n - regex : pseudoClasses\n - }, {\n - token : ["support.function", "string", "support.function"],\n - regex : "(url\\\\()(.*)(\\\\))"\n - }, {\n - token : keywordMapper,\n - regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n - }, {\n - caseInsensitive: true\n - }\n - ];\n -\n - var ruleset = lang.copyArray(base_ruleset);\n - ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "start"\n - });\n -\n - var media_ruleset = lang.copyArray( base_ruleset );\n - media_ruleset.unshift({\n - token : "paren.rparen",\n - regex : "\\\\}",\n - next: "media"\n - });\n -\n - var base_comment = [{\n - token : "comment", // comment spanning whole line\n - regex : ".+"\n - }];\n -\n - var comment = lang.copyArray(base_comment);\n - comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "start"\n - });\n -\n - var media_comment = lang.copyArray(base_comment);\n - media_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "media"\n - });\n -\n - var ruleset_comment = lang.copyArray(base_comment);\n - ruleset_comment.unshift({\n - token : "comment", // closing comment\n - regex : ".*?\\\\*\\\\/",\n - next : "ruleset"\n - });\n \n this.$rules = {\n "start" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "ruleset"\n + push: "ruleset"\n }, {\n token: "string",\n regex: "@.*?{",\n - next: "media"\n - },{\n + push: "media"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "media" : [ {\n + "media" : [{\n token : "comment", // multi line comment\n regex : "\\\\/\\\\*",\n - next : "media_comment"\n + push : "comment"\n }, {\n token: "paren.lparen",\n regex: "\\\\{",\n - next: "media_ruleset"\n - },{\n + push: "ruleset"\n + }, {\n token: "string",\n regex: "\\\\}",\n - next: "start"\n - },{\n + next: "pop"\n + }, {\n token: "keyword",\n regex: "#[a-z0-9-_]+"\n - },{\n + }, {\n token: "variable",\n regex: "\\\\.[a-z0-9-_]+"\n - },{\n + }, {\n token: "string",\n regex: ":[a-z0-9-_]+"\n - },{\n + }, {\n token: "constant",\n regex: "[a-z0-9-_]+"\n - },{\n + }, {\n caseInsensitive: true\n }],\n \n - "comment" : comment,\n -\n - "ruleset" : ruleset,\n - "ruleset_comment" : ruleset_comment,\n + "comment" : [{\n + token : "comment",\n + regex : "\\\\*\\\\/",\n + next : "pop"\n + }, {\n + defaultToken : "comment"\n + }],\n \n - "media_ruleset" : media_ruleset,\n - "media_comment" : media_comment\n + "ruleset" : [\n + {\n + token : "paren.rparen",\n + regex : "\\\\}",\n + next: "pop"\n + }, {\n + token : "comment", // multi line comment\n + regex : "\\\\/\\\\*",\n + push : "comment"\n + }, {\n + token : "string", // single line\n + regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n + }, {\n + token : "string", // single line\n + regex : "[\'](?:(?:\\\\\\\\.)|(?:[^\'\\\\\\\\]))*?[\']"\n + }, {\n + token : ["constant.numeric", "keyword"],\n + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"\n + }, {\n + token : "constant.numeric",\n + regex : numRe\n + }, {\n + token : "constant.numeric", // hex6 color\n + regex : "#[a-f0-9]{6}"\n + }, {\n + token : "constant.numeric", // hex3 color\n + regex : "#[a-f0-9]{3}"\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],\n + regex : pseudoElements\n + }, {\n + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],\n + regex : pseudoClasses\n + }, {\n + token : ["support.function", "string", "support.function"],\n + regex : "(url\\\\()(.*)(\\\\))"\n + }, {\n + token : keywordMapper,\n + regex : "\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*"\n + }, {\n + caseInsensitive: true\n + }]\n };\n +\n + this.normalizeRules();\n };\n \n oop.inherits(CssHighlightRules, TextHighlightRules);\n @@ -600,7 +561,8 @@ var JavaScriptHighlightRules = function() {\n "no_regex" : [\n {\n token : "comment",\n - regex : /\\/\\/.*$/\n + regex : "\\\\/\\\\/",\n + next : "line_comment"\n },\n DocCommentHighlightRules.getStartRule("doc-start"),\n {\n @@ -675,7 +637,7 @@ var JavaScriptHighlightRules = function() {\n next : "start"\n }, {\n token : ["punctuation.operator", "support.function"],\n - regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n + regex : /(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : ["punctuation.operator", "support.function.dom"],\n regex : /(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n @@ -720,8 +682,8 @@ var JavaScriptHighlightRules = function() {\n next : "comment_regex_allowed"\n }, {\n token : "comment",\n - regex : "\\\\/\\\\/.*$",\n - next : "start"\n + regex : "\\\\/\\\\/",\n + next : "line_comment_regex_allowed"\n }, {\n token: "string.regexp",\n regex: "\\\\/",\n @@ -808,6 +770,14 @@ var JavaScriptHighlightRules = function() {\n {token : "comment", regex : "\\\\*\\\\/", next : "no_regex"},\n {defaultToken : "comment"}\n ],\n + "line_comment_regex_allowed" : [\n + {token : "comment", regex : "$|^", next : "start"},\n + {defaultToken : "comment"}\n + ],\n + "line_comment" : [\n + {token : "comment", regex : "$|^", next : "no_regex"},\n + {defaultToken : "comment"}\n + ],\n "qqstring" : [\n {\n token : "constant.language.escape",\n @@ -895,6 +865,263 @@ exports.DocCommentHighlightRules = DocCommentHighlightRules;\n \n });\n \n +define(\'ace/mode/xml_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/xml_util\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var xmlUtil = require("./xml_util");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var XmlHighlightRules = function(normalize) {\n + this.$rules = {\n + start : [\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n + {token : "comment", regex : "<\\\\!--", next : "comment"},\n + {\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n + ],\n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n + cdata : [\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "text", regex : "\\\\s+"},\n + {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n + ],\n +\n + comment : [\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n + };\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n +};\n +\n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n +oop.inherits(XmlHighlightRules, TextHighlightRules);\n +\n +exports.XmlHighlightRules = XmlHighlightRules;\n +});\n +\n +define(\'ace/mode/xml_util\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +function string(state) {\n + return [{\n + token : "string",\n + regex : \'"\',\n + next : state + "_qqstring"\n + }, {\n + token : "string",\n + regex : "\'",\n + next : state + "_qstring"\n + }];\n +}\n +\n +function multiLineString(quote, state) {\n + return [\n + {token : "string", regex : quote, next : state},\n + {\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n + },\n + {defaultToken : "string"}\n + ];\n +}\n +\n +exports.tag = function(states, name, nextState, tagMap) {\n + states[name] = [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + \n + token : !tagMap ? "meta.tag.tag-name" : function(value) {\n + if (tagMap[value])\n + return "meta.tag.tag-name." + tagMap[value];\n + else\n + return "meta.tag.tag-name";\n + },\n + regex : "[-_a-zA-Z0-9:]+",\n + next : name + "_embed_attribute_list" \n + }, {\n + token: "empty",\n + regex: "",\n + next : name + "_embed_attribute_list"\n + }];\n +\n + states[name + "_qstring"] = multiLineString("\'", name + "_embed_attribute_list");\n + states[name + "_qqstring"] = multiLineString("\\"", name + "_embed_attribute_list");\n + \n + states[name + "_embed_attribute_list"] = [{\n + token : "meta.tag.r",\n + regex : "/?>",\n + next : nextState\n + }, {\n + token : "keyword.operator",\n + regex : "="\n + }, {\n + token : "entity.other.attribute-name",\n + regex : "[-_a-zA-Z0-9:]+"\n + }, {\n + token : "constant.numeric", // float\n + regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + }].concat(string(name));\n +};\n +\n +});\n +\n define(\'ace/mode/folding/velocity\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/folding/fold_mode\', \'ace/range\'], function(require, exports, module) {\n \n \n @@ -992,14 +1219,9 @@ var TokenIterator = require("../../token_iterator").TokenIterator;\n var voidElements = [\'area\', \'base\', \'br\', \'col\', \'command\', \'embed\', \'hr\', \'img\', \'input\', \'keygen\', \'link\', \'meta\', \'param\', \'source\', \'track\', \'wbr\'];\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1014,7 +1236,7 @@ var HtmlBehaviour = function () {\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n \n - if (hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n @@ -1024,8 +1246,8 @@ var HtmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var element = token.value;\n if (atCursor){\n @@ -1055,14 +1277,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -1076,6 +1293,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -1084,8 +1304,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -1102,11 +1322,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -1448,18 +1668,6 @@ exports.CstyleBehaviour = CstyleBehaviour;\n ]]></string> </value> </item> - <item> - <key> <string>precondition</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>size</string> </key> - <value> <int>63034</int> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> </dictionary> </pickle> </record> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-verilog.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-verilog.js.xml index 3ac806a348..a88ef39fca 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-verilog.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-verilog.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155565.71</string> </value> + <value> <string>ts83646621.01</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,7 +62,7 @@ var VerilogHighlightRules = require("./verilog_highlight_rules").VerilogHighligh var Range = require("../range").Range;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new VerilogHighlightRules().getRules());\n + this.HighlightRules = VerilogHighlightRules;\n };\n oop.inherits(Mode, TextMode);\n \n @@ -158,7 +158,7 @@ exports.VerilogHighlightRules = VerilogHighlightRules;\n </item> <item> <key> <string>size</string> </key> - <value> <int>5364</int> </value> + <value> <int>5336</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-vhdl.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-vhdl.js.xml new file mode 100644 index 0000000000..f1b05169d7 --- /dev/null +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-vhdl.js.xml @@ -0,0 +1,182 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts83646620.18</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>mode-vhdl.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +/* ***** BEGIN LICENSE BLOCK *****\r\n + * Distributed under the BSD license:\r\n + *\r\n + * Copyright (c) 2013, Ajax.org B.V.\r\n + * All rights reserved.\r\n + * \r\n + * Redistribution and use in source and binary forms, with or without\r\n + * modification, are permitted provided that the following conditions are met:\r\n + * * Redistributions of source code must retain the above copyright\r\n + * notice, this list of conditions and the following disclaimer.\r\n + * * Redistributions in binary form must reproduce the above copyright\r\n + * notice, this list of conditions and the following disclaimer in the\r\n + * documentation and/or other materials provided with the distribution.\r\n + * * Neither the name of Ajax.org B.V. nor the\r\n + * names of its contributors may be used to endorse or promote products\r\n + * derived from this software without specific prior written permission.\r\n + * \r\n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\r\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n + *\r\n + * ***** END LICENSE BLOCK ***** */\r\n +define(\'ace/mode/vhdl\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text\', \'ace/tokenizer\', \'ace/mode/vhdl_highlight_rules\', \'ace/range\'], function(require, exports, module) {\r\n +\r\n +\r\n +var oop = require("../lib/oop");\r\n +var TextMode = require("./text").Mode;\r\n +var Tokenizer = require("../tokenizer").Tokenizer;\r\n +var VHDLHighlightRules = require("./vhdl_highlight_rules").VHDLHighlightRules;\r\n +var Range = require("../range").Range;\r\n +\r\n +var Mode = function() {\r\n + this.HighlightRules = VHDLHighlightRules;\r\n +};\r\n +oop.inherits(Mode, TextMode);\r\n +\r\n +(function() {\r\n +\r\n + this.lineCommentStart = "--";\r\n +\r\n +}).call(Mode.prototype);\r\n +\r\n +exports.Mode = Mode;\r\n +\r\n +});\n +define(\'ace/mode/vhdl_highlight_rules\', [\'require\', \'exports\', \'module\' , \'ace/lib/oop\', \'ace/mode/text_highlight_rules\'], function(require, exports, module) {\n +\n +\n +var oop = require("../lib/oop");\n +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n +\n +var VHDLHighlightRules = function() {\n +\n +\n + \n + var keywords = "access|after|ailas|all|architecture|assert|attribute|"+\n + "begin|block|buffer|bus|case|component|configuration|"+\n + "disconnect|downto|else|elsif|end|entity|file|for|function|"+\n + "generate|generic|guarded|if|impure|in|inertial|inout|is|"+\n + "label|linkage|literal|loop|mapnew|next|of|on|open|"+\n + "others|out|port|process|pure|range|record|reject|"+\n + "report|return|select|shared|subtype|then|to|transport|"+\n + "type|unaffected|united|until|wait|when|while|with";\n + \n + var storageType = "bit|bit_vector|boolean|character|integer|line|natural|"+\n + "positive|real|register|severity|signal|signed|"+\n + "std_logic|std_logic_vector|string||text|time|unsigned|"+\n + "variable";\n + \n + var storageModifiers = "array|constant";\n + \n + var keywordOperators = "abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|sra"+\n + "srl|xnor|xor";\n + \n + var builtinConstants = (\n + "true|false|null"\n + );\n +\n +\n + var keywordMapper = this.createKeywordMapper({\n + "keyword.operator": keywordOperators,\n + "keyword": keywords,\n + "constant.language": builtinConstants,\n + "storage.modifier": storageModifiers,\n + "storage.type": storageType\n + }, "identifier", true);\n +\n + this.$rules = {\n + "start" : [ {\n + token : "comment",\n + regex : "--.*$"\n + }, {\n + token : "string", // " string\n + regex : \'".*?"\'\n + }, {\n + token : "string", // \' string\n + regex : "\'.*?\'"\n + }, {\n + token : "constant.numeric", // float\n + regex : "[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b"\n + }, {\n + token : "keyword", // pre-compiler directives\n + regex : "\\\\s*(?:library|package|use)\\\\b",\n + }, {\n + token : keywordMapper,\n + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b"\n + }, {\n + token : "keyword.operator",\n + regex : "&|\\\\*|\\\\+|\\\\-|\\\\/|<|=|>|\\\\||=>|\\\\*\\\\*|:=|\\\\/=|>=|<=|<>" \n + }, {\n + token : "punctuation.operator",\n + regex : "\\\\\'|\\\\:|\\\\,|\\\\;|\\\\."\n + },{\n + token : "paren.lparen",\n + regex : "[[(]"\n + }, {\n + token : "paren.rparen",\n + regex : "[\\\\])]"\n + }, {\n + token : "text",\n + regex : "\\\\s+"\n + } ],\n +\n + \n + };\n +};\n +\n +oop.inherits(VHDLHighlightRules, TextHighlightRules);\n +\n +exports.VHDLHighlightRules = VHDLHighlightRules;\n +});\n + + +]]></string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>5333</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-xml.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-xml.js.xml index 925434d6c3..46a68cdb11 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-xml.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-xml.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155565.87</string> </value> + <value> <string>ts83646621.0</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,7 +63,7 @@ var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;\n var XmlFoldMode = require("./folding/xml").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());\n + this.HighlightRules = XmlHighlightRules;\n this.$behaviour = new XmlBehaviour();\n this.foldingRules = new XmlFoldMode();\n };\n @@ -86,36 +86,181 @@ var oop = require("../lib/oop");\n var xmlUtil = require("./xml_util");\n var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;\n \n -var XmlHighlightRules = function() {\n +var XmlHighlightRules = function(normalize) {\n this.$rules = {\n start : [\n - {token : "text", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n - {token : "xml-pe", regex : "<\\\\?.*?\\\\?>"},\n + {token : "punctuation.string.begin", regex : "<\\\\!\\\\[CDATA\\\\[", next : "cdata"},\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)(xml)(?=[\\\\s])", next : "xml_declaration"\n + },\n + {\n + token : ["punctuation.instruction.begin", "keyword.instruction"],\n + regex : "(<\\\\?)([-_a-zA-Z0-9]+)", next : "instruction"\n + },\n {token : "comment", regex : "<\\\\!--", next : "comment"},\n - {token : "xml-pe", regex : "<\\\\!.*?>"},\n - {token : "meta.tag", regex : "<\\\\/?", next : "tag"},\n - {token : "text", regex : "\\\\s+"},\n {\n - token : "constant.character.entity", \n - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)" \n - }\n + token : ["punctuation.doctype.begin", "meta.tag.doctype"],\n + regex : "(<\\\\!)(DOCTYPE)(?=[\\\\s])", next : "doctype"\n + },\n + {include : "tag"},\n + {include : "reference"}\n ],\n - \n +\n + xml_declaration : [\n + {include : "attributes"},\n + {include : "instruction"}\n + ],\n +\n + instruction : [\n + {token : "punctuation.instruction.end", regex : "\\\\?>", next : "start"}\n + ],\n +\n + doctype : [\n + {include : "space"},\n + {include : "string"},\n + {token : "punctuation.doctype.end", regex : ">", next : "start"},\n + {token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},\n + {token : "punctuation.begin", regex : "\\\\[", push : "declarations"}\n + ],\n +\n + declarations : [{\n + token : "text",\n + regex : "\\\\s+"\n + }, {\n + token: "punctuation.end",\n + regex: "]",\n + next: "pop"\n + }, {\n + token : ["punctuation.begin", "keyword"],\n + regex : "(<\\\\!)([-_a-zA-Z0-9]+)",\n + push : [{\n + token : "text",\n + regex : "\\\\s+"\n + },\n + {\n + token : "punctuation.end",\n + regex : ">",\n + next : "pop"\n + },\n + {include : "string"}]\n + }],\n +\n cdata : [\n - {token : "text", regex : "\\\\]\\\\]>", next : "start"},\n + {token : "string.end", regex : "\\\\]\\\\]>", next : "start"},\n {token : "text", regex : "\\\\s+"},\n {token : "text", regex : "(?:[^\\\\]]|\\\\](?!\\\\]>))+"}\n ],\n \n comment : [\n - {token : "comment", regex : ".*?-->", next : "start"},\n - {token : "comment", regex : ".+"}\n - ]\n + {token : "comment", regex : "-->", next : "start"},\n + {defaultToken : "comment"}\n + ],\n +\n + tag : [{\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}\n + ]\n + }, {\n + token : ["meta.tag.punctuation.begin", "meta.tag.name"],\n + regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",\n + next: [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next : "start"}\n + ]\n + }],\n +\n + space : [\n + {token : "text", regex : "\\\\s+"}\n + ],\n +\n + reference : [{\n + token : "constant.language.escape",\n + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)"\n + }, {\n + token : "invalid.illegal", regex : "&"\n + }],\n +\n + string: [{\n + token : "string",\n + regex : "\'",\n + push : "qstring_inner"\n + }, {\n + token : "string",\n + regex : \'"\',\n + push : "qqstring_inner"\n + }],\n +\n + qstring_inner: [\n + {token : "string", regex: "\'", next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + qqstring_inner: [\n + {token : "string", regex: \'"\', next: "pop"},\n + {include : "reference"},\n + {defaultToken : "string"}\n + ],\n +\n + attributes: [{\n + token : "entity.other.attribute-name",\n + regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"\n + }, {\n + token : "keyword.operator.separator",\n + regex : "="\n + }, {\n + include : "space"\n + }, {\n + include : "string"\n + }]\n };\n - \n - xmlUtil.tag(this.$rules, "tag", "start");\n +\n + if (this.constructor === XmlHighlightRules)\n + this.normalizeRules();\n };\n \n +\n +(function() {\n +\n + this.embedTagRules = function(HighlightRules, prefix, tag){\n + this.$rules.tag.unshift({\n + token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(<)(" + tag + ")",\n + next: [\n + {include : "space"},\n + {include : "attributes"},\n + {token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}\n + ]\n + });\n +\n + this.$rules[tag + "-end"] = [\n + {include : "space"},\n + {token : "meta.tag.punctuation.end", regex : ">", next: "start",\n + onMatch : function(value, currentState, stack) {\n + stack.splice(0);\n + return this.token;\n + }}\n + ]\n +\n + this.embedRules(HighlightRules, prefix, [{\n + token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],\n + regex : "(</)(" + tag + ")",\n + next: tag + "-end"\n + }, {\n + token: "string.begin",\n + regex : "<\\\\!\\\\[CDATA\\\\["\n + }, {\n + token: "string.end",\n + regex : "\\\\]\\\\]>"\n + }]);\n + };\n +\n +}).call(TextHighlightRules.prototype);\n +\n oop.inherits(XmlHighlightRules, TextHighlightRules);\n \n exports.XmlHighlightRules = XmlHighlightRules;\n @@ -200,14 +345,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -221,6 +361,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token && hasType(token, \'string\') && iterator.getCurrentTokenColumn() + token.value.length > position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') && !(hasType(token, \'text\') && token.value.match(\'/\'))){\n do {\n @@ -229,8 +372,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -247,11 +390,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'</\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -630,7 +773,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var value = "";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n - if (token.type.indexOf("meta.tag") === 0)\n + if (token.type.lastIndexOf("meta.tag", 0) === 0)\n value += token.value;\n else\n value += lang.stringRepeat(" ", token.value.length);\n @@ -663,7 +806,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var start;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!start) {\n var start = {\n row: iterator.getCurrentTokenRow(),\n @@ -696,7 +839,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n var end;\n \n do {\n - if (token.type.indexOf("meta.tag") === 0) {\n + if (token.type.lastIndexOf("meta.tag", 0) === 0) {\n if (!end) {\n end = {\n row: iterator.getCurrentTokenRow(),\n @@ -820,7 +963,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>29530</int> </value> + <value> <int>33876</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-xquery.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-xquery.js.xml index 2784b14635..a4e8a9d0d6 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-xquery.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-xquery.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.01</string> </value> + <value> <string>ts83646620.98</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>330201</int> </value> + <value> <int>330172</int> </value> </item> <item> <key> <string>title</string> </key> @@ -1982,7 +1982,26 @@ XQueryTokenizer.MAP0 =\n ];\n \n XQueryTokenizer.MAP1 =\n -[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n +[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 21</string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>4, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n ];\n \n XQueryTokenizer.MAP2 =\n @@ -1994,7 +2013,64 @@ XQueryTokenizer.INITIAL =\n ];\n \n XQueryTokenizer.TRANSITION =\n -[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n +[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590</string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, </string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, </string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n ];\n \n XQueryTokenizer.EXPECTED =\n @@ -2677,14 +2753,9 @@ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;\n var TokenIterator = require("../../token_iterator").TokenIterator;\n \n function hasType(token, type) {\n - var hasType = true;\n - var typeList = token.type.split(\'.\');\n - var needleList = type.split(\'.\');\n - needleList.forEach(function(needle){\n - if (typeList.indexOf(needle) == -1) {\n - hasType = false;\n - return false;\n - }\n + var tokenTypes = token.type.split(\'.\');\n + return type.split(\'.\').every(function(type){\n + return (tokenTypes.indexOf(type) !== -1);\n });\n return hasType;\n }\n @@ -2698,6 +2769,9 @@ var XmlBehaviour = function () {\n var position = editor.getCursorPosition();\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken();\n +\n + if (token \046\046 hasType(token, \'string\') \046\046 iterator.getCurrentTokenColumn() + token.value.length \076 position.column)\n + return;\n var atCursor = false;\n if (!token || !hasType(token, \'meta.tag\') \046\046 !(hasType(token, \'text\') \046\046 token.value.match(\'/\'))){\n do {\n @@ -2706,8 +2780,8 @@ var XmlBehaviour = function () {\n } else {\n atCursor = true;\n }\n - if (!token || !hasType(token, \'meta.tag-name\') || iterator.stepBackward().value.match(\'/\')) {\n - return\n + if (!token || !hasType(token, \'meta.tag.name\') || iterator.stepBackward().value.match(\'/\')) {\n + return;\n }\n var tag = token.value;\n if (atCursor){\n @@ -2724,11 +2798,11 @@ var XmlBehaviour = function () {\n this.add(\'autoindent\', \'insertion\', function (state, action, editor, session, text) {\n if (text == "\\n") {\n var cursor = editor.getCursorPosition();\n - var line = session.doc.getLine(cursor.row);\n + var line = session.getLine(cursor.row);\n var rightChars = line.substring(cursor.column, cursor.column + 2);\n if (rightChars == \'\074/\') {\n - var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();\n - var next_indent = this.$getIndent(session.doc.getLine(cursor.row));\n + var next_indent = this.$getIndent(line);\n + var indent = next_indent + session.getTabString();\n \n return {\n text: \'\\n\' + indent + \'\\n\' + next_indent,\n @@ -2799,6 +2873,12 @@ oop.inherits(FoldMode, BaseFoldMode);\n });\n </string> </value> </item> + <item> + <key> <string>next</string> </key> + <value> + <none/> + </value> + </item> </dictionary> </pickle> </record> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-yaml.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-yaml.js.xml index ed8d2a3c9f..93f12b655f 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-yaml.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/mode-yaml.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.12</string> </value> + <value> <string>ts83646620.94</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -63,7 +63,7 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd var FoldMode = require("./folding/coffee").FoldMode;\n \n var Mode = function() {\n - this.$tokenizer = new Tokenizer(new YamlHighlightRules().getRules());\n + this.HighlightRules = YamlHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.foldingRules = new FoldMode();\n };\n @@ -142,7 +142,7 @@ var YamlHighlightRules = function() {\n regex : \'["](?:(?:\\\\\\\\.)|(?:[^"\\\\\\\\]))*?["]\'\n }, {\n token : "string", // multi line string start\n - regex : \'[\\\\|>]\\\\w*\',\n + regex : \'[|>][-+\\\\d\\\\s]*$\',\n next : "qqstring"\n }, {\n token : "string", // single quoted string\n @@ -321,7 +321,7 @@ oop.inherits(FoldMode, BaseFoldMode);\n </item> <item> <key> <string>size</string> </key> - <value> <int>9699</int> </value> + <value> <int>9677</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-ambiance.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-ambiance.js.xml index 37760f906f..cfe4f0a00c 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-ambiance.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-ambiance.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.2</string> </value> + <value> <string>ts83646620.9</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-chaos.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-chaos.js.xml index ab733d1ee4..04c775ee2c 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-chaos.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-chaos.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.34</string> </value> + <value> <string>ts83646620.89</string> </value> </item> <item> <key> <string>__name__</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-chrome.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-chrome.js.xml index c8873d84a7..9f12049e9e 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-chrome.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-chrome.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.48</string> </value> + <value> <string>ts83646620.92</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background: #e8e8e8;\\\n background-color: #FFFFFF;\\\n }\\\n .ace-chrome .ace_cursor {\\\n -border-left: 2px solid black;\\\n -}\\\n -.ace-chrome .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid black;\\\n +color: black;\\\n }\\\n .ace-chrome .ace_invisible {\\\n color: rgb(191, 191, 191);\\\n @@ -130,10 +126,10 @@ color: rgb(104, 104, 91);\\\n .ace-chrome .ace_entity.ace_name.ace_function {\\\n color: #0000A2;\\\n }\\\n -.ace-chrome .ace_markup.ace_heading {\\\n +.ace-chrome .ace_heading {\\\n color: rgb(12, 7, 255);\\\n }\\\n -.ace-chrome .ace_markup.ace_list {\\\n +.ace-chrome .ace_list {\\\n color:rgb(185, 6, 144);\\\n }\\\n .ace-chrome .ace_marker-layer .ace_selection {\\\n @@ -189,7 +185,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4843</int> </value> + <value> <int>4700</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-clouds.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-clouds.js.xml index fd9301c82f..48bcdfe0ee 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-clouds.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-clouds.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.58</string> </value> + <value> <string>ts83646620.87</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #FFFFFF;\\\n color: #000000\\\n }\\\n .ace-clouds .ace_cursor {\\\n -border-left: 2px solid #000000\\\n -}\\\n -.ace-clouds .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #000000\\\n +color: #000000\\\n }\\\n .ace-clouds .ace_marker-layer .ace_selection {\\\n background: #BDD5FC\\\n @@ -143,9 +139,6 @@ color: #BCC8BA\\\n .ace-clouds .ace_entity.ace_other.ace_attribute-name {\\\n color: #606060\\\n }\\\n -.ace-clouds .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-clouds .ace_indent-guide {\\\n background: url(\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\") right repeat-y\\\n }";\n @@ -161,7 +154,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4231</int> </value> + <value> <int>4037</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-clouds_midnight.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-clouds_midnight.js.xml index 67ecb85a95..77618e8391 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-clouds_midnight.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-clouds_midnight.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.72</string> </value> + <value> <string>ts83646620.86</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #191919;\\\n color: #929292\\\n }\\\n .ace-clouds-midnight .ace_cursor {\\\n -border-left: 2px solid #7DA5DC\\\n -}\\\n -.ace-clouds-midnight .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #7DA5DC\\\n +color: #7DA5DC\\\n }\\\n .ace-clouds-midnight .ace_marker-layer .ace_selection {\\\n background: #000000\\\n @@ -144,9 +140,6 @@ color: #3C403B\\\n .ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\\\n color: #606060\\\n }\\\n -.ace-clouds-midnight .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-clouds-midnight .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -162,7 +155,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4602</int> </value> + <value> <int>4390</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-cobalt.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-cobalt.js.xml index 15b9b00576..fa68bcee71 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-cobalt.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-cobalt.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.85</string> </value> + <value> <string>ts83646620.85</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #002240;\\\n color: #FFFFFF\\\n }\\\n .ace-cobalt .ace_cursor {\\\n -border-left: 2px solid #FFFFFF\\\n -}\\\n -.ace-cobalt .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #FFFFFF\\\n +color: #FFFFFF\\\n }\\\n .ace-cobalt .ace_marker-layer .ace_selection {\\\n background: rgba(179, 101, 57, 0.75)\\\n @@ -151,14 +147,11 @@ color: #FF80E1\\\n .ace-cobalt .ace_meta.ace_tag {\\\n color: #9EFFFF\\\n }\\\n -.ace-cobalt .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n -.ace-cobalt .ace_markup.ace_heading {\\\n +.ace-cobalt .ace_heading {\\\n color: #C8E4FD;\\\n background-color: #001221\\\n }\\\n -.ace-cobalt .ace_markup.ace_list {\\\n +.ace-cobalt .ace_list {\\\n background-color: #130D26\\\n }\\\n .ace-cobalt .ace_indent-guide {\\\n @@ -176,7 +169,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4472</int> </value> + <value> <int>4256</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-crimson_editor.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-crimson_editor.js.xml index 894a34707e..b60d04ff11 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-crimson_editor.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-crimson_editor.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155566.99</string> </value> + <value> <string>ts83646620.83</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -70,11 +70,7 @@ background-color: #FFFFFF;\\\n color: rgb(64, 64, 64);\\\n }\\\n .ace-crimson-editor .ace_cursor {\\\n -border-left: 2px solid black;\\\n -}\\\n -.ace-crimson-editor .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid black;\\\n +color: black;\\\n }\\\n .ace-crimson-editor .ace_invisible {\\\n color: rgb(191, 191, 191);\\\n @@ -180,7 +176,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4924</int> </value> + <value> <int>4795</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-dawn.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-dawn.js.xml index 5d1d4f5c8d..17c3153b48 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-dawn.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-dawn.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155567.14</string> </value> + <value> <string>ts83646620.82</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #F9F9F9;\\\n color: #080808\\\n }\\\n .ace-dawn .ace_cursor {\\\n -border-left: 2px solid #000000\\\n -}\\\n -.ace-dawn .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #000000\\\n +color: #000000\\\n }\\\n .ace-dawn .ace_marker-layer .ace_selection {\\\n background: rgba(39, 95, 255, 0.30)\\\n @@ -130,7 +126,7 @@ color: #B4371F\\\n background-color: #794938;\\\n border-color: #080808\\\n }\\\n -.ace-dawn .ace_markup.ace_list,\\\n +.ace-dawn .ace_list,\\\n .ace-dawn .ace_support.ace_function {\\\n color: #693A17\\\n }\\\n @@ -151,10 +147,7 @@ color: #5A525F\\\n .ace-dawn .ace_variable {\\\n color: #234A97\\\n }\\\n -.ace-dawn .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n -.ace-dawn .ace_markup.ace_heading {\\\n +.ace-dawn .ace_heading {\\\n color: #19356D\\\n }\\\n .ace-dawn .ace_indent-guide {\\\n @@ -172,7 +165,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4364</int> </value> + <value> <int>4152</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-dreamweaver.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-dreamweaver.js.xml index 58a4a08b75..6e62d04f39 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-dreamweaver.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-dreamweaver.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155567.27</string> </value> + <value> <string>ts83646620.8</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -68,11 +68,7 @@ background-color: #FFFFFF;\\\n background-color: #757AD8;\\\n }\\\n .ace-dreamweaver .ace_cursor {\\\n -border-left: 2px solid black;\\\n -}\\\n -.ace-dreamweaver .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid black;\\\n +color: black;\\\n }\\\n .ace-dreamweaver .ace_invisible {\\\n color: rgb(191, 191, 191);\\\n @@ -134,10 +130,10 @@ color: rgb(104, 104, 91);\\\n .ace-dreamweaver .ace_entity.ace_name.ace_function {\\\n color: #00F;\\\n }\\\n -.ace-dreamweaver .ace_markup.ace_heading {\\\n +.ace-dreamweaver .ace_heading {\\\n color: rgb(12, 7, 255);\\\n }\\\n -.ace-dreamweaver .ace_markup.ace_list {\\\n +.ace-dreamweaver .ace_list {\\\n color:rgb(185, 6, 144);\\\n }\\\n .ace-dreamweaver .ace_marker-layer .ace_selection {\\\n @@ -199,7 +195,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>5225</int> </value> + <value> <int>5077</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-eclipse.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-eclipse.js.xml index de3493052b..86e1098da9 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-eclipse.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-eclipse.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155567.38</string> </value> + <value> <string>ts83646620.79</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -70,7 +70,7 @@ background-color: #FFFFFF;\\\n background-color: rgb(60, 76, 114);\\\n }\\\n .ace-eclipse .ace_cursor {\\\n -border-left: 2px solid black;\\\n +color: black;\\\n }\\\n .ace-eclipse .ace_storage,\\\n .ace-eclipse .ace_keyword,\\\n @@ -152,7 +152,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4000</int> </value> + <value> <int>3984</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-github.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-github.js.xml index 9eb5827ab3..61872ae3de 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-github.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-github.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155567.48</string> </value> + <value> <string>ts83646620.77</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -108,11 +108,7 @@ color: teal;\\\n font-weight: bold;\\\n }\\\n .ace-github .ace_cursor {\\\n -border-left: 2px solid black;\\\n -}\\\n -.ace-github .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid black;\\\n +color: black;\\\n }\\\n .ace-github .ace_marker-layer .ace_active-line {\\\n background: rgb(255, 255, 204);\\\n @@ -167,7 +163,7 @@ background: url(\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAAC </item> <item> <key> <string>size</string> </key> - <value> <int>4390</int> </value> + <value> <int>4269</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-idle_fingers.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-idle_fingers.js.xml index 12d03cabba..3062d2aa32 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-idle_fingers.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-idle_fingers.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155567.62</string> </value> + <value> <string>ts83646620.76</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -66,15 +66,8 @@ background: #3b3b3b\\\n background-color: #323232;\\\n color: #FFFFFF\\\n }\\\n -.ace-idle-fingers .ace_text-layer {\\\n -color: #FFFFFF\\\n -}\\\n .ace-idle-fingers .ace_cursor {\\\n -border-left: 2px solid #91FF00\\\n -}\\\n -.ace-idle-fingers .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #91FF00\\\n +color: #91FF00\\\n }\\\n .ace-idle-fingers .ace_marker-layer .ace_selection {\\\n background: rgba(90, 100, 126, 0.88)\\\n @@ -143,9 +136,6 @@ color: #FFE5BB\\\n .ace-idle-fingers .ace_entity.ace_name {\\\n color: #FFC66D\\\n }\\\n -.ace-idle-fingers .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-idle-fingers .ace_collab.ace_user1 {\\\n color: #323232;\\\n background-color: #FFF980\\\n @@ -165,7 +155,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4454</int> </value> + <value> <int>4192</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-kr.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-kr.js.xml index 7a10c7d87a..4633f00a74 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-kr.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-kr.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155567.73</string> </value> + <value> <string>ts83646620.75</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #0B0A09;\\\n color: #FCFFE0\\\n }\\\n .ace-kr-theme .ace_cursor {\\\n -border-left: 2px solid #FF9900\\\n -}\\\n -.ace-kr-theme .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #FF9900\\\n +color: #FF9900\\\n }\\\n .ace-kr-theme .ace_marker-layer .ace_selection {\\\n background: rgba(170, 0, 255, 0.45)\\\n @@ -148,10 +144,7 @@ color: #FF80E1\\\n .ace-kr-theme .ace_meta.ace_tag {\\\n color: #BABD9C\\\n }\\\n -.ace-kr-theme .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n -.ace-kr-theme .ace_markup.ace_list {\\\n +.ace-kr-theme .ace_list {\\\n background-color: #0F0040\\\n }\\\n .ace-kr-theme .ace_indent-guide {\\\n @@ -169,7 +162,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4440</int> </value> + <value> <int>4231</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-merbivore.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-merbivore.js.xml index 8704d31b5a..789070c0d9 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-merbivore.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-merbivore.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155567.87</string> </value> + <value> <string>ts83646620.73</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #161616;\\\n color: #E6E1DC\\\n }\\\n .ace-merbivore .ace_cursor {\\\n -border-left: 2px solid #FFFFFF\\\n -}\\\n -.ace-merbivore .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #FFFFFF\\\n +color: #FFFFFF\\\n }\\\n .ace-merbivore .ace_marker-layer .ace_selection {\\\n background: #454545\\\n @@ -143,9 +139,6 @@ color: #AD2EA4\\\n .ace-merbivore .ace_entity.ace_other.ace_attribute-name {\\\n color: #FFFF89\\\n }\\\n -.ace-merbivore .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-merbivore .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -161,7 +154,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4390</int> </value> + <value> <int>4190</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-merbivore_soft.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-merbivore_soft.js.xml index cdf9e3783a..6ec4132e96 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-merbivore_soft.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-merbivore_soft.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.01</string> </value> + <value> <string>ts83646620.72</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #1C1C1C;\\\n color: #E6E1DC\\\n }\\\n .ace-merbivore-soft .ace_cursor {\\\n -border-left: 2px solid #FFFFFF\\\n -}\\\n -.ace-merbivore-soft .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #FFFFFF\\\n +color: #FFFFFF\\\n }\\\n .ace-merbivore-soft .ace_marker-layer .ace_selection {\\\n background: #494949\\\n @@ -144,9 +140,6 @@ color: #AC4BB8\\\n .ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\\\n color: #EAF1A3\\\n }\\\n -.ace-merbivore-soft .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-merbivore-soft .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -162,7 +155,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4614</int> </value> + <value> <int>4404</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-mono_industrial.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-mono_industrial.js.xml index f88a186657..7cd29ebe77 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-mono_industrial.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-mono_industrial.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.12</string> </value> + <value> <string>ts83646620.7</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #222C28;\\\n color: #FFFFFF\\\n }\\\n .ace-mono-industrial .ace_cursor {\\\n -border-left: 2px solid #FFFFFF\\\n -}\\\n -.ace-mono-industrial .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #FFFFFF\\\n +color: #FFFFFF\\\n }\\\n .ace-mono-industrial .ace_marker-layer .ace_selection {\\\n background: rgba(145, 153, 148, 0.40)\\\n @@ -152,9 +148,6 @@ background-color: #151C19\\\n .ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\\\n color: #909993\\\n }\\\n -.ace-mono-industrial .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-mono-industrial .ace_entity.ace_name.ace_tag {\\\n color: #A65EFF\\\n }\\\n @@ -173,7 +166,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4981</int> </value> + <value> <int>4769</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-monokai.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-monokai.js.xml index 6695238f8f..08c846a159 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-monokai.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-monokai.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.24</string> </value> + <value> <string>ts83646620.69</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #272822;\\\n color: #F8F8F2\\\n }\\\n .ace-monokai .ace_cursor {\\\n -border-left: 2px solid #F8F8F0\\\n -}\\\n -.ace-monokai .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #F8F8F0\\\n +color: #F8F8F0\\\n }\\\n .ace-monokai .ace_marker-layer .ace_selection {\\\n background: #49483E\\\n @@ -105,6 +101,10 @@ color: #52524d\\\n .ace-monokai .ace_storage {\\\n color: #F92672\\\n }\\\n +.ace-monokai .ace_punctuation,\\\n +.ace-monokai .ace_punctuation.ace_tag {\\\n +color: #fff\\\n +}\\\n .ace-monokai .ace_constant.ace_character,\\\n .ace-monokai .ace_constant.ace_language,\\\n .ace-monokai .ace_constant.ace_numeric,\\\n @@ -149,9 +149,6 @@ color: #E6DB74\\\n .ace-monokai .ace_comment {\\\n color: #75715E\\\n }\\\n -.ace-monokai .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-monokai .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -167,7 +164,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4456</int> </value> + <value> <int>4349</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-pastel_on_dark.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-pastel_on_dark.js.xml index 25f21ce3fa..fd96707b06 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-pastel_on_dark.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-pastel_on_dark.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.35</string> </value> + <value> <string>ts83646620.67</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #2C2828;\\\n color: #8F938F\\\n }\\\n .ace-pastel-on-dark .ace_cursor {\\\n -border-left: 2px solid #A7A7A7\\\n -}\\\n -.ace-pastel-on-dark .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #A7A7A7\\\n +color: #A7A7A7\\\n }\\\n .ace-pastel-on-dark .ace_marker-layer .ace_selection {\\\n background: rgba(221, 240, 255, 0.20)\\\n @@ -156,9 +152,6 @@ color: #C1C144\\\n .ace-pastel-on-dark .ace_xml-pe {\\\n color: #494949\\\n }\\\n -.ace-pastel-on-dark .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-pastel-on-dark .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -174,7 +167,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4823</int> </value> + <value> <int>4613</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-solarized_dark.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-solarized_dark.js.xml index 5aa1e8d723..99c5457f41 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-solarized_dark.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-solarized_dark.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.46</string> </value> + <value> <string>ts83646620.66</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,16 +67,11 @@ background-color: #002B36;\\\n color: #93A1A1\\\n }\\\n .ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\\\n -.ace-solarized-dark .ace_storage,\\\n -.ace-solarized-dark .ace_text-layer {\\\n +.ace-solarized-dark .ace_storage {\\\n color: #93A1A1\\\n }\\\n .ace-solarized-dark .ace_cursor {\\\n -border-left: 2px solid #D30102\\\n -}\\\n -.ace-solarized-dark .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #D30102\\\n +color: #D30102\\\n }\\\n .ace-solarized-dark .ace_marker-layer .ace_active-line,\\\n .ace-solarized-dark .ace_marker-layer .ace_selection {\\\n @@ -139,9 +134,6 @@ color: #D30102\\\n font-style: italic;\\\n color: #657B83\\\n }\\\n -.ace-solarized-dark .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-solarized-dark .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -157,7 +149,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4520</int> </value> + <value> <int>4272</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-solarized_light.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-solarized_light.js.xml index b60f9dcd95..8c54ef0858 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-solarized_light.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-solarized_light.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.6</string> </value> + <value> <string>ts83646620.65</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #FDF6E3;\\\n color: #586E75\\\n }\\\n .ace-solarized-light .ace_cursor {\\\n -border-left: 2px solid #000000\\\n -}\\\n -.ace-solarized-light .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #000000\\\n +color: #000000\\\n }\\\n .ace-solarized-light .ace_marker-layer .ace_selection {\\\n background: rgba(7, 54, 67, 0.09)\\\n @@ -139,9 +135,6 @@ color: #D30102\\\n .ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\\\n color: #93A1A1\\\n }\\\n -.ace-solarized-light .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-solarized-light .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -157,7 +150,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4520</int> </value> + <value> <int>4308</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-terminal.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-terminal.js.xml index 16a1eae5e7..e667b39a2a 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-terminal.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-terminal.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.71</string> </value> + <value> <string>ts83646620.63</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: black;\\\n color: #DEDEDE\\\n }\\\n .ace-terminal-theme .ace_cursor {\\\n -border-left: 2px solid springgreen\\\n -}\\\n -.ace-terminal-theme .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #9F9F9F\\\n +color: #9F9F9F\\\n }\\\n .ace-terminal-theme .ace_marker-layer .ace_selection {\\\n background: #424242\\\n @@ -147,7 +143,7 @@ color: #7AA6DA\\\n .ace-terminal-theme .ace_support.ace_type {\\\n color: #E7C547\\\n }\\\n -.ace-terminal-theme .ace_markup.ace_heading,\\\n +.ace-terminal-theme .ace_heading,\\\n .ace-terminal-theme .ace_string {\\\n color: #B9CA4A\\\n }\\\n @@ -161,9 +157,6 @@ color: #D54E53\\\n .ace-terminal-theme .ace_comment {\\\n color: orangered\\\n }\\\n -.ace-terminal-theme .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-terminal-theme .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\\\n }\\\n @@ -180,7 +173,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>5130</int> </value> + <value> <int>4905</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-textmate.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-textmate.js.xml index 5e3ba9248b..c65f15ec75 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-textmate.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-textmate.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.81</string> </value> + <value> <string>ts83646620.62</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -20,7 +20,166 @@ </item> <item> <key> <string>data</string> </key> - <value> <string></string> </value> + <value> <string>/* ***** BEGIN LICENSE BLOCK *****\n + * Distributed under the BSD license:\n + *\n + * Copyright (c) 2010, Ajax.org B.V.\n + * All rights reserved.\n + * \n + * Redistribution and use in source and binary forms, with or without\n + * modification, are permitted provided that the following conditions are met:\n + * * Redistributions of source code must retain the above copyright\n + * notice, this list of conditions and the following disclaimer.\n + * * Redistributions in binary form must reproduce the above copyright\n + * notice, this list of conditions and the following disclaimer in the\n + * documentation and/or other materials provided with the distribution.\n + * * Neither the name of Ajax.org B.V. nor the\n + * names of its contributors may be used to endorse or promote products\n + * derived from this software without specific prior written permission.\n + * \n + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\n + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n + *\n + * ***** END LICENSE BLOCK ***** */\n +\n +define(\'ace/theme/textmate\', [\'require\', \'exports\', \'module\' , \'ace/lib/dom\'], function(require, exports, module) {\n +\n +\n +exports.isDark = false;\n +exports.cssClass = "ace-tm";\n +exports.cssText = ".ace-tm .ace_gutter {\\\n +background: #f0f0f0;\\\n +color: #333;\\\n +}\\\n +.ace-tm .ace_print-margin {\\\n +width: 1px;\\\n +background: #e8e8e8;\\\n +}\\\n +.ace-tm .ace_fold {\\\n +background-color: #6B72E6;\\\n +}\\\n +.ace-tm {\\\n +background-color: #FFFFFF;\\\n +}\\\n +.ace-tm .ace_cursor {\\\n +color: black;\\\n +}\\\n +.ace-tm .ace_invisible {\\\n +color: rgb(191, 191, 191);\\\n +}\\\n +.ace-tm .ace_storage,\\\n +.ace-tm .ace_keyword {\\\n +color: blue;\\\n +}\\\n +.ace-tm .ace_constant {\\\n +color: rgb(197, 6, 11);\\\n +}\\\n +.ace-tm .ace_constant.ace_buildin {\\\n +color: rgb(88, 72, 246);\\\n +}\\\n +.ace-tm .ace_constant.ace_language {\\\n +color: rgb(88, 92, 246);\\\n +}\\\n +.ace-tm .ace_constant.ace_library {\\\n +color: rgb(6, 150, 14);\\\n +}\\\n +.ace-tm .ace_invalid {\\\n +background-color: rgba(255, 0, 0, 0.1);\\\n +color: red;\\\n +}\\\n +.ace-tm .ace_support.ace_function {\\\n +color: rgb(60, 76, 114);\\\n +}\\\n +.ace-tm .ace_support.ace_constant {\\\n +color: rgb(6, 150, 14);\\\n +}\\\n +.ace-tm .ace_support.ace_type,\\\n +.ace-tm .ace_support.ace_class {\\\n +color: rgb(109, 121, 222);\\\n +}\\\n +.ace-tm .ace_keyword.ace_operator {\\\n +color: rgb(104, 118, 135);\\\n +}\\\n +.ace-tm .ace_string {\\\n +color: rgb(3, 106, 7);\\\n +}\\\n +.ace-tm .ace_comment {\\\n +color: rgb(76, 136, 107);\\\n +}\\\n +.ace-tm .ace_comment.ace_doc {\\\n +color: rgb(0, 102, 255);\\\n +}\\\n +.ace-tm .ace_comment.ace_doc.ace_tag {\\\n +color: rgb(128, 159, 191);\\\n +}\\\n +.ace-tm .ace_constant.ace_numeric {\\\n +color: rgb(0, 0, 205);\\\n +}\\\n +.ace-tm .ace_variable {\\\n +color: rgb(49, 132, 149);\\\n +}\\\n +.ace-tm .ace_xml-pe {\\\n +color: rgb(104, 104, 91);\\\n +}\\\n +.ace-tm .ace_entity.ace_name.ace_function {\\\n +color: #0000A2;\\\n +}\\\n +.ace-tm .ace_heading {\\\n +color: rgb(12, 7, 255);\\\n +}\\\n +.ace-tm .ace_list {\\\n +color:rgb(185, 6, 144);\\\n +}\\\n +.ace-tm .ace_meta.ace_tag {\\\n +color:rgb(0, 22, 142);\\\n +}\\\n +.ace-tm .ace_string.ace_regex {\\\n +color: rgb(255, 0, 0)\\\n +}\\\n +.ace-tm .ace_marker-layer .ace_selection {\\\n +background: rgb(181, 213, 255);\\\n +}\\\n +.ace-tm.ace_multiselect .ace_selection.ace_start {\\\n +box-shadow: 0 0 3px 0px white;\\\n +border-radius: 2px;\\\n +}\\\n +.ace-tm .ace_marker-layer .ace_step {\\\n +background: rgb(252, 255, 0);\\\n +}\\\n +.ace-tm .ace_marker-layer .ace_stack {\\\n +background: rgb(164, 229, 101);\\\n +}\\\n +.ace-tm .ace_marker-layer .ace_bracket {\\\n +margin: -1px 0 0 -1px;\\\n +border: 1px solid rgb(192, 192, 192);\\\n +}\\\n +.ace-tm .ace_marker-layer .ace_active-line {\\\n +background: rgba(0, 0, 0, 0.07);\\\n +}\\\n +.ace-tm .ace_gutter-active-line {\\\n +background-color : #dcdcdc;\\\n +}\\\n +.ace-tm .ace_marker-layer .ace_selected-word {\\\n +background: rgb(250, 250, 255);\\\n +border: 1px solid rgb(200, 200, 250);\\\n +}\\\n +.ace-tm .ace_indent-guide {\\\n +background: url(\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\") right repeat-y;\\\n +}\\\n +";\n +\n +var dom = require("../lib/dom");\n +dom.importCssString(exports.cssText, exports.cssClass);\n +});\n +</string> </value> </item> <item> <key> <string>precondition</string> </key> @@ -28,7 +187,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>0</int> </value> + <value> <int>4582</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow.js.xml index b5f9fec415..e5effe30f6 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155568.92</string> </value> + <value> <string>ts83646620.17</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -62,17 +62,12 @@ color: #4D4D4C\\\n width: 1px;\\\n background: #f6f6f6\\\n }\\\n -.ace-tomorrow,\\\n -.ace-tomorrow .ace_scroller {\\\n +.ace-tomorrow {\\\n background-color: #FFFFFF;\\\n color: #4D4D4C\\\n }\\\n .ace-tomorrow .ace_cursor {\\\n -border-left: 2px solid #AEAFAD\\\n -}\\\n -.ace-tomorrow .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #AEAFAD\\\n +color: #AEAFAD\\\n }\\\n .ace-tomorrow .ace_marker-layer .ace_selection {\\\n background: #D6D6D6\\\n @@ -142,7 +137,7 @@ color: #4271AE\\\n .ace-tomorrow .ace_support.ace_type {\\\n color: #C99E00\\\n }\\\n -.ace-tomorrow .ace_markup.ace_heading,\\\n +.ace-tomorrow .ace_heading,\\\n .ace-tomorrow .ace_string {\\\n color: #718C00\\\n }\\\n @@ -156,9 +151,6 @@ color: #C82829\\\n .ace-tomorrow .ace_comment {\\\n color: #8E908C\\\n }\\\n -.ace-tomorrow .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-tomorrow .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\\\n }";\n @@ -174,7 +166,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4735</int> </value> + <value> <int>4496</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night.js.xml index 77da33d1c8..1e08852a83 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155569.41</string> </value> + <value> <string>ts83646620.16</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #1D1F21;\\\n color: #C5C8C6\\\n }\\\n .ace-tomorrow-night .ace_cursor {\\\n -border-left: 2px solid #AEAFAD\\\n -}\\\n -.ace-tomorrow-night .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #AEAFAD\\\n +color: #AEAFAD\\\n }\\\n .ace-tomorrow-night .ace_marker-layer .ace_selection {\\\n background: #373B41\\\n @@ -141,7 +137,7 @@ color: #81A2BE\\\n .ace-tomorrow-night .ace_support.ace_type {\\\n color: #F0C674\\\n }\\\n -.ace-tomorrow-night .ace_markup.ace_heading,\\\n +.ace-tomorrow-night .ace_heading,\\\n .ace-tomorrow-night .ace_string {\\\n color: #B5BD68\\\n }\\\n @@ -155,9 +151,6 @@ color: #CC6666\\\n .ace-tomorrow-night .ace_comment {\\\n color: #969896\\\n }\\\n -.ace-tomorrow-night .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-tomorrow-night .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -173,7 +166,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4976</int> </value> + <value> <int>4755</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_blue.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_blue.js.xml index 9a075c3cc7..b36da29c6a 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_blue.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_blue.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155569.02</string> </value> + <value> <string>ts83646620.14</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -70,11 +70,7 @@ color: #FFFFFF\\\n color: #FFFFFF\\\n }\\\n .ace-tomorrow-night-blue .ace_cursor {\\\n -border-left: 2px solid #FFFFFF\\\n -}\\\n -.ace-tomorrow-night-blue .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #FFFFFF\\\n +color: #FFFFFF\\\n }\\\n .ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\\\n background: #003F8E\\\n @@ -141,7 +137,7 @@ color: #BBDAFF\\\n .ace-tomorrow-night-blue .ace_support.ace_type {\\\n color: #FFEEAD\\\n }\\\n -.ace-tomorrow-night-blue .ace_markup.ace_heading,\\\n +.ace-tomorrow-night-blue .ace_heading,\\\n .ace-tomorrow-night-blue .ace_string {\\\n color: #D1F1A9\\\n }\\\n @@ -155,9 +151,6 @@ color: #FF9DA4\\\n .ace-tomorrow-night-blue .ace_comment {\\\n color: #7285B7\\\n }\\\n -.ace-tomorrow-night-blue .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-tomorrow-night-blue .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -173,7 +166,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>5207</int> </value> + <value> <int>4976</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_bright.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_bright.js.xml index 89cd35f951..7f6f9bc508 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_bright.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_bright.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155569.12</string> </value> + <value> <string>ts83646620.12</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #000000;\\\n color: #DEDEDE\\\n }\\\n .ace-tomorrow-night-bright .ace_cursor {\\\n -border-left: 2px solid #9F9F9F\\\n -}\\\n -.ace-tomorrow-night-bright .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #9F9F9F\\\n +color: #9F9F9F\\\n }\\\n .ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\\\n background: #424242\\\n @@ -93,6 +89,9 @@ background: #2A2A2A\\\n .ace-tomorrow-night-bright .ace_gutter-active-line {\\\n background-color: #2A2A2A\\\n }\\\n +.ace-tomorrow-night-bright .ace_stack {\\\n +background-color: rgb(66, 90, 44);\\\n +}\\\n .ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\\\n border: 1px solid #424242\\\n }\\\n @@ -141,7 +140,7 @@ color: #7AA6DA\\\n .ace-tomorrow-night-bright .ace_support.ace_type {\\\n color: #E7C547\\\n }\\\n -.ace-tomorrow-night-bright .ace_markup.ace_heading,\\\n +.ace-tomorrow-night-bright .ace_heading,\\\n .ace-tomorrow-night-bright .ace_string {\\\n color: #B9CA4A\\\n }\\\n @@ -155,9 +154,6 @@ color: #D54E53\\\n .ace-tomorrow-night-bright .ace_comment {\\\n color: #969896\\\n }\\\n -.ace-tomorrow-night-bright .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-tomorrow-night-bright .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -173,7 +169,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>5297</int> </value> + <value> <int>5142</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_eighties.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_eighties.js.xml index 2910d45411..7bc5d6d73e 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_eighties.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-tomorrow_night_eighties.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155569.27</string> </value> + <value> <string>ts83646620.1</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -70,11 +70,7 @@ color: #CCCCCC\\\n color: #CCCCCC\\\n }\\\n .ace-tomorrow-night-eighties .ace_cursor {\\\n -border-left: 2px solid #CCCCCC\\\n -}\\\n -.ace-tomorrow-night-eighties .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #CCCCCC\\\n +color: #CCCCCC\\\n }\\\n .ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\\\n background: #515151\\\n @@ -90,6 +86,9 @@ background: rgb(102, 82, 0)\\\n margin: -1px 0 0 -1px;\\\n border: 1px solid #6A6A6A\\\n }\\\n +.ace-tomorrow-night-bright .ace_stack {\\\n +background: rgb(66, 90, 44)\\\n +}\\\n .ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\\\n background: #393939\\\n }\\\n @@ -141,7 +140,7 @@ color: #6699CC\\\n .ace-tomorrow-night-eighties .ace_support.ace_type {\\\n color: #FFCC66\\\n }\\\n -.ace-tomorrow-night-eighties .ace_markup.ace_heading,\\\n +.ace-tomorrow-night-eighties .ace_heading,\\\n .ace-tomorrow-night-eighties .ace_string {\\\n color: #99CC99\\\n }\\\n @@ -154,9 +153,6 @@ color: #999999\\\n .ace-tomorrow-night-eighties .ace_variable {\\\n color: #F2777A\\\n }\\\n -.ace-tomorrow-night-eighties .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-tomorrow-night-eighties .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\\\n }";\n @@ -172,7 +168,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>5331</int> </value> + <value> <int>5165</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-twilight.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-twilight.js.xml index 4b65170fe3..3b81342a75 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-twilight.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-twilight.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155569.55</string> </value> + <value> <string>ts83646620.61</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #141414;\\\n color: #F8F8F8\\\n }\\\n .ace-twilight .ace_cursor {\\\n -border-left: 2px solid #A7A7A7\\\n -}\\\n -.ace-twilight .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #A7A7A7\\\n +color: #A7A7A7\\\n }\\\n .ace-twilight .ace_marker-layer .ace_selection {\\\n background: rgba(221, 240, 255, 0.20)\\\n @@ -107,7 +103,7 @@ color: #CDA869\\\n .ace-twilight .ace_constant.ace_character,\\\n .ace-twilight .ace_constant.ace_character.ace_escape,\\\n .ace-twilight .ace_constant.ace_other,\\\n -.ace-twilight .ace_markup.ace_heading,\\\n +.ace-twilight .ace_heading,\\\n .ace-twilight .ace_support.ace_constant {\\\n color: #CF6A4C\\\n }\\\n @@ -130,7 +126,7 @@ border-color: #F8F8F8\\\n .ace-twilight .ace_support.ace_function {\\\n color: #DAD085\\\n }\\\n -.ace-twilight .ace_markup.ace_list,\\\n +.ace-twilight .ace_list,\\\n .ace-twilight .ace_storage {\\\n color: #F9EE98\\\n }\\\n @@ -155,9 +151,6 @@ color: #7587A6\\\n .ace-twilight .ace_xml-pe {\\\n color: #494949\\\n }\\\n -.ace-twilight .ace_markup.ace_underline {\\\n -text-decoration: underline\\\n -}\\\n .ace-twilight .ace_indent-guide {\\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y;\\\n }";\n @@ -173,7 +166,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4624</int> </value> + <value> <int>4404</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-vibrant_ink.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-vibrant_ink.js.xml index 14655907d6..4cf3ce5528 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-vibrant_ink.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-vibrant_ink.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155569.69</string> </value> + <value> <string>ts83646620.59</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -67,11 +67,7 @@ background-color: #0F0F0F;\\\n color: #FFFFFF\\\n }\\\n .ace-vibrant-ink .ace_cursor {\\\n -border-left: 2px solid #FFFFFF\\\n -}\\\n -.ace-vibrant-ink .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #FFFFFF\\\n +color: #FFFFFF\\\n }\\\n .ace-vibrant-ink .ace_marker-layer .ace_selection {\\\n background: #6699CC\\\n @@ -157,7 +153,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4283</int> </value> + <value> <int>4156</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-xcode.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-xcode.js.xml index 3ca2f72bc4..a2ec468ae5 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-xcode.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/theme-xcode.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155569.82</string> </value> + <value> <string>ts83646620.58</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -68,11 +68,7 @@ background-color: #FFFFFF;\\\n color: #000000\\\n }\\\n .ace-xcode .ace_cursor {\\\n -border-left: 2px solid #000000\\\n -}\\\n -.ace-xcode .ace_overwrite-cursors .ace_cursor {\\\n -border-left: 0px;\\\n -border-bottom: 1px solid #000000\\\n +color: #000000\\\n }\\\n .ace-xcode .ace_marker-layer .ace_selection {\\\n background: #B5D5FF\\\n @@ -151,7 +147,7 @@ dom.importCssString(exports.cssText, exports.cssClass);\n </item> <item> <key> <string>size</string> </key> - <value> <int>4076</int> </value> + <value> <int>3955</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-coffee.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-coffee.js.xml index b3a9404966..789e981ce2 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-coffee.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-coffee.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155569.97</string> </value> + <value> <string>ts83646620.56</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>336303</int> </value> + <value> <int>339257</int> </value> </item> <item> <key> <string>title</string> </key> @@ -55,31 +55,30 @@ if (typeof window.window != "undefined" && window.document) {\n return;\n }\n \n -window.console = {\n - log: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - },\n - error: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - }\n +window.console = function() {\n + var msgs = Array.prototype.slice.call(arguments, 0);\n + postMessage({type: "log", data: msgs});\n };\n +window.console.error =\n +window.console.warn = \n +window.console.log =\n +window.console.trace = window.console;\n +\n window.window = window;\n window.ace = window;\n \n window.normalizeModule = function(parentId, moduleName) {\n if (moduleName.indexOf("!") !== -1) {\n var chunks = moduleName.split("!");\n - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);\n + return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);\n }\n if (moduleName.charAt(0) == ".") {\n var base = parentId.split("/").slice(0, -1).join("/");\n - moduleName = base + "/" + moduleName;\n + moduleName = (base ? base + "/" : "") + moduleName;\n \n while(moduleName.indexOf(".") !== -1 && previous != moduleName) {\n var previous = moduleName;\n - moduleName = moduleName.replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n + moduleName = moduleName.replace(/^\\.\\//, "").replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n }\n }\n \n @@ -94,9 +93,9 @@ window.require = function(parentId, id) {\n if (!id.charAt)\n throw new Error("worker.js require() accepts only (parentId, id) as arguments");\n \n - id = normalizeModule(parentId, id);\n + id = window.normalizeModule(parentId, id);\n \n - var module = require.modules[id];\n + var module = window.require.modules[id];\n if (module) {\n if (!module.initialized) {\n module.initialized = true;\n @@ -106,48 +105,60 @@ window.require = function(parentId, id) {\n }\n \n var chunks = id.split("/");\n - chunks[0] = require.tlns[chunks[0]] || chunks[0];\n + if (!window.require.tlns)\n + return console.log("unable to load " + id);\n + chunks[0] = window.require.tlns[chunks[0]] || chunks[0];\n var path = chunks.join("/") + ".js";\n \n - require.id = id;\n + window.require.id = id;\n importScripts(path);\n - return require(parentId, id);\n + return window.require(parentId, id);\n };\n -\n -require.modules = {};\n -require.tlns = {};\n +window.require.modules = {};\n +window.require.tlns = {};\n \n window.define = function(id, deps, factory) {\n if (arguments.length == 2) {\n factory = deps;\n if (typeof id != "string") {\n deps = id;\n - id = require.id;\n + id = window.require.id;\n }\n } else if (arguments.length == 1) {\n factory = id;\n - id = require.id;\n + deps = []\n + id = window.require.id;\n }\n +\n + if (!deps.length)\n + deps = [\'require\', \'exports\', \'module\']\n \n if (id.indexOf("text!") === 0) \n return;\n \n - var req = function(deps, factory) {\n - return require(id, deps, factory);\n + var req = function(childId) {\n + return window.require(id, childId);\n };\n \n - require.modules[id] = {\n + window.require.modules[id] = {\n + exports: {},\n factory: function() {\n - var module = {\n - exports: {}\n - };\n - var returnExports = factory(req, module.exports, module);\n + var module = this;\n + var returnExports = factory.apply(this, deps.map(function(dep) {\n + switch(dep) {\n + case \'require\': return req\n + case \'exports\': return module.exports\n + case \'module\': return module\n + default: return req(dep)\n + }\n + }));\n if (returnExports)\n module.exports = returnExports;\n return module;\n }\n };\n };\n +window.define.amd = {}\n \n window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n require.tlns = topLevelNamespaces;\n @@ -155,8 +166,8 @@ window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n \n window.initSender = function initSender() {\n \n - var EventEmitter = require("ace/lib/event_emitter").EventEmitter;\n - var oop = require("ace/lib/oop");\n + var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;\n + var oop = window.require("ace/lib/oop");\n \n var Sender = function() {};\n \n @@ -207,158 +218,7 @@ window.onmessage = function(e) {\n sender._emit(msg.event, msg.data);\n }\n };\n -})(this);\n -\n -define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -var EventEmitter = {};\n -var stopPropagation = function() { this.propagationStopped = true; };\n -var preventDefault = function() { this.defaultPrevented = true; };\n -\n -EventEmitter._emit =\n -EventEmitter._dispatchEvent = function(eventName, e) {\n - this._eventRegistry || (this._eventRegistry = {});\n - this._defaultHandlers || (this._defaultHandlers = {});\n -\n - var listeners = this._eventRegistry[eventName] || [];\n - var defaultHandler = this._defaultHandlers[eventName];\n - if (!listeners.length && !defaultHandler)\n - return;\n -\n - if (typeof e != "object" || !e)\n - e = {};\n -\n - if (!e.type)\n - e.type = eventName;\n - if (!e.stopPropagation)\n - e.stopPropagation = stopPropagation;\n - if (!e.preventDefault)\n - e.preventDefault = preventDefault;\n -\n - for (var i=0; i<listeners.length; i++) {\n - listeners[i](e, this);\n - if (e.propagationStopped)\n - break;\n - }\n - \n - if (defaultHandler && !e.defaultPrevented)\n - return defaultHandler(e, this);\n -};\n -\n -\n -EventEmitter._signal = function(eventName, e) {\n - var listeners = (this._eventRegistry || {})[eventName];\n - if (!listeners)\n - return;\n -\n - for (var i=0; i<listeners.length; i++)\n - listeners[i](e, this);\n -};\n -\n -EventEmitter.once = function(eventName, callback) {\n - var _self = this;\n - callback && this.addEventListener(eventName, function newCallback() {\n - _self.removeEventListener(eventName, newCallback);\n - callback.apply(null, arguments);\n - });\n -};\n -\n -\n -EventEmitter.setDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - handlers = this._defaultHandlers = {_disabled_: {}};\n - \n - if (handlers[eventName]) {\n - var old = handlers[eventName];\n - var disabled = handlers._disabled_[eventName];\n - if (!disabled)\n - handlers._disabled_[eventName] = disabled = [];\n - disabled.push(old);\n - var i = disabled.indexOf(callback);\n - if (i != -1) \n - disabled.splice(i, 1);\n - }\n - handlers[eventName] = callback;\n -};\n -EventEmitter.removeDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - return;\n - var disabled = handlers._disabled_[eventName];\n - \n - if (handlers[eventName] == callback) {\n - var old = handlers[eventName];\n - if (disabled)\n - this.setDefaultHandler(eventName, disabled.pop());\n - } else if (disabled) {\n - var i = disabled.indexOf(callback);\n - if (i != -1)\n - disabled.splice(i, 1);\n - }\n -};\n -\n -EventEmitter.on =\n -EventEmitter.addEventListener = function(eventName, callback, capturing) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - listeners = this._eventRegistry[eventName] = [];\n -\n - if (listeners.indexOf(callback) == -1)\n - listeners[capturing ? "unshift" : "push"](callback);\n - return callback;\n -};\n -\n -EventEmitter.off =\n -EventEmitter.removeListener =\n -EventEmitter.removeEventListener = function(eventName, callback) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - return;\n -\n - var index = listeners.indexOf(callback);\n - if (index !== -1)\n - listeners.splice(index, 1);\n -};\n -\n -EventEmitter.removeAllListeners = function(eventName) {\n - if (this._eventRegistry) this._eventRegistry[eventName] = [];\n -};\n -\n -exports.EventEmitter = EventEmitter;\n -\n -});\n -\n -define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -exports.inherits = (function() {\n - var tempCtor = function() {};\n - return function(ctor, superCtor) {\n - tempCtor.prototype = superCtor.prototype;\n - ctor.super_ = superCtor.prototype;\n - ctor.prototype = new tempCtor();\n - ctor.prototype.constructor = ctor;\n - };\n -}());\n -\n -exports.mixin = function(obj, mixin) {\n - for (var key in mixin) {\n - obj[key] = mixin[key];\n - }\n - return obj;\n -};\n -\n -exports.implement = function(proto, mixin) {\n - exports.mixin(proto, mixin);\n -};\n -\n -});\n +})(this);// https://github.com/kriskowal/es5-shim\n \n define(\'ace/lib/es5-shim\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n @@ -1101,6 +961,32 @@ oop.inherits(Worker, Mirror);\n }).call(Worker.prototype);\n \n });\n +\n +define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +exports.inherits = (function() {\n + var tempCtor = function() {};\n + return function(ctor, superCtor) {\n + tempCtor.prototype = superCtor.prototype;\n + ctor.super_ = superCtor.prototype;\n + ctor.prototype = new tempCtor();\n + ctor.prototype.constructor = ctor;\n + };\n +}());\n +\n +exports.mixin = function(obj, mixin) {\n + for (var key in mixin) {\n + obj[key] = mixin[key];\n + }\n + return obj;\n +};\n +\n +exports.implement = function(proto, mixin) {\n + exports.mixin(proto, mixin);\n +};\n +\n +});\n define(\'ace/worker/mirror\', [\'require\', \'exports\', \'module\' , \'ace/document\', \'ace/lib/lang\'], function(require, exports, module) {\n \n \n @@ -1230,7 +1116,7 @@ var Document = function(text) {\n };\n this.getTextRange = function(range) {\n if (range.start.row == range.end.row) {\n - return this.$lines[range.start.row]\n + return this.getLine(range.start.row)\n .substring(range.start.column, range.end.column);\n }\n var lines = this.getLines(range.start.row, range.end.row);\n @@ -1341,6 +1227,8 @@ var Document = function(text) {\n return end;\n };\n this.remove = function(range) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n range.start = this.$clipPosition(range.start);\n range.end = this.$clipPosition(range.end);\n \n @@ -1424,6 +1312,8 @@ var Document = function(text) {\n this._emit("change", { data: delta });\n };\n this.replace = function(range, text) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n if (text.length == 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n @@ -1496,6 +1386,132 @@ var Document = function(text) {\n exports.Document = Document;\n });\n \n +define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +var EventEmitter = {};\n +var stopPropagation = function() { this.propagationStopped = true; };\n +var preventDefault = function() { this.defaultPrevented = true; };\n +\n +EventEmitter._emit =\n +EventEmitter._dispatchEvent = function(eventName, e) {\n + this._eventRegistry || (this._eventRegistry = {});\n + this._defaultHandlers || (this._defaultHandlers = {});\n +\n + var listeners = this._eventRegistry[eventName] || [];\n + var defaultHandler = this._defaultHandlers[eventName];\n + if (!listeners.length && !defaultHandler)\n + return;\n +\n + if (typeof e != "object" || !e)\n + e = {};\n +\n + if (!e.type)\n + e.type = eventName;\n + if (!e.stopPropagation)\n + e.stopPropagation = stopPropagation;\n + if (!e.preventDefault)\n + e.preventDefault = preventDefault;\n +\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++) {\n + listeners[i](e, this);\n + if (e.propagationStopped)\n + break;\n + }\n + \n + if (defaultHandler && !e.defaultPrevented)\n + return defaultHandler(e, this);\n +};\n +\n +\n +EventEmitter._signal = function(eventName, e) {\n + var listeners = (this._eventRegistry || {})[eventName];\n + if (!listeners)\n + return;\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++)\n + listeners[i](e, this);\n +};\n +\n +EventEmitter.once = function(eventName, callback) {\n + var _self = this;\n + callback && this.addEventListener(eventName, function newCallback() {\n + _self.removeEventListener(eventName, newCallback);\n + callback.apply(null, arguments);\n + });\n +};\n +\n +\n +EventEmitter.setDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + handlers = this._defaultHandlers = {_disabled_: {}};\n + \n + if (handlers[eventName]) {\n + var old = handlers[eventName];\n + var disabled = handlers._disabled_[eventName];\n + if (!disabled)\n + handlers._disabled_[eventName] = disabled = [];\n + disabled.push(old);\n + var i = disabled.indexOf(callback);\n + if (i != -1) \n + disabled.splice(i, 1);\n + }\n + handlers[eventName] = callback;\n +};\n +EventEmitter.removeDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + return;\n + var disabled = handlers._disabled_[eventName];\n + \n + if (handlers[eventName] == callback) {\n + var old = handlers[eventName];\n + if (disabled)\n + this.setDefaultHandler(eventName, disabled.pop());\n + } else if (disabled) {\n + var i = disabled.indexOf(callback);\n + if (i != -1)\n + disabled.splice(i, 1);\n + }\n +};\n +\n +EventEmitter.on =\n +EventEmitter.addEventListener = function(eventName, callback, capturing) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + listeners = this._eventRegistry[eventName] = [];\n +\n + if (listeners.indexOf(callback) == -1)\n + listeners[capturing ? "unshift" : "push"](callback);\n + return callback;\n +};\n +\n +EventEmitter.off =\n +EventEmitter.removeListener =\n +EventEmitter.removeEventListener = function(eventName, callback) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + return;\n +\n + var index = listeners.indexOf(callback);\n + if (index !== -1)\n + listeners.splice(index, 1);\n +};\n +\n +EventEmitter.removeAllListeners = function(eventName) {\n + if (this._eventRegistry) this._eventRegistry[eventName] = [];\n +};\n +\n +exports.EventEmitter = EventEmitter;\n +\n +});\n +\n define(\'ace/range\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n var comparePoints = function(p1, p2) {\n @@ -1742,29 +1758,25 @@ var oop = require("./lib/oop");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n \n var Anchor = exports.Anchor = function(doc, row, column) {\n - this.document = doc;\n -\n + this.$onChange = this.onChange.bind(this);\n + this.attach(doc);\n + \n if (typeof column == "undefined")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n -\n - this.$onChange = this.onChange.bind(this);\n - doc.on("change", this.$onChange);\n };\n \n (function() {\n \n oop.implement(this, EventEmitter);\n -\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n -\n this.getDocument = function() {\n return this.document;\n };\n -\n + this.$insertRight = false;\n this.onChange = function(e) {\n var delta = e.data;\n var range = delta.range;\n @@ -1785,7 +1797,8 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n if (delta.action === "insertText") {\n if (start.row === row && start.column <= column) {\n - if (start.row === end.row) {\n + if (start.column === column && this.$insertRight) {\n + } else if (start.row === end.row) {\n column += end.column - start.column;\n } else {\n column -= start.column;\n @@ -1826,7 +1839,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n this.setPosition(row, column, true);\n };\n -\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n @@ -1853,10 +1865,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n value: pos\n });\n };\n -\n this.detach = function() {\n this.document.removeEventListener("change", this.$onChange);\n };\n + this.attach = function(doc) {\n + this.document = doc || this.document;\n + this.document.on("change", this.$onChange);\n + };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n \n @@ -2095,12 +2110,12 @@ define(\'ace/mode/coffee/coffee-script\', [\'require\', \'exports\', \'module\' \n define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/mode/coffee/rewriter\', \'ace/mode/coffee/helpers\'], function(require, exports, module) {\n \n - var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, starts, throwSyntaxError, _ref, _ref1,\n + var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, repeat, starts, throwSyntaxError, _ref, _ref1,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n \n _ref = require(\'./rewriter\'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;\n \n - _ref1 = require(\'./helpers\'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;\n + _ref1 = require(\'./helpers\'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, repeat = _ref1.repeat, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;\n \n exports.Lexer = Lexer = (function() {\n function Lexer() {}\n @@ -2112,6 +2127,7 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ }\n this.literate = opts.literate;\n this.indent = 0;\n + this.baseIndent = 0;\n this.indebt = 0;\n this.outdebt = 0;\n this.indents = [];\n @@ -2250,10 +2266,10 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ }\n lexedLength = number.length;\n if (octalLiteral = /^0o([0-7]+)/.exec(number)) {\n - number = \'0x\' + (parseInt(octalLiteral[1], 8)).toString(16);\n + number = \'0x\' + parseInt(octalLiteral[1], 8).toString(16);\n }\n if (binaryLiteral = /^0b([01]+)/.exec(number)) {\n - number = \'0x\' + (parseInt(binaryLiteral[1], 2)).toString(16);\n + number = \'0x\' + parseInt(binaryLiteral[1], 2).toString(16);\n }\n this.token(\'NUMBER\', number, 0, lexedLength);\n return lexedLength;\n @@ -2323,7 +2339,7 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ if (here) {\n this.token(\'HERECOMMENT\', this.sanitizeHeredoc(here, {\n herecomment: true,\n - indent: Array(this.indent + 1).join(\' \')\n + indent: repeat(\' \', this.indent)\n }), 0, comment.length);\n }\n return comment.length;\n @@ -2441,11 +2457,17 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ this.suppressNewlines();\n return indent.length;\n }\n + if (!this.tokens.length) {\n + this.baseIndent = this.indent = size;\n + return indent.length;\n + }\n diff = size - this.indent + this.outdebt;\n this.token(\'INDENT\', diff, indent.length - size, size);\n this.indents.push(diff);\n this.ends.push(\'OUTDENT\');\n this.outdebt = this.indebt = 0;\n + } else if (size < this.baseIndent) {\n + this.error(\'missing indentation\', indent.length);\n } else {\n this.indebt = 0;\n this.outdentToken(this.indent - size, noNewlines, indent.length);\n @@ -2521,7 +2543,30 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ \n Lexer.prototype.literalToken = function() {\n var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;\n - if (match = OPERATOR.exec(this.chunk)) {\n + if (match = OPERATOR.exec(t + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +his.chunk)) {\n value = match[0];\n if (CODE.test(value)) {\n this.tagParameters();\n @@ -2805,7 +2850,7 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ column = this.chunkColumn;\n if (lineCount > 0) {\n lines = string.split(\'\\n\');\n - column = (last(lines)).length;\n + column = last(lines).length;\n } else {\n column += string.length;\n }\n @@ -2869,10 +2914,15 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ return quote + this.escapeLines(body, heredoc) + quote;\n };\n \n - Lexer.prototype.error = function(message) {\n + Lexer.prototype.error = function(message, offset) {\n + var first_column, first_line, _ref2;\n + if (offset == null) {\n + offset = 0;\n + }\n + _ref2 = this.getLineAndColumnFromChunk(offset), first_line = _ref2[0], first_column = _ref2[1];\n return throwSyntaxError(message, {\n - first_line: this.chunkLine,\n - first_column: this.chunkColumn\n + first_line: first_line,\n + first_column: first_column\n });\n };\n \n @@ -2971,9 +3021,9 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ \n BOOL = [\'TRUE\', \'FALSE\'];\n \n - NOT_REGEX = [\'NUMBER\', \'REGEX\', \'BOOL\', \'NULL\', \'UNDEFINED\', \'++\', \'--\', \']\'];\n + NOT_REGEX = [\'NUMBER\', \'REGEX\', \'BOOL\', \'NULL\', \'UNDEFINED\', \'++\', \'--\'];\n \n - NOT_SPACED_REGEX = NOT_REGEX.concat(\')\', \'}\', \'THIS\', \'IDENTIFIER\', \'STRING\');\n + NOT_SPACED_REGEX = NOT_REGEX.concat(\')\', \'}\', \'THIS\', \'IDENTIFIER\', \'STRING\', \']\');\n \n CALLABLE = [\'IDENTIFIER\', \'STRING\', \'REGEX\', \')\', \']\', \'}\', \'?\', \'::\', \'@\', \'THIS\', \'SUPER\'];\n \n @@ -2986,7 +3036,7 @@ define(\'ace/mode/coffee/lexer\', [\'require\', \'exports\', \'module\' , \'ace/ \n define(\'ace/mode/coffee/rewriter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n - var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,\n + var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n __slice = [].slice;\n \n @@ -3259,7 +3309,7 @@ define(\'ace/mode/coffee/rewriter\', [\'require\', \'exports\', \'module\' ], fu startImplicitCall(i + 1);\n return forward(2);\n }\n - if (this.matchTags(i, IMPLICIT_FUNC, \'INDENT\', null, \':\') && !this.findTagsBackwards(i, [\'CLASS\', \'EXTENDS\', \'IF\', \'CATCH\', \'SWITCH\', \'LEADING_WHEN\', \'FOR\', \'WHILE\', \'UNTIL\'])) {\n + if (__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && this.matchTags(i + 1, \'INDENT\', null, \':\') && !this.findTagsBackwards(i, [\'CLASS\', \'EXTENDS\', \'IF\', \'CATCH\', \'SWITCH\', \'LEADING_WHEN\', \'FOR\', \'WHILE\', \'UNTIL\'])) {\n startImplicitCall(i + 1);\n stack.push([\'INDENT\', i + 2]);\n return forward(3);\n @@ -3344,8 +3394,8 @@ define(\'ace/mode/coffee/rewriter\', [\'require\', \'exports\', \'module\' ], fu var action, condition, indent, outdent, starter;\n starter = indent = outdent = null;\n condition = function(token, i) {\n - var _ref;\n - return token[1] !== \';\' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === \'ELSE\' && (starter !== \'IF\' && starter !== \'THEN\'));\n + var _ref, _ref1;\n + return token[1] !== \';\' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === \'ELSE\' && starter !== \'THEN\') && !(((_ref1 = token[0]) === \'CATCH\' || _ref1 === \'FINALLY\') && (starter === \'->\' || starter === \'=>\'));\n };\n action = function(token, i) {\n return this.tokens.splice((this.tag(i - 1) === \',\' ? i - 1 : i), 0, outdent);\n @@ -3459,8 +3509,6 @@ define(\'ace/mode/coffee/rewriter\', [\'require\', \'exports\', \'module\' ], fu IMPLICIT_CALL = [\'IDENTIFIER\', \'NUMBER\', \'STRING\', \'JS\', \'REGEX\', \'NEW\', \'PARAM_START\', \'CLASS\', \'IF\', \'TRY\', \'SWITCH\', \'THIS\', \'BOOL\', \'NULL\', \'UNDEFINED\', \'UNARY\', \'SUPER\', \'THROW\', \'@\', \'->\', \'=>\', \'[\', \'(\', \'{\', \'--\', \'++\'];\n \n IMPLICIT_UNSPACED_CALL = [\'+\', \'-\'];\n -\n - IMPLICIT_BLOCK = [\'->\', \'=>\', \'{\', \'[\', \',\'];\n \n IMPLICIT_END = [\'POST_IF\', \'FOR\', \'WHILE\', \'UNTIL\', \'WHEN\', \'BY\', \'LOOP\', \'TERMINATOR\'];\n \n @@ -3475,7 +3523,7 @@ define(\'ace/mode/coffee/rewriter\', [\'require\', \'exports\', \'module\' ], fu \n define(\'ace/mode/coffee/helpers\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n - var buildLocationData, extend, flatten, last, repeat, _ref;\n + var buildLocationData, extend, flatten, last, repeat, syntaxErrorToString, _ref;\n \n exports.starts = function(string, literal, start) {\n return literal === string.substr(start, literal.length);\n @@ -3662,37 +3710,57 @@ define(\'ace/mode/coffee/helpers\', [\'require\', \'exports\', \'module\' ], fun };\n \n exports.throwSyntaxError = function(message, location) {\n - var error, _ref1, _ref2;\n - if ((_ref1 = location.last_line) == null) {\n + var error;\n + if (location.last_line == null) {\n location.last_line = location.first_line;\n }\n - if ((_ref2 = location.last_column) == null) {\n + if (location.last_column == null) {\n location.last_column = location.first_column;\n }\n error = new SyntaxError(message);\n error.location = location;\n + error.toString = syntaxErrorToString;\n + error.stack = error.toString();\n throw error;\n };\n \n - exports.prettyErrorMessage = function(error, fileName, code, useColors) {\n - var codeLine, colorize, end, first_column, first_line, last_column, last_line, marker, message, start, _ref1;\n - if (!error.location) {\n - return error.stack || ("" + error);\n + exports.updateSyntaxError = function(error, code, filename) {\n + if (error.toString === syntaxErrorToString) {\n + error.code || (error.code = code);\n + error.filename || (error.filename = filename);\n + error.stack = error.toString();\n + }\n + return error;\n + };\n +\n + syntaxErrorToString = function() {\n + var codeLine, colorize, colorsEnabled, end, filename, first_column, first_line, last_column, last_line, marker, start, _ref1, _ref2;\n + if (!(this.code && this.location)) {\n + return Error.prototype.toString.call(this);\n }\n - _ref1 = error.location, first_line = _ref1.first_line, first_column = _ref1.first_column, last_line = _ref1.last_line, last_column = _ref1.last_column;\n - codeLine = code.split(\'\\n\')[first_line];\n + _ref1 = this.location, first_line = _ref1.first_line, first_column = _ref1.first_column, last_line = _ref1.last_line, last_column = _ref1.last_column;\n + if (last_line == null) {\n + last_line = first_line;\n + }\n + if (last_column == null) {\n + last_column = first_column;\n + }\n + filename = this.filename || \'[stdin]\';\n + codeLine = this.code.split(\'\\n\')[first_line];\n start = first_column;\n end = first_line === last_line ? last_column + 1 : codeLine.length;\n marker = repeat(\' \', start) + repeat(\'^\', end - start);\n - if (useColors) {\n + if (typeof process !== "undefined" && process !== null) {\n + colorsEnabled = process.stdout.isTTY && !process.env.NODE_DISABLE_COLORS;\n + }\n + if ((_ref2 = this.colorful) != null ? _ref2 : colorsEnabled) {\n colorize = function(str) {\n return "\\x1B[1;31m" + str + "\\x1B[0m";\n };\n codeLine = codeLine.slice(0, start) + colorize(codeLine.slice(start, end)) + codeLine.slice(end);\n marker = colorize(marker);\n }\n - message = "" + fileName + ":" + (first_line + 1) + ":" + (first_column + 1) + ": error: " + error.message + "\\n" + codeLine + "\\n" + marker;\n - return message;\n + return "" + filename + ":" + (first_line + 1) + ":" + (first_column + 1) + ": error: " + this.message + "\\n" + codeLine + "\\n" + marker;\n };\n \n \n @@ -3702,10 +3770,10 @@ define(\'ace/mode/coffee/parser\', [\'require\', \'exports\', \'module\' ], func \n var parser = {trace: function trace() { },\n yy: {},\n -symbols_: {"error":2,"Root":3,"Body":4,"Block":5,"TERMINATOR":6,"Line":7,"Expression":8,"Statement":9,"Return":10,"Comment":11,"STATEMENT":12,"Value":13,"Invocation":14,"Code":15,"Operation":16,"Assign":17,"If":18,"Try":19,"While":20,"For":21,"Switch":22,"Class":23,"Throw":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"DEBUGGER":35,"UNDEFINED":36,"NULL":37,"BOOL":38,"Assignable":39,"=":40,"AssignObj":41,"ObjAssignable":42,":":43,"ThisProperty":44,"RETURN":45,"HERECOMMENT":46,"PARAM_START":47,"ParamList":48,"PARAM_END":49,"FuncGlyph":50,"->":51,"=>":52,"OptComma":53,",":54,"Param":55,"ParamVar":56,"...":57,"Array":58,"Object":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Parenthetical":63,"Range":64,"This":65,".":66,"?.":67,"::":68,"?::":69,"Index":70,"INDEX_START":71,"IndexValue":72,"INDEX_END":73,"INDEX_SOAK":74,"Slice":75,"{":76,"AssignList":77,"}":78,"CLASS":79,"EXTENDS":80,"OptFuncExist":81,"Arguments":82,"SUPER":83,"FUNC_EXIST":84,"CALL_START":85,"CALL_END":86,"ArgList":87,"THIS":88,"@":89,"[":90,"]":91,"RangeDots":92,"..":93,"Arg":94,"SimpleArgs":95,"TRY":96,"Catch":97,"FINALLY":98,"CATCH":99,"THROW":100,"(":101,")":102,"WhileSource":103,"WHILE":104,"WHEN":105,"UNTIL":106,"Loop":107,"LOOP":108,"ForBody":109,"FOR":110,"ForStart":111,"ForSource":112,"ForVariables":113,"OWN":114,"ForValue":115,"FORIN":116,"FOROF":117,"BY":118,"SWITCH":119,"Whens":120,"ELSE":121,"When":122,"LEADING_WHEN":123,"IfBlock":124,"IF":125,"POST_IF":126,"UNARY":127,"-":128,"+":129,"--":130,"++":131,"?":132,"MATH":133,"SHIFT":134,"COMPARE":135,"LOGIC":136,"RELATION":137,"COMPOUND_ASSIGN":138,"$accept":0,"$end":1},\n -terminals_: {2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",69:"?::",71:"INDEX_START",73:"INDEX_END",74:"INDEX_SOAK",76:"{",78:"}",79:"CLASS",80:"EXTENDS",83:"SUPER",84:"FUNC_EXIST",85:"CALL_START",86:"CALL_END",88:"THIS",89:"@",90:"[",91:"]",93:"..",96:"TRY",98:"FINALLY",99:"CATCH",100:"THROW",101:"(",102:")",104:"WHILE",105:"WHEN",106:"UNTIL",108:"LOOP",110:"FOR",114:"OWN",116:"FORIN",117:"FOROF",118:"BY",119:"SWITCH",121:"ELSE",123:"LEADING_WHEN",125:"IF",126:"POST_IF",127:"UNARY",128:"-",129:"+",130:"--",131:"++",132:"?",133:"MATH",134:"SHIFT",135:"COMPARE",136:"LOGIC",137:"RELATION",138:"COMPOUND_ASSIGN"},\n -productions_: [0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[19,2],[19,3],[19,4],[19,5],[97,3],[97,3],[97,2],[24,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[20,2],[20,2],[20,2],[20,1],[107,2],[107,2],[21,2],[21,2],[21,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[22,5],[22,7],[22,4],[22,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,4],[16,3]],\n -performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\n +symbols_: {"error":2,"Root":3,"Body":4,"Line":5,"TERMINATOR":6,"Expression":7,"Statement":8,"Return":9,"Comment":10,"STATEMENT":11,"Value":12,"Invocation":13,"Code":14,"Operation":15,"Assign":16,"If":17,"Try":18,"While":19,"For":20,"Switch":21,"Class":22,"Throw":23,"Block":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"DEBUGGER":35,"UNDEFINED":36,"NULL":37,"BOOL":38,"Assignable":39,"=":40,"AssignObj":41,"ObjAssignable":42,":":43,"ThisProperty":44,"RETURN":45,"HERECOMMENT":46,"PARAM_START":47,"ParamList":48,"PARAM_END":49,"FuncGlyph":50,"->":51,"=>":52,"OptComma":53,",":54,"Param":55,"ParamVar":56,"...":57,"Array":58,"Object":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Parenthetical":63,"Range":64,"This":65,".":66,"?.":67,"::":68,"?::":69,"Index":70,"INDEX_START":71,"IndexValue":72,"INDEX_END":73,"INDEX_SOAK":74,"Slice":75,"{":76,"AssignList":77,"}":78,"CLASS":79,"EXTENDS":80,"OptFuncExist":81,"Arguments":82,"SUPER":83,"FUNC_EXIST":84,"CALL_START":85,"CALL_END":86,"ArgList":87,"THIS":88,"@":89,"[":90,"]":91,"RangeDots":92,"..":93,"Arg":94,"SimpleArgs":95,"TRY":96,"Catch":97,"FINALLY":98,"CATCH":99,"THROW":100,"(":101,")":102,"WhileSource":103,"WHILE":104,"WHEN":105,"UNTIL":106,"Loop":107,"LOOP":108,"ForBody":109,"FOR":110,"ForStart":111,"ForSource":112,"ForVariables":113,"OWN":114,"ForValue":115,"FORIN":116,"FOROF":117,"BY":118,"SWITCH":119,"Whens":120,"ELSE":121,"When":122,"LEADING_WHEN":123,"IfBlock":124,"IF":125,"POST_IF":126,"UNARY":127,"-":128,"+":129,"--":130,"++":131,"?":132,"MATH":133,"SHIFT":134,"COMPARE":135,"LOGIC":136,"RELATION":137,"COMPOUND_ASSIGN":138,"$accept":0,"$end":1},\n +terminals_: {2:"error",6:"TERMINATOR",11:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",69:"?::",71:"INDEX_START",73:"INDEX_END",74:"INDEX_SOAK",76:"{",78:"}",79:"CLASS",80:"EXTENDS",83:"SUPER",84:"FUNC_EXIST",85:"CALL_START",86:"CALL_END",88:"THIS",89:"@",90:"[",91:"]",93:"..",96:"TRY",98:"FINALLY",99:"CATCH",100:"THROW",101:"(",102:")",104:"WHILE",105:"WHEN",106:"UNTIL",108:"LOOP",110:"FOR",114:"OWN",116:"FORIN",117:"FOROF",118:"BY",119:"SWITCH",121:"ELSE",123:"LEADING_WHEN",125:"IF",126:"POST_IF",127:"UNARY",128:"-",129:"+",130:"--",131:"++",132:"?",133:"MATH",134:"SHIFT",135:"COMPARE",136:"LOGIC",137:"RELATION",138:"COMPOUND_ASSIGN"},\n +productions_: [0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[8,1],[8,1],[8,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[24,2],[24,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[16,3],[16,4],[16,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[9,2],[9,1],[10,1],[14,5],[14,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[12,1],[12,1],[12,1],[12,1],[12,1],[62,2],[62,2],[62,2],[62,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,6],[22,1],[22,2],[22,3],[22,4],[22,2],[22,3],[22,4],[22,5],[13,3],[13,3],[13,1],[13,2],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[18,2],[18,3],[18,4],[18,5],[97,3],[97,3],[97,2],[23,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[19,2],[19,2],[19,2],[19,1],[107,2],[107,2],[20,2],[20,2],[20,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[21,5],[21,7],[21,4],[21,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,5],[17,1],[17,3],[17,3],[17,3],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,5],[15,4],[15,3]],\n +performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n \n var $0 = $$.length - 1;\n switch (yystate) {\n @@ -3713,13 +3781,13 @@ case 1:return this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Block);\n break;\n case 2:return this.$ = $$[$0];\n break;\n -case 3:return this.$ = $$[$0-1];\n +case 3:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(yy.Block.wrap([$$[$0]]));\n break;\n -case 4:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(yy.Block.wrap([$$[$0]]));\n +case 4:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].push($$[$0]));\n break;\n -case 5:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].push($$[$0]));\n +case 5:this.$ = $$[$0-1];\n break;\n -case 6:this.$ = $$[$0-1];\n +case 6:this.$ = $$[$0];\n break;\n case 7:this.$ = $$[$0];\n break;\n @@ -3727,9 +3795,9 @@ case 8:this.$ = $$[$0];\n break;\n case 9:this.$ = $$[$0];\n break;\n -case 10:this.$ = $$[$0];\n +case 10:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n break;\n -case 11:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n +case 11:this.$ = $$[$0];\n break;\n case 12:this.$ = $$[$0];\n break;\n @@ -3753,43 +3821,43 @@ case 21:this.$ = $$[$0];\n break;\n case 22:this.$ = $$[$0];\n break;\n -case 23:this.$ = $$[$0];\n +case 23:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Block);\n break;\n -case 24:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Block);\n +case 24:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);\n break;\n -case 25:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);\n +case 25:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n break;\n case 26:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n break;\n case 27:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n break;\n -case 28:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n +case 28:this.$ = $$[$0];\n break;\n -case 29:this.$ = $$[$0];\n +case 29:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n break;\n case 30:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n break;\n case 31:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n break;\n -case 32:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));\n +case 32:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Undefined);\n break;\n -case 33:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Undefined);\n +case 33:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Null);\n break;\n -case 34:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Null);\n +case 34:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Bool($$[$0]));\n break;\n -case 35:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Bool($$[$0]));\n +case 35:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0]));\n break;\n -case 36:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0]));\n +case 36:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0]));\n break;\n -case 37:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0]));\n +case 37:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1]));\n break;\n -case 38:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1]));\n +case 38:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n -case 39:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n +case 39:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-2])(new yy.Value($$[$0-2])), $$[$0], \'object\'));\n break;\n -case 40:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-2])(new yy.Value($$[$0-2])), $$[$0], \'object\'));\n +case 40:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-4])(new yy.Value($$[$0-4])), $$[$0-1], \'object\'));\n break;\n -case 41:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-4])(new yy.Value($$[$0-4])), $$[$0-1], \'object\'));\n +case 41:this.$ = $$[$0];\n break;\n case 42:this.$ = $$[$0];\n break;\n @@ -3797,41 +3865,41 @@ case 43:this.$ = $$[$0];\n break;\n case 44:this.$ = $$[$0];\n break;\n -case 45:this.$ = $$[$0];\n +case 45:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Return($$[$0]));\n break;\n -case 46:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Return($$[$0]));\n +case 46:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Return);\n break;\n -case 47:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Return);\n +case 47:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Comment($$[$0]));\n break;\n -case 48:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Comment($$[$0]));\n +case 48:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Code($$[$0-3], $$[$0], $$[$0-1]));\n break;\n -case 49:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Code($$[$0-3], $$[$0], $$[$0-1]));\n +case 49:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Code([], $$[$0], $$[$0-1]));\n break;\n -case 50:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Code([], $$[$0], $$[$0-1]));\n +case 50:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(\'func\');\n break;\n -case 51:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(\'func\');\n +case 51:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(\'boundfunc\');\n break;\n -case 52:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(\'boundfunc\');\n +case 52:this.$ = $$[$0];\n break;\n case 53:this.$ = $$[$0];\n break;\n -case 54:this.$ = $$[$0];\n +case 54:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);\n break;\n -case 55:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);\n +case 55:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);\n break;\n -case 56:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);\n +case 56:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));\n break;\n -case 57:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));\n +case 57:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));\n break;\n -case 58:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));\n +case 58:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));\n break;\n -case 59:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));\n +case 59:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Param($$[$0]));\n break;\n -case 60:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Param($$[$0]));\n +case 60:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Param($$[$0-1], null, true));\n break;\n -case 61:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Param($$[$0-1], null, true));\n +case 61:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Param($$[$0-2], $$[$0]));\n break;\n -case 62:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Param($$[$0-2], $$[$0]));\n +case 62:this.$ = $$[$0];\n break;\n case 63:this.$ = $$[$0];\n break;\n @@ -3839,319 +3907,319 @@ case 64:this.$ = $$[$0];\n break;\n case 65:this.$ = $$[$0];\n break;\n -case 66:this.$ = $$[$0];\n +case 66:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Splat($$[$0-1]));\n break;\n -case 67:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Splat($$[$0-1]));\n +case 67:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n -case 68:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n +case 68:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].add($$[$0]));\n break;\n -case 69:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].add($$[$0]));\n +case 69:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value($$[$0-1], [].concat($$[$0])));\n break;\n -case 70:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value($$[$0-1], [].concat($$[$0])));\n +case 70:this.$ = $$[$0];\n break;\n case 71:this.$ = $$[$0];\n break;\n -case 72:this.$ = $$[$0];\n +case 72:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n case 73:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n -case 74:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n +case 74:this.$ = $$[$0];\n break;\n -case 75:this.$ = $$[$0];\n +case 75:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n case 76:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n case 77:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n -case 78:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n -break;\n -case 79:this.$ = $$[$0];\n +case 78:this.$ = $$[$0];\n break;\n -case 80:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0]));\n +case 79:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0]));\n break;\n -case 81:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0], \'soak\'));\n +case 80:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0], \'soak\'));\n break;\n -case 82:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal(\'prototype\'))), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);\n +case 81:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal(\'prototype\'))), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);\n break;\n -case 83:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal(\'prototype\'), \'soak\')), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);\n +case 82:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal(\'prototype\'), \'soak\')), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);\n break;\n -case 84:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Access(new yy.Literal(\'prototype\')));\n +case 83:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Access(new yy.Literal(\'prototype\')));\n break;\n -case 85:this.$ = $$[$0];\n +case 84:this.$ = $$[$0];\n break;\n -case 86:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);\n +case 85:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);\n break;\n -case 87:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(yy.extend($$[$0], {\n +case 86:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(yy.extend($$[$0], {\n soak: true\n }));\n break;\n -case 88:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Index($$[$0]));\n +case 87:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Index($$[$0]));\n break;\n -case 89:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Slice($$[$0]));\n +case 88:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Slice($$[$0]));\n break;\n -case 90:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Obj($$[$0-2], $$[$0-3].generated));\n +case 89:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Obj($$[$0-2], $$[$0-3].generated));\n break;\n -case 91:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);\n +case 90:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);\n break;\n -case 92:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);\n +case 91:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);\n break;\n -case 93:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));\n +case 92:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));\n break;\n -case 94:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));\n +case 93:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));\n break;\n -case 95:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));\n +case 94:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));\n break;\n -case 96:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Class);\n +case 95:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Class);\n break;\n -case 97:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class(null, null, $$[$0]));\n +case 96:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class(null, null, $$[$0]));\n break;\n -case 98:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class(null, $$[$0]));\n +case 97:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class(null, $$[$0]));\n break;\n -case 99:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class(null, $$[$0-1], $$[$0]));\n +case 98:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class(null, $$[$0-1], $$[$0]));\n break;\n -case 100:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class($$[$0]));\n +case 99:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class($$[$0]));\n break;\n -case 101:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class($$[$0-1], null, $$[$0]));\n +case 100:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class($$[$0-1], null, $$[$0]));\n break;\n -case 102:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class($$[$0-2], $$[$0]));\n +case 101:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class($$[$0-2], $$[$0]));\n break;\n -case 103:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Class($$[$0-3], $$[$0-1], $$[$0]));\n +case 102:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Class($$[$0-3], $$[$0-1], $$[$0]));\n +break;\n +case 103:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));\n break;\n case 104:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));\n break;\n -case 105:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));\n +case 105:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Call(\'super\', [new yy.Splat(new yy.Literal(\'arguments\'))]));\n break;\n -case 106:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Call(\'super\', [new yy.Splat(new yy.Literal(\'arguments\'))]));\n +case 106:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Call(\'super\', $$[$0]));\n break;\n -case 107:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Call(\'super\', $$[$0]));\n +case 107:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(false);\n break;\n -case 108:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(false);\n +case 108:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(true);\n break;\n -case 109:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(true);\n +case 109:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([]);\n break;\n -case 110:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([]);\n +case 110:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);\n break;\n -case 111:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);\n +case 111:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal(\'this\')));\n break;\n case 112:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal(\'this\')));\n break;\n -case 113:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal(\'this\')));\n +case 113:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value(yy.addLocationDataFn(_$[$0-1])(new yy.Literal(\'this\')), [yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))], \'this\'));\n break;\n -case 114:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value(yy.addLocationDataFn(_$[$0-1])(new yy.Literal(\'this\')), [yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))], \'this\'));\n +case 114:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Arr([]));\n break;\n -case 115:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Arr([]));\n +case 115:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Arr($$[$0-2]));\n break;\n -case 116:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Arr($$[$0-2]));\n +case 116:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(\'inclusive\');\n break;\n -case 117:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(\'inclusive\');\n +case 117:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(\'exclusive\');\n break;\n -case 118:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(\'exclusive\');\n +case 118:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]));\n break;\n -case 119:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]));\n +case 119:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Range($$[$0-2], $$[$0], $$[$0-1]));\n break;\n -case 120:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Range($$[$0-2], $$[$0], $$[$0-1]));\n +case 120:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range($$[$0-1], null, $$[$0]));\n break;\n -case 121:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range($$[$0-1], null, $$[$0]));\n +case 121:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range(null, $$[$0], $$[$0-1]));\n break;\n -case 122:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range(null, $$[$0], $$[$0-1]));\n +case 122:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Range(null, null, $$[$0]));\n break;\n -case 123:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Range(null, null, $$[$0]));\n +case 123:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);\n break;\n -case 124:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);\n +case 124:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));\n break;\n -case 125:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));\n +case 125:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));\n break;\n -case 126:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));\n +case 126:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);\n break;\n -case 127:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);\n +case 127:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));\n break;\n -case 128:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));\n +case 128:this.$ = $$[$0];\n break;\n case 129:this.$ = $$[$0];\n break;\n case 130:this.$ = $$[$0];\n break;\n -case 131:this.$ = $$[$0];\n -break;\n -case 132:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([].concat($$[$0-2], $$[$0]));\n +case 131:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([].concat($$[$0-2], $$[$0]));\n break;\n -case 133:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Try($$[$0]));\n +case 132:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Try($$[$0]));\n break;\n -case 134:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]));\n +case 133:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]));\n break;\n -case 135:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Try($$[$0-2], null, null, $$[$0]));\n +case 134:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Try($$[$0-2], null, null, $$[$0]));\n break;\n -case 136:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]));\n +case 135:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]));\n break;\n -case 137:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-1], $$[$0]]);\n +case 136:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-1], $$[$0]]);\n break;\n -case 138:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]);\n +case 137:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]);\n break;\n -case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([null, $$[$0]]);\n +case 138:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([null, $$[$0]]);\n break;\n -case 140:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));\n +case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));\n break;\n -case 141:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));\n +case 140:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));\n break;\n -case 142:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));\n +case 141:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));\n break;\n -case 143:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));\n +case 142:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));\n break;\n -case 144:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {\n +case 143:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {\n guard: $$[$0]\n }));\n break;\n -case 145:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {\n +case 144:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {\n invert: true\n }));\n break;\n -case 146:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {\n +case 145:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {\n invert: true,\n guard: $$[$0]\n }));\n break;\n -case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));\n +case 146:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));\n +break;\n +case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));\n break;\n case 148:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));\n break;\n -case 149:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));\n +case 149:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);\n break;\n -case 150:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);\n +case 150:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal(\'true\'))).addBody($$[$0]));\n break;\n -case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal(\'true\'))).addBody($$[$0]));\n +case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal(\'true\'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));\n break;\n -case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal(\'true\'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));\n +case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));\n break;\n case 153:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));\n break;\n -case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));\n +case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));\n break;\n -case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));\n -break;\n -case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({\n +case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({\n source: yy.addLocationDataFn(_$[$0])(new yy.Value($$[$0]))\n });\n break;\n -case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {\n +case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {\n $$[$0].own = $$[$0-1].own;\n $$[$0].name = $$[$0-1][0];\n $$[$0].index = $$[$0-1][1];\n return $$[$0];\n }()));\n break;\n -case 158:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);\n +case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);\n break;\n -case 159:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {\n +case 158:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {\n $$[$0].own = true;\n return $$[$0];\n }()));\n break;\n +case 159:this.$ = $$[$0];\n +break;\n case 160:this.$ = $$[$0];\n break;\n -case 161:this.$ = $$[$0];\n +case 161:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n case 162:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n break;\n -case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));\n +case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);\n break;\n -case 164:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);\n +case 164:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);\n break;\n -case 165:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);\n -break;\n -case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({\n +case 165:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({\n source: $$[$0]\n });\n break;\n -case 167:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({\n +case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({\n source: $$[$0],\n object: true\n });\n break;\n -case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({\n +case 167:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({\n source: $$[$0-2],\n guard: $$[$0]\n });\n break;\n -case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({\n +case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({\n source: $$[$0-2],\n guard: $$[$0],\n object: true\n });\n break;\n -case 170:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({\n +case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({\n source: $$[$0-2],\n step: $$[$0]\n });\n break;\n -case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({\n +case 170:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({\n source: $$[$0-4],\n guard: $$[$0-2],\n step: $$[$0]\n });\n break;\n -case 172:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({\n +case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({\n source: $$[$0-4],\n step: $$[$0-2],\n guard: $$[$0]\n });\n break;\n -case 173:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));\n +case 172:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));\n break;\n -case 174:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));\n +case 173:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));\n break;\n -case 175:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));\n +case 174:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));\n break;\n -case 176:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));\n +case 175:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));\n break;\n -case 177:this.$ = $$[$0];\n +case 176:this.$ = $$[$0];\n break;\n -case 178:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));\n +case 177:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));\n break;\n -case 179:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);\n +case 178:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);\n break;\n -case 180:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);\n +case 179:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);\n break;\n -case 181:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {\n +case 180:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {\n type: $$[$0-2]\n }));\n break;\n -case 182:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {\n +case 181:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {\n type: $$[$0-2]\n - })));\n + }))));\n break;\n -case 183:this.$ = $$[$0];\n +case 182:this.$ = $$[$0];\n break;\n -case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));\n +case 183:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));\n break;\n -case 185:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {\n +case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {\n type: $$[$0-1],\n statement: true\n }));\n break;\n -case 186:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {\n +case 185:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {\n type: $$[$0-1],\n statement: true\n }));\n break;\n -case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));\n +case 186:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));\n +break;\n +case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'-\', $$[$0]));\n break;\n -case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'-\', $$[$0]));\n +case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'+\', $$[$0]));\n break;\n -case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'+\', $$[$0]));\n +case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'--\', $$[$0]));\n break;\n -case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'--\', $$[$0]));\n +case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'++\', $$[$0]));\n break;\n -case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'++\', $$[$0]));\n +case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'--\', $$[$0-1], null, true));\n break;\n -case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'--\', $$[$0-1], null, true));\n +case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'++\', $$[$0-1], null, true));\n break;\n -case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op(\'++\', $$[$0-1], null, true));\n +case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));\n break;\n -case 194:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));\n +case 194:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op(\'+\', $$[$0-2], $$[$0]));\n break;\n -case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op(\'+\', $$[$0-2], $$[$0]));\n +case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op(\'-\', $$[$0-2], $$[$0]));\n break;\n -case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op(\'-\', $$[$0-2], $$[$0]));\n +case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));\n break;\n case 197:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));\n break;\n @@ -4159,9 +4227,7 @@ case 198:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[ break;\n case 199:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));\n break;\n -case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));\n -break;\n -case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {\n +case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {\n if ($$[$0-1].charAt(0) === \'!\') {\n return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();\n } else {\n @@ -4169,36 +4235,86 @@ case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {\n }\n }()));\n break;\n -case 202:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));\n +case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));\n break;\n -case 203:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));\n +case 202:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));\n break;\n -case 204:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));\n +case 203:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));\n break;\n -case 205:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));\n +case 204:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));\n break;\n }\n },\n -table: [{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,12],74:[1,101],78:[2,12],81:92,84:[1,94],85:[2,108],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,13],74:[1,101],78:[2,13],81:102,84:[1,94],85:[2,108],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,11],6:[2,11],26:[2,11],102:[2,11],104:[2,11],106:[2,11],110:[2,11],126:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,104],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],82:105,84:[2,106],85:[1,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{6:[2,55],25:[2,55],27:110,28:[1,73],44:111,48:107,49:[2,55],54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{5:116,25:[1,5]},{8:117,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:119,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:120,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:121,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{13:122,14:123,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,58:47,59:48,61:125,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],80:[1,129],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],130:[1,126],131:[1,127],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[1,128]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],121:[1,130],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{5:131,25:[1,5]},{5:132,25:[1,5]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{5:133,25:[1,5]},{8:134,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,135],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,96],5:136,6:[2,96],13:122,14:123,25:[1,5],26:[2,96],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:124,44:63,49:[2,96],54:[2,96],57:[2,96],58:47,59:48,61:138,63:25,64:26,65:27,73:[2,96],76:[1,70],78:[2,96],80:[1,137],83:[1,28],86:[2,96],88:[1,58],89:[1,59],90:[1,57],91:[2,96],93:[2,96],101:[1,56],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{8:139,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,47],6:[2,47],8:140,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,47],103:39,104:[2,47],106:[2,47],107:40,108:[1,67],109:41,110:[2,47],111:69,119:[1,42],124:37,125:[1,64],126:[2,47],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],78:[2,48],102:[2,48],104:[2,48],106:[2,48],110:[2,48],126:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],69:[2,35],71:[2,35],73:[2,35],74:[2,35],78:[2,35],84:[2,35],85:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],104:[2,35],105:[2,35],106:[2,35],110:[2,35],118:[2,35],126:[2,35],128:[2,35],129:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35],137:[2,35]},{4:141,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,142],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:143,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],27:149,28:[1,73],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[2,71],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[2,71]},{8:150,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:151,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:152,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:153,8:154,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{27:159,28:[1,73],44:160,58:161,59:162,64:155,76:[1,70],89:[1,114],90:[1,57],113:156,114:[1,157],115:158},{112:163,116:[1,164],117:[1,165]},{6:[2,91],11:169,25:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:166,78:[2,91],89:[1,114]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],80:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],116:[2,26],117:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26],138:[2,26]},{1:[2,6],6:[2,6],7:173,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,6],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{6:[1,74],26:[1,174]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],104:[2,194],105:[2,194],106:[2,194],110:[2,194],118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{8:175,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:176,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:177,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:178,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:179,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:180,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:181,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:182,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{8:183,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{82:184,85:[1,106]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{85:[2,109]},{27:185,28:[1,73]},{27:186,28:[1,73]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],27:187,28:[1,73],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{27:188,28:[1,73]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{8:190,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,194],58:47,59:48,61:36,63:25,64:26,65:27,72:189,75:191,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],92:192,93:[1,193],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{70:195,71:[1,100],74:[1,101]},{82:196,85:[1,106]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{6:[1,198],8:197,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,199],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],49:[2,107],54:[2,107],57:[2,107],66:[2,107],67:[2,107],68:[2,107],69:[2,107],71:[2,107],73:[2,107],74:[2,107],78:[2,107],84:[2,107],85:[2,107],86:[2,107],91:[2,107],93:[2,107],102:[2,107],104:[2,107],105:[2,107],106:[2,107],110:[2,107],118:[2,107],126:[2,107],128:[2,107],129:[2,107],132:[2,107],133:[2,107],134:[2,107],135:[2,107],136:[2,107],137:[2,107]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[1,200],87:201,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],49:[1,203],53:205,54:[1,204]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,207],49:[2,60],54:[2,60],57:[1,206]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:149,28:[1,73]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],73:[2,50],78:[2,50],86:[2,50],91:[2,50],93:[2,50],102:[2,50],104:[2,50],105:[2,50],106:[2,50],110:[2,50],118:[2,50],126:[2,50],128:[2,50],129:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50],137:[2,50]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:87,104:[2,187],105:[2,187],106:[2,187],109:88,110:[2,187],111:69,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,78],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:87,104:[2,188],105:[2,188],106:[2,188],109:88,110:[2,188],111:69,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,78],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],73:[2,189],78:[2,189],86:[2,189],91:[2,189],93:[2,189],102:[2,189],103:87,104:[2,189],105:[2,189],106:[2,189],109:88,110:[2,189],111:69,118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[1,78],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,190],74:[2,72],78:[2,190],84:[2,72],85:[2,72],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:92,84:[1,94],85:[2,108]},{62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:102,84:[1,94],85:[2,108]},{66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],74:[2,75],84:[2,75],85:[2,75]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,191],74:[2,72],78:[2,191],84:[2,72],85:[2,72],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{6:[1,210],8:208,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,209],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:211,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:212,25:[1,5],125:[1,213]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],97:214,98:[1,215],99:[1,216],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{25:[1,217],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{120:218,122:219,123:[1,220]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],104:[2,97],105:[2,97],106:[2,97],110:[2,97],118:[2,97],126:[2,97],128:[2,97],129:[2,97],132:[2,97],133:[2,97],134:[2,97],135:[2,97],136:[2,97],137:[2,97]},{8:221,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,100],5:222,6:[2,100],25:[1,5],26:[2,100],49:[2,100],54:[2,100],57:[2,100],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,100],74:[2,72],78:[2,100],80:[1,223],84:[2,72],85:[2,72],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],73:[2,140],78:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],103:87,104:[2,140],105:[2,140],106:[2,140],109:88,110:[2,140],111:69,118:[2,140],126:[2,140],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,46],6:[2,46],26:[2,46],102:[2,46],103:87,104:[2,46],106:[2,46],109:88,110:[2,46],111:69,126:[2,46],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,74],102:[1,224]},{4:225,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,129],25:[2,129],54:[2,129],57:[1,227],91:[2,129],92:226,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{6:[2,53],25:[2,53],53:228,54:[1,229],91:[2,53]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:230,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,130],25:[2,130],26:[2,130],54:[2,130],86:[2,130],91:[2,130]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],43:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],80:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114],138:[2,114]},{5:231,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:87,104:[1,65],105:[1,232],106:[1,66],109:88,110:[1,68],111:69,118:[2,143],126:[2,143],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:87,104:[1,65],105:[1,233],106:[1,66],109:88,110:[1,68],111:69,118:[2,145],126:[2,145],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],104:[2,151],105:[2,151],106:[2,151],110:[2,151],118:[2,151],126:[2,151],128:[2,151],129:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151],137:[2,151]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],103:87,104:[1,65],105:[2,152],106:[1,66],109:88,110:[1,68],111:69,118:[2,152],126:[2,152],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{116:[2,158],117:[2,158]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],113:234,115:158},{54:[1,235],116:[2,164],117:[2,164]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{54:[2,163],116:[2,163],117:[2,163]},{1:[2,157],6:[2,157],25:[2,157],26:[2,157],49:[2,157],54:[2,157],57:[2,157],73:[2,157],78:[2,157],86:[2,157],91:[2,157],93:[2,157],102:[2,157],104:[2,157],105:[2,157],106:[2,157],110:[2,157],118:[2,157],126:[2,157],128:[2,157],129:[2,157],132:[2,157],133:[2,157],134:[2,157],135:[2,157],136:[2,157],137:[2,157]},{8:236,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:237,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],53:238,54:[1,239],78:[2,53]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],43:[1,240],54:[2,39],78:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],78:[2,45]},{1:[2,5],6:[2,5],26:[2,5],102:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],73:[2,25],78:[2,25],86:[2,25],91:[2,25],93:[2,25],98:[2,25],99:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],118:[2,25],121:[2,25],123:[2,25],126:[2,25],128:[2,25],129:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:87,104:[2,195],105:[2,195],106:[2,195],109:88,110:[2,195],111:69,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,78],133:[1,81],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:87,104:[2,196],105:[2,196],106:[2,196],109:88,110:[2,196],111:69,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,78],133:[1,81],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:87,104:[2,197],105:[2,197],106:[2,197],109:88,110:[2,197],111:69,118:[2,197],126:[2,197],128:[2,197],129:[2,197],132:[1,78],133:[2,197],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:87,104:[2,198],105:[2,198],106:[2,198],109:88,110:[2,198],111:69,118:[2,198],126:[2,198],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[2,198],135:[2,198],136:[2,198],137:[2,198]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:87,104:[2,199],105:[2,199],106:[2,199],109:88,110:[2,199],111:69,118:[2,199],126:[2,199],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,199],136:[2,199],137:[1,85]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:87,104:[2,200],105:[2,200],106:[2,200],109:88,110:[2,200],111:69,118:[2,200],126:[2,200],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[2,200],137:[1,85]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:87,104:[2,201],105:[2,201],106:[2,201],109:88,110:[2,201],111:69,118:[2,201],126:[2,201],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,201],136:[2,201],137:[2,201]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:87,104:[1,65],105:[2,186],106:[1,66],109:88,110:[1,68],111:69,118:[2,186],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:87,104:[1,65],105:[2,185],106:[1,66],109:88,110:[1,68],111:69,118:[2,185],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{73:[1,241]},{57:[1,194],73:[2,88],92:242,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{73:[2,89]},{8:243,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,123],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{12:[2,118],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],73:[2,118],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{1:[2,87],6:[2,87],25:[2,87],26:[2,87],40:[2,87],49:[2,87],54:[2,87],57:[2,87],66:[2,87],67:[2,87],68:[2,87],69:[2,87],71:[2,87],73:[2,87],74:[2,87],78:[2,87],80:[2,87],84:[2,87],85:[2,87],86:[2,87],91:[2,87],93:[2,87],102:[2,87],104:[2,87],105:[2,87],106:[2,87],110:[2,87],118:[2,87],126:[2,87],128:[2,87],129:[2,87],130:[2,87],131:[2,87],132:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],84:[2,105],85:[2,105],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:87,104:[2,36],105:[2,36],106:[2,36],109:88,110:[2,36],111:69,118:[2,36],126:[2,36],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:244,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:245,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{6:[2,53],25:[2,53],53:246,54:[1,229],86:[2,53]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],57:[1,247],86:[2,129],91:[2,129],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{50:248,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:110,28:[1,73],44:111,55:249,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[1,250],25:[1,251]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:252,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],103:87,104:[2,202],105:[2,202],106:[2,202],109:88,110:[2,202],111:69,118:[2,202],126:[2,202],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:253,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:254,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,205],6:[2,205],25:[2,205],26:[2,205],49:[2,205],54:[2,205],57:[2,205],73:[2,205],78:[2,205],86:[2,205],91:[2,205],93:[2,205],102:[2,205],103:87,104:[2,205],105:[2,205],106:[2,205],109:88,110:[2,205],111:69,118:[2,205],126:[2,205],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],104:[2,184],105:[2,184],106:[2,184],110:[2,184],118:[2,184],126:[2,184],128:[2,184],129:[2,184],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184],137:[2,184]},{8:255,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],98:[1,256],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{5:257,25:[1,5]},{5:260,25:[1,5],27:258,28:[1,73],59:259,76:[1,70]},{120:261,122:219,123:[1,220]},{26:[1,262],121:[1,263],122:264,123:[1,220]},{26:[2,177],121:[2,177],123:[2,177]},{8:266,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],95:265,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,98],5:267,6:[2,98],25:[1,5],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],103:87,104:[1,65],105:[2,98],106:[1,66],109:88,110:[1,68],111:69,118:[2,98],126:[2,98],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],104:[2,101],105:[2,101],106:[2,101],110:[2,101],118:[2,101],126:[2,101],128:[2,101],129:[2,101],132:[2,101],133:[2,101],134:[2,101],135:[2,101],136:[2,101],137:[2,101]},{8:268,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{6:[1,74],26:[1,269]},{8:270,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,67],12:[2,118],25:[2,67],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],54:[2,67],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],91:[2,67],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{6:[1,272],25:[1,273],91:[1,271]},{6:[2,54],8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[2,54],88:[1,58],89:[1,59],90:[1,57],91:[2,54],94:274,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:275,54:[1,229]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{8:276,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:277,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{116:[2,159],117:[2,159]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],115:278},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:87,104:[2,166],105:[1,279],106:[2,166],109:88,110:[2,166],111:69,118:[1,280],126:[2,166],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:87,104:[2,167],105:[1,281],106:[2,167],109:88,110:[2,167],111:69,118:[2,167],126:[2,167],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,283],25:[1,284],78:[1,282]},{6:[2,54],11:169,25:[2,54],26:[2,54],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:285,42:168,44:172,46:[1,46],78:[2,54],89:[1,114]},{8:286,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,287],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{8:288,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,73:[2,121],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,122],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],103:87,104:[2,37],105:[2,37],106:[2,37],109:88,110:[2,37],111:69,118:[2,37],126:[2,37],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,289],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],86:[1,290]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],86:[2,67],91:[2,67]},{5:291,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:110,28:[1,73],44:111,55:292,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,55],25:[2,55],26:[2,55],27:110,28:[1,73],44:111,48:293,54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,294],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:87,104:[2,204],105:[2,204],106:[2,204],109:88,110:[2,204],111:69,118:[2,204],126:[2,204],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:295,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:296,25:[1,5]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{5:297,25:[1,5]},{5:298,25:[1,5]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],98:[2,139],102:[2,139],104:[2,139],105:[2,139],106:[2,139],110:[2,139],118:[2,139],126:[2,139],128:[2,139],129:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139],137:[2,139]},{26:[1,299],121:[1,300],122:264,123:[1,220]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{5:301,25:[1,5]},{26:[2,178],121:[2,178],123:[2,178]},{5:302,25:[1,5],54:[1,303]},{25:[2,131],54:[2,131],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],49:[2,99],54:[2,99],57:[2,99],73:[2,99],78:[2,99],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,102],5:304,6:[2,102],25:[1,5],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],103:87,104:[1,65],105:[2,102],106:[1,66],109:88,110:[1,68],111:69,118:[2,102],126:[2,102],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{102:[1,305]},{91:[1,306],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,116],6:[2,116],25:[2,116],26:[2,116],40:[2,116],49:[2,116],54:[2,116],57:[2,116],66:[2,116],67:[2,116],68:[2,116],69:[2,116],71:[2,116],73:[2,116],74:[2,116],78:[2,116],84:[2,116],85:[2,116],86:[2,116],91:[2,116],93:[2,116],102:[2,116],104:[2,116],105:[2,116],106:[2,116],110:[2,116],116:[2,116],117:[2,116],118:[2,116],126:[2,116],128:[2,116],129:[2,116],132:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],94:307,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:202,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,147],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:308,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[1,272],25:[1,273],26:[1,309]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:87,104:[1,65],105:[2,144],106:[1,66],109:88,110:[1,68],111:69,118:[2,144],126:[2,144],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],103:87,104:[1,65],105:[2,146],106:[1,66],109:88,110:[1,68],111:69,118:[2,146],126:[2,146],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{116:[2,165],117:[2,165]},{8:310,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:311,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:312,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,90],6:[2,90],25:[2,90],26:[2,90],40:[2,90],49:[2,90],54:[2,90],57:[2,90],66:[2,90],67:[2,90],68:[2,90],69:[2,90],71:[2,90],73:[2,90],74:[2,90],78:[2,90],84:[2,90],85:[2,90],86:[2,90],91:[2,90],93:[2,90],102:[2,90],104:[2,90],105:[2,90],106:[2,90],110:[2,90],116:[2,90],117:[2,90],118:[2,90],126:[2,90],128:[2,90],129:[2,90],132:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90]},{11:169,27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:313,42:168,44:172,46:[1,46],89:[1,114]},{6:[2,91],11:169,25:[2,91],26:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:314,89:[1,114]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:315,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,120],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],73:[2,38],78:[2,38],86:[2,38],91:[2,38],93:[2,38],102:[2,38],104:[2,38],105:[2,38],106:[2,38],110:[2,38],118:[2,38],126:[2,38],128:[2,38],129:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38],137:[2,38]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:316,54:[1,204]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],104:[2,203],105:[2,203],106:[2,203],110:[2,203],118:[2,203],126:[2,203],128:[2,203],129:[2,203],132:[2,203],133:[2,203],134:[2,203],135:[2,203],136:[2,203],137:[2,203]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[2,182],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{5:317,25:[1,5]},{26:[1,318]},{6:[1,319],26:[2,179],121:[2,179],123:[2,179]},{8:320,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],73:[2,103],78:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],66:[2,142],67:[2,142],68:[2,142],69:[2,142],71:[2,142],73:[2,142],74:[2,142],78:[2,142],84:[2,142],85:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],104:[2,142],105:[2,142],106:[2,142],110:[2,142],118:[2,142],126:[2,142],128:[2,142],129:[2,142],132:[2,142],133:[2,142],134:[2,142],135:[2,142],136:[2,142],137:[2,142]},{1:[2,119],6:[2,119],25:[2,119],26:[2,119],49:[2,119],54:[2,119],57:[2,119],66:[2,119],67:[2,119],68:[2,119],69:[2,119],71:[2,119],73:[2,119],74:[2,119],78:[2,119],84:[2,119],85:[2,119],86:[2,119],91:[2,119],93:[2,119],102:[2,119],104:[2,119],105:[2,119],106:[2,119],110:[2,119],118:[2,119],126:[2,119],128:[2,119],129:[2,119],132:[2,119],133:[2,119],134:[2,119],135:[2,119],136:[2,119],137:[2,119]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{6:[2,53],25:[2,53],26:[2,53],53:321,54:[1,229]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:87,104:[2,168],105:[2,168],106:[2,168],109:88,110:[2,168],111:69,118:[1,322],126:[2,168],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:87,104:[2,170],105:[1,323],106:[2,170],109:88,110:[2,170],111:69,118:[2,170],126:[2,170],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:87,104:[2,169],105:[2,169],106:[2,169],109:88,110:[2,169],111:69,118:[2,169],126:[2,169],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]},{6:[2,53],25:[2,53],26:[2,53],53:324,54:[1,239]},{26:[1,325],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,250],25:[1,251],26:[1,326]},{26:[1,327]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],49:[2,176],54:[2,176],57:[2,176],73:[2,176],78:[2,176],86:[2,176],91:[2,176],93:[2,176],102:[2,176],104:[2,176],105:[2,176],106:[2,176],110:[2,176],118:[2,176],126:[2,176],128:[2,176],129:[2,176],132:[2,176],133:[2,176],134:[2,176],135:[2,176],136:[2,176],137:[2,176]},{26:[2,180],121:[2,180],123:[2,180]},{25:[2,132],54:[2,132],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],26:[1,328]},{8:329,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:330,9:118,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[1,283],25:[1,284],26:[1,331]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],86:[2,128],91:[2,128]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:87,104:[2,171],105:[2,171],106:[2,171],109:88,110:[2,171],111:69,118:[2,171],126:[2,171],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],103:87,104:[2,172],105:[2,172],106:[2,172],109:88,110:[2,172],111:69,118:[2,172],126:[2,172],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,95],25:[2,95],26:[2,95],54:[2,95],78:[2,95]}],\n -defaultActions: {60:[2,51],61:[2,52],75:[2,3],94:[2,109],191:[2,89]},\n +table: [{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[3]},{1:[2,2],6:[1,72]},{1:[2,3],6:[2,3],26:[2,3],102:[2,3]},{1:[2,6],6:[2,6],26:[2,6],102:[2,6],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:85,104:[1,63],106:[1,64],109:86,110:[1,66],111:67,126:[1,84]},{1:[2,11],6:[2,11],25:[2,11],26:[2,11],49:[2,11],54:[2,11],57:[2,11],62:88,66:[1,90],67:[1,91],68:[1,92],69:[1,93],70:94,71:[1,95],73:[2,11],74:[1,96],78:[2,11],81:87,84:[1,89],85:[2,107],86:[2,11],91:[2,11],93:[2,11],102:[2,11],104:[2,11],105:[2,11],106:[2,11],110:[2,11],118:[2,11],126:[2,11],128:[2,11],129:[2,11],132:[2,11],133:[2,11],134:[2,11],135:[2,11],136:[2,11],137:[2,11]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:98,66:[1,90],67:[1,91],68:[1,92],69:[1,93],70:94,71:[1,95],73:[2,12],74:[1,96],78:[2,12],81:97,84:[1,89],85:[2,107],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],73:[2,13],78:[2,13],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17], + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],104:[2,8],106:[2,8],110:[2,8],126:[2,8]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[1,99],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[2,74]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[2,78]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],82:100,84:[2,105],85:[1,101],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{6:[2,54],25:[2,54],27:105,28:[1,71],44:106,48:102,49:[2,54],54:[2,54],55:103,56:104,58:107,59:108,76:[1,68],89:[1,109],90:[1,110]},{24:111,25:[1,112]},{7:113,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:115,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:116,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{12:118,13:119,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:120,44:61,58:45,59:46,61:117,63:23,64:24,65:25,76:[1,68],83:[1,26],88:[1,56],89:[1,57],90:[1,55],101:[1,54]},{12:118,13:119,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:120,44:61,58:45,59:46,61:121,63:23,64:24,65:25,76:[1,68],83:[1,26],88:[1,56],89:[1,57],90:[1,55],101:[1,54]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[1,125],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[2,71],128:[2,71],129:[2,71],130:[1,122],131:[1,123],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71],138:[1,124]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[1,126],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{24:127,25:[1,112]},{24:128,25:[1,112]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{24:129,25:[1,112]},{7:130,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,131],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,95],6:[2,95],12:118,13:119,24:132,25:[1,112],26:[2,95],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:120,44:61,49:[2,95],54:[2,95],57:[2,95],58:45,59:46,61:134,63:23,64:24,65:25,73:[2,95],76:[1,68],78:[2,95],80:[1,133],83:[1,26],86:[2,95],88:[1,56],89:[1,57],90:[1,55],91:[2,95],93:[2,95],101:[1,54],102:[2,95],104:[2,95],105:[2,95],106:[2,95],110:[2,95],118:[2,95],126:[2,95],128:[2,95],129:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95],137:[2,95]},{7:135,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,46],6:[2,46],7:136,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[2,46],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],102:[2,46],103:37,104:[2,46],106:[2,46],107:38,108:[1,65],109:39,110:[2,46],111:67,119:[1,40],124:35,125:[1,62],126:[2,46],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,47],6:[2,47],25:[2,47],26:[2,47],54:[2,47],78:[2,47],102:[2,47],104:[2,47],106:[2,47],110:[2,47],126:[2,47]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[2,73]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[2,28]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[2,34]},{4:137,5:3,7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,138],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:139,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],87:141,88:[1,56],89:[1,57],90:[1,55],91:[1,140],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:145,28:[1,71],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{25:[2,50]},{25:[2,51]},{1:[2,67],6:[2,67],25:[2,67],26:[2,67],40:[2,67],49:[2,67],54:[2,67],57:[2,67],66:[2,67],67:[2,67],68:[2,67],69:[2,67],71:[2,67],73:[2,67],74:[2,67],78:[2,67],80:[2,67],84:[2,67],85:[2,67],86:[2,67],91:[2,67],93:[2,67],102:[2,67],104:[2,67],105:[2,67],106:[2,67],110:[2,67],118:[2,67],126:[2,67],128:[2,67],129:[2,67],130:[2,67],131:[2,67],132:[2,67],133:[2,67],134:[2,67],135:[2,67],136:[2,67],137:[2,67],138:[2,67]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70],138:[2,70]},{7:146,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:147,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:148,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:150,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:149,25:[1,112],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{27:155,28:[1,71],44:156,58:157,59:158,64:151,76:[1,68],89:[1,109],90:[1,55],113:152,114:[1,153],115:154},{112:159,116:[1,160],117:[1,161]},{6:[2,90],10:165,25:[2,90],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],41:163,42:164,44:168,46:[1,44],54:[2,90],77:162,78:[2,90],89:[1,109]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],118:[2,26],126:[2,26],128:[2,26],129:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[2,27]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],40:[2,25],43:[2,25],49:[2,25],54:[2,25],57:[2,25],66:[2,25],67:[2,25],68:[2,25],69:[2,25],71:[2,25],73:[2,25],74:[2,25],78:[2,25],80:[2,25],84:[2,25],85:[2,25],86:[2,25],91:[2,25],93:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],116:[2,25],117:[2,25],118:[2,25],126:[2,25],128:[2,25],129:[2,25],130:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25],138:[2,25]},{1:[2,5],5:169,6:[2,5],7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[2,5],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],102:[2,5],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{7:170,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:171,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:172,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:173,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:174,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:175,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:176,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:177,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{7:178,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],104:[2,152],105:[2,152],106:[2,152],110:[2,152],118:[2,152],126:[2,152],128:[2,152],129:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152],137:[2,152]},{82:179,85:[1,101]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68],138:[2,68]},{85:[2,108]},{27:180,28:[1,71]},{27:181,28:[1,71]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:182,28:[1,71],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83],138:[2,83]},{27:183,28:[1,71]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84],138:[2,84]},{7:185,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],57:[1,189],58:45,59:46,61:34,63:23,64:24,65:25,72:184,75:186,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],92:187,93:[1,188],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{70:190,71:[1,95],74:[1,96]},{82:191,85:[1,101]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69],138:[2,69]},{6:[1,193],7:192,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,194],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],84:[2,106],85:[2,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],86:[1,195],87:196,88:[1,56],89:[1,57],90:[1,55],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,52],25:[2,52],49:[1,198],53:200,54:[1,199]},{6:[2,55],25:[2,55],26:[2,55],49:[2,55],54:[2,55]},{6:[2,59],25:[2,59],26:[2,59],40:[1,202],49:[2,59],54:[2,59],57:[1,201]},{6:[2,62],25:[2,62],26:[2,62],40:[2,62],49:[2,62],54:[2,62],57:[2,62]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{27:145,28:[1,71]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],87:141,88:[1,56],89:[1,57],90:[1,55],91:[1,140],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[2,49]},{4:204,5:3,7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[1,203],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:82,104:[2,186],105:[2,186],106:[2,186],109:83,110:[2,186],111:67,118:[2,186],126:[2,186],128:[2,186],129:[2,186],132:[1,73],133:[2,186],134:[2,186],135:[2,186],136:[2,186],137:[2,186]},{103:85,104:[1,63],106:[1,64],109:86,110:[1,66],111:67,126:[1,84]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:82,104:[2,187],105:[2,187],106:[2,187],109:83,110:[2,187],111:67,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,73],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:82,104:[2,188],105:[2,188],106:[2,188],109:83,110:[2,188],111:67,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,73],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,189],74:[2,71],78:[2,189],84:[2,71],85:[2,71],86:[2,189],91:[2,189],93:[2,189],102:[2,189],104:[2,189],105:[2,189],106:[2,189],110:[2,189],118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{62:88,66:[1,90],67:[1,91],68:[1,92],69:[1,93],70:94,71:[1,95],74:[1,96],81:87,84:[1,89],85:[2,107]},{62:98,66:[1,90],67:[1,91],68:[1,92],69:[1,93],70:94,71:[1,95],74:[1,96],81:97,84:[1,89],85:[2,107]},{66:[2,74],67:[2,74],68:[2,74],69:[2,74],71:[2,74],74:[2,74],84:[2,74],85:[2,74]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,190],74:[2,71],78:[2,190],84:[2,71],85:[2,71],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],73:[2,191],78:[2,191],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{6:[1,207],7:205,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,206],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:208,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{24:209,25:[1,112],125:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],73:[2,132],78:[2,132],86:[2,132],91:[2,132],93:[2,132],97:211,98:[1,212],99:[1,213],102:[2,132],104:[2,132],105:[2,132],106:[2,132],110:[2,132],118:[2,132],126:[2,132],128:[2,132],129:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132],137:[2,132]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],104:[2,146],105:[2,146],106:[2,146],110:[2,146],118:[2,146],126:[2,146],128:[2,146],129:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146],137:[2,146]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{25:[1,214],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{120:215,122:216,123:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],73:[2,96],78:[2,96],86:[2,96],91:[2,96],93:[2,96],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{7:218,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,99],6:[2,99],24:219,25:[1,112],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,71],67:[2,71],68:[2,71],69:[2,71],71:[2,71],73:[2,99],74:[2,71],78:[2,99],80:[1,220],84:[2,71],85:[2,71],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],102:[2,139],103:82,104:[2,139],105:[2,139],106:[2,139],109:83,110:[2,139],111:67,118:[2,139],126:[2,139],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,45],6:[2,45],26:[2,45],102:[2,45],103:82,104:[2,45],106:[2,45],109:83,110:[2,45],111:67,126:[2,45],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,72],102:[1,221]},{4:222,5:3,7:4,8:5,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],91:[2,128],92:223,93:[1,188],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114]},{6:[2,52],25:[2,52],53:225,54:[1,226],91:[2,52]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],86:[2,123],91:[2,123]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],87:227,88:[1,56],89:[1,57],90:[1,55],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],86:[2,129],91:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],80:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],116:[2,113],117:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113],138:[2,113]},{24:228,25:[1,112],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],73:[2,142],78:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],103:82,104:[1,63],105:[1,229],106:[1,64],109:83,110:[1,66],111:67,118:[2,142],126:[2,142],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:82,104:[1,63],105:[1,230],106:[1,64],109:83,110:[1,66],111:67,118:[2,144],126:[2,144],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],103:82,104:[1,63],105:[2,151],106:[1,64],109:83,110:[1,66],111:67,118:[2,151],126:[2,151],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{116:[2,157],117:[2,157]},{27:155,28:[1,71],44:156,58:157,59:158,76:[1,68],89:[1,109],90:[1,110],113:231,115:154},{54:[1,232],116:[2,163],117:[2,163]},{54:[2,159],116:[2,159],117:[2,159]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{7:233,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:234,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,52],25:[2,52],53:235,54:[1,236],78:[2,52]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],78:[2,91]},{6:[2,38],25:[2,38],26:[2,38],43:[1,237],54:[2,38],78:[2,38]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,42],25:[2,42],26:[2,42],43:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{1:[2,4],6:[2,4],26:[2,4],102:[2,4]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],103:82,104:[2,194],105:[2,194],106:[2,194],109:83,110:[2,194],111:67,118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[1,73],133:[1,76],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:82,104:[2,195],105:[2,195],106:[2,195],109:83,110:[2,195],111:67,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,73],133:[1,76],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:82,104:[2,196],105:[2,196],106:[2,196],109:83,110:[2,196],111:67,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,73],133:[2,196],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:82,104:[2,197],105:[2,197],106:[2,197],109:83,110:[2,197],111:67,118:[2,197],126:[2,197],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:82,104:[2,198],105:[2,198],106:[2,198],109:83,110:[2,198],111:67,118:[2,198],126:[2,198],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[2,198],136:[2,198],137:[1,80]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:82,104:[2,199],105:[2,199],106:[2,199],109:83,110:[2,199],111:67,118:[2,199],126:[2,199],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[2,199],137:[1,80]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:82,104:[2,200],105:[2,200],106:[2,200],109:83,110:[2,200],111:67,118:[2,200],126:[2,200],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[2,200],136:[2,200],137:[2,200]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:82,104:[1,63],105:[2,185],106:[1,64],109:83,110:[1,66],111:67,118:[2,185],126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],103:82,104:[1,63],105:[2,184],106:[1,64],109:83,110:[1,66],111:67,118:[2,184],126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],69:[2,103],71:[2,103],73:[2,103],74:[2,103],78:[2,103],84:[2,103],85:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],40:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],80:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],130:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79],138:[2,79]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80],138:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81],138:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82],138:[2,82]},{73:[1,238]},{57:[1,189],73:[2,87],92:239,93:[1,188],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{73:[2,88]},{7:240,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,73:[2,122],76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{11:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],73:[2,116],76:[2,116],79:[2,116],83:[2,116],88:[2,116],89:[2,116],90:[2,116],96:[2,116],100:[2,116],101:[2,116],104:[2,116],106:[2,116],108:[2,116],110:[2,116],119:[2,116],125:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116],131:[2,116]},{11:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86],138:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],73:[2,35],78:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],103:82,104:[2,35],105:[2,35],106:[2,35],109:83,110:[2,35],111:67,118:[2,35],126:[2,35],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{7:241,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:242,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],69:[2,109],71:[2,109],73:[2,109],74:[2,109],78:[2,109],84:[2,109],85:[2,109],86:[2,109],91:[2,109],93:[2,109],102:[2,109],104:[2,109],105:[2,109],106:[2,109],110:[2,109],118:[2,109],126:[2,109],128:[2,109],129:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109],137:[2,109]},{6:[2,52],25:[2,52],53:243,54:[1,226],86:[2,52]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],86:[2,128],91:[2,128],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{50:245,51:[1,58],52:[1,59]},{6:[2,53],25:[2,53],26:[2,53],27:105,28:[1,71],44:106,55:246,56:104,58:107,59:108,76:[1,68],89:[1,109],90:[1,110]},{6:[1,247],25:[1,248]},{6:[2,60],25:[2,60],26:[2,60],49:[2,60],54:[2,60]},{7:249,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],98:[2,23],99:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],121:[2,23],123:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{6:[1,72],26:[1,250]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:82,104:[2,201],105:[2,201],106:[2,201],109:83,110:[2,201],111:67,118:[2,201],126:[2,201],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{7:251,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:252,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:82,104:[2,204],105:[2,204],106:[2,204],109:83,110:[2,204],111:67,118:[2,204],126:[2,204],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{7:253,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],98:[1,254],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{24:255,25:[1,112]},{24:258,25:[1,112],27:256,28:[1,71],59:257,76:[1,68]},{120:259,122:216,123:[1,217]},{26:[1,260],121:[1,261],122:262,123:[1,217]},{26:[2,176],121:[2,176],123:[2,176]},{7:264,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],95:263,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,97],6:[2,97],24:265,25:[1,112],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],103:82,104:[1,63],105:[2,97],106:[1,64],109:83,110:[1,66],111:67,118:[2,97],126:[2,97],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],73:[2,100],78:[2,100],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{7:266,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],66:[2,140],67:[2,140],68:[2,140],69:[2,140],71:[2,140],73:[2,140],74:[2,140],78:[2,140],84:[2,140],85:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],104:[2,140],105:[2,140],106:[2,140],110:[2,140],118:[2,140],126:[2,140],128:[2,140],129:[2,140],132:[2,140],133:[2,140],134:[2,140],135:[2,140],136:[2,140],137:[2,140]},{6:[1,72],26:[1,267]},{7:268,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,66],11:[2,117],25:[2,66],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,66],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],91:[2,66],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{6:[1,270],25:[1,271],91:[1,269]},{6:[2,53],7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[2,53],26:[2,53],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],86:[2,53],88:[1,56],89:[1,57],90:[1,55],91:[2,53],94:272,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,52],25:[2,52],26:[2,52],53:273,54:[1,226]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],73:[2,180],78:[2,180],86:[2,180],91:[2,180],93:[2,180],102:[2,180],104:[2,180],105:[2,180],106:[2,180],110:[2,180],118:[2,180],121:[2,180],126:[2,180],128:[2,180],129:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180],137:[2,180]},{7:274,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:275,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{116:[2,158],117:[2,158]},{27:155,28:[1,71],44:156,58:157,59:158,76:[1,68],89:[1,109],90:[1,110],115:276},{1:[2,165],6:[2,165],25:[2,165],26:[2,165]</string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +,49:[2,165],54:[2,165],57:[2,165],73:[2,165],78:[2,165],86:[2,165],91:[2,165],93:[2,165],102:[2,165],103:82,104:[2,165],105:[1,277],106:[2,165],109:83,110:[2,165],111:67,118:[1,278],126:[2,165],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:82,104:[2,166],105:[1,279],106:[2,166],109:83,110:[2,166],111:67,118:[2,166],126:[2,166],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,281],25:[1,282],78:[1,280]},{6:[2,53],10:165,25:[2,53],26:[2,53],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],41:283,42:164,44:168,46:[1,44],78:[2,53],89:[1,109]},{7:284,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,285],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85],138:[2,85]},{7:286,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,73:[2,120],76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{73:[2,121],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:82,104:[2,36],105:[2,36],106:[2,36],109:83,110:[2,36],111:67,118:[2,36],126:[2,36],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{26:[1,287],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,270],25:[1,271],86:[1,288]},{6:[2,66],25:[2,66],26:[2,66],54:[2,66],86:[2,66],91:[2,66]},{24:289,25:[1,112]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{27:105,28:[1,71],44:106,55:290,56:104,58:107,59:108,76:[1,68],89:[1,109],90:[1,110]},{6:[2,54],25:[2,54],26:[2,54],27:105,28:[1,71],44:106,48:291,54:[2,54],55:103,56:104,58:107,59:108,76:[1,68],89:[1,109],90:[1,110]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{26:[1,292],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],103:82,104:[2,203],105:[2,203],106:[2,203],109:83,110:[2,203],111:67,118:[2,203],126:[2,203],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{24:293,25:[1,112],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{24:294,25:[1,112]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{24:295,25:[1,112]},{24:296,25:[1,112]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{26:[1,297],121:[1,298],122:262,123:[1,217]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{24:299,25:[1,112]},{26:[2,177],121:[2,177],123:[2,177]},{24:300,25:[1,112],54:[1,301]},{25:[2,130],54:[2,130],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],104:[2,98],105:[2,98],106:[2,98],110:[2,98],118:[2,98],126:[2,98],128:[2,98],129:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98],137:[2,98]},{1:[2,101],6:[2,101],24:302,25:[1,112],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],103:82,104:[1,63],105:[2,101],106:[1,64],109:83,110:[1,66],111:67,118:[2,101],126:[2,101],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{102:[1,303]},{91:[1,304],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],94:305,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:197,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,60:144,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],87:306,88:[1,56],89:[1,57],90:[1,55],94:142,96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{6:[1,270],25:[1,271],26:[1,307]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:82,104:[1,63],105:[2,143],106:[1,64],109:83,110:[1,66],111:67,118:[2,143],126:[2,143],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:82,104:[1,63],105:[2,145],106:[1,64],109:83,110:[1,66],111:67,118:[2,145],126:[2,145],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{116:[2,164],117:[2,164]},{7:308,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:309,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:310,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],69:[2,89],71:[2,89],73:[2,89],74:[2,89],78:[2,89],84:[2,89],85:[2,89],86:[2,89],91:[2,89],93:[2,89],102:[2,89],104:[2,89],105:[2,89],106:[2,89],110:[2,89],116:[2,89],117:[2,89],118:[2,89],126:[2,89],128:[2,89],129:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89],137:[2,89]},{10:165,27:166,28:[1,71],29:167,30:[1,69],31:[1,70],41:311,42:164,44:168,46:[1,44],89:[1,109]},{6:[2,90],10:165,25:[2,90],26:[2,90],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],41:163,42:164,44:168,46:[1,44],54:[2,90],77:312,89:[1,109]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],54:[2,39],78:[2,39],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{7:313,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{73:[2,119],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],104:[2,37],105:[2,37],106:[2,37],110:[2,37],118:[2,37],126:[2,37],128:[2,37],129:[2,37],132:[2,37],133:[2,37],134:[2,37],135:[2,37],136:[2,37],137:[2,37]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],49:[2,48],54:[2,48],57:[2,48],73:[2,48],78:[2,48],86:[2,48],91:[2,48],93:[2,48],102:[2,48],104:[2,48],105:[2,48],106:[2,48],110:[2,48],118:[2,48],126:[2,48],128:[2,48],129:[2,48],132:[2,48],133:[2,48],134:[2,48],135:[2,48],136:[2,48],137:[2,48]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{6:[2,52],25:[2,52],26:[2,52],53:314,54:[1,199]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],104:[2,202],105:[2,202],106:[2,202],110:[2,202],118:[2,202],126:[2,202],128:[2,202],129:[2,202],132:[2,202],133:[2,202],134:[2,202],135:[2,202],136:[2,202],137:[2,202]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],98:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],104:[2,172],105:[2,172],106:[2,172],110:[2,172],118:[2,172],126:[2,172],128:[2,172],129:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172],137:[2,172]},{24:315,25:[1,112]},{26:[1,316]},{6:[1,317],26:[2,178],121:[2,178],123:[2,178]},{7:318,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],104:[2,102],105:[2,102],106:[2,102],110:[2,102],118:[2,102],126:[2,102],128:[2,102],129:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102],137:[2,102]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],69:[2,118],71:[2,118],73:[2,118],74:[2,118],78:[2,118],84:[2,118],85:[2,118],86:[2,118],91:[2,118],93:[2,118],102:[2,118],104:[2,118],105:[2,118],106:[2,118],110:[2,118],118:[2,118],126:[2,118],128:[2,118],129:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118],137:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[2,52],25:[2,52],26:[2,52],53:319,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:82,104:[2,167],105:[2,167],106:[2,167],109:83,110:[2,167],111:67,118:[1,320],126:[2,167],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:82,104:[2,169],105:[1,321],106:[2,169],109:83,110:[2,169],111:67,118:[2,169],126:[2,169],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:82,104:[2,168],105:[2,168],106:[2,168],109:83,110:[2,168],111:67,118:[2,168],126:[2,168],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,52],25:[2,52],26:[2,52],53:322,54:[1,236]},{26:[1,323],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,247],25:[1,248],26:[1,324]},{26:[1,325]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{26:[2,179],121:[2,179],123:[2,179]},{25:[2,131],54:[2,131],103:82,104:[1,63],106:[1,64],109:83,110:[1,66],111:67,126:[1,81],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[1,270],25:[1,271],26:[1,326]},{7:327,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{7:328,8:114,9:18,10:19,11:[1,20],12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:60,28:[1,71],29:47,30:[1,69],31:[1,70],32:22,33:[1,48],34:[1,49],35:[1,50],36:[1,51],37:[1,52],38:[1,53],39:21,44:61,45:[1,43],46:[1,44],47:[1,27],50:28,51:[1,58],52:[1,59],58:45,59:46,61:34,63:23,64:24,65:25,76:[1,68],79:[1,41],83:[1,26],88:[1,56],89:[1,57],90:[1,55],96:[1,36],100:[1,42],101:[1,54],103:37,104:[1,63],106:[1,64],107:38,108:[1,65],109:39,110:[1,66],111:67,119:[1,40],124:35,125:[1,62],127:[1,29],128:[1,30],129:[1,31],130:[1,32],131:[1,33]},{6:[1,281],25:[1,282],26:[1,329]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:82,104:[2,170],105:[2,170],106:[2,170],109:83,110:[2,170],111:67,118:[2,170],126:[2,170],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:82,104:[2,171],105:[2,171],106:[2,171],109:83,110:[2,171],111:67,118:[2,171],126:[2,171],128:[1,75],129:[1,74],132:[1,73],133:[1,76],134:[1,77],135:[1,78],136:[1,79],137:[1,80]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]}],\n +defaultActions: {58:[2,50],59:[2,51],89:[2,108],186:[2,88]},\n parseError: function parseError(str, hash) {\n - var e = new Error(str)\n - e.location = hash.loc\n - throw e;\n + if (hash.recoverable) {\n + this.trace(str);\n + } else {\n + var e = new Error(str)\n + e.location = hash.loc\n + throw e;\n + }\n },\n parse: function parse(input) {\n - var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n + var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = \'\', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n this.yy.parser = this;\n - if (typeof this.lexer.yylloc == "undefined")\n + if (typeof this.lexer.yylloc == \'undefined\') {\n this.lexer.yylloc = {};\n + }\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n var ranges = this.lexer.options && this.lexer.options.ranges;\n - if (typeof this.yy.parseError === "function")\n + if (typeof this.yy.parseError === \'function\') {\n this.parseError = this.yy.parseError;\n + } else {\n + this.parseError = Object.getPrototypeOf(this).parseError;\n + }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n @@ -4206,8 +4322,8 @@ parse: function parse(input) {\n }\n function lex() {\n var token;\n - token = self.lexer.lex() || 1;\n - if (typeof token !== "number") {\n + token = self.lexer.lex() || EOF;\n + if (typeof token !== \'number\') {\n token = self.symbols_[token] || token;\n }\n return token;\n @@ -4218,29 +4334,35 @@ parse: function parse(input) {\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n - if (symbol === null || typeof symbol == "undefined") {\n + if (symbol === null || typeof symbol == \'undefined\') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n - if (typeof action === "undefined" || !action.length || !action[0]) {\n - var errStr = "";\n - if (!recovering) {\n + if (typeof action === \'undefined\' || !action.length || !action[0]) {\n + var errStr = \'\';\n expected = [];\n - for (p in table[state])\n - if (this.terminals_[p] && p > 2) {\n - expected.push("\'" + this.terminals_[p] + "\'");\n + for (p in table[state]) {\n + if (this.terminals_[p] && p > TERROR) {\n + expected.push(\'\\\'\' + this.terminals_[p] + \'\\\'\');\n }\n + }\n if (this.lexer.showPosition) {\n - errStr = this.lexer.showPosition() + "\\nExpecting " + expected.join(", ") + ", got \'" + (this.terminals_[symbol] || symbol) + "\'";\n + errStr = \'Expecting \' + expected.join(\', \') + \', got \\\'\' + (this.terminals_[symbol] || symbol) + \'\\\'\';\n } else {\n - errStr = "Unexpected " + (symbol == 1?"end of input":"\'" + (this.terminals_[symbol] || symbol) + "\'");\n + errStr = \'Unexpected \' + (symbol == EOF ? \'end of input\' : \'\\\'\' + (this.terminals_[symbol] || symbol) + \'\\\'\');\n }\n - this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n + if (this.lexer.yylloc.first_line !== yyloc.first_line) yyloc = this.lexer.yylloc;\n + this.parseError(errStr, {\n + text: this.lexer.match,\n + token: this.terminals_[symbol] || symbol,\n + line: this.lexer.yylineno,\n + loc: yyloc,\n + expected: expected\n + });\n }\n - }\n if (action[0] instanceof Array && action.length > 1) {\n - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);\n + throw new Error(\'Parse Error: multiple actions possible at state: \' + state + \', token: \' + symbol);\n }\n switch (action[0]) {\n case 1:\n @@ -4254,8 +4376,9 @@ parse: function parse(input) {\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n - if (recovering > 0)\n + if (recovering > 0) {\n recovering--;\n + }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n @@ -4264,12 +4387,20 @@ parse: function parse(input) {\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n - yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};\n + yyval._$ = {\n + first_line: lstack[lstack.length - (len || 1)].first_line,\n + last_line: lstack[lstack.length - 1].last_line,\n + first_column: lstack[lstack.length - (len || 1)].first_column,\n + last_column: lstack[lstack.length - 1].last_column\n + };\n if (ranges) {\n - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n + yyval._$.range = [\n + lstack[lstack.length - (len || 1)].range[0],\n + lstack[lstack.length - 1].range[1]\n + ];\n }\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n - if (typeof r !== "undefined") {\n + if (typeof r !== \'undefined\') {\n return r;\n }\n if (len) {\n @@ -4288,10 +4419,12 @@ parse: function parse(input) {\n }\n }\n return true;\n -}\n -};\n +}};\n undefined\n -function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;\n +function Parser () {\n + this.yy = {};\n +}\n +Parser.prototype = parser;parser.Parser = Parser;\n \n module.exports = new Parser;\n \n @@ -4344,7 +4477,7 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ }\n \n CodeFragment.prototype.toString = function() {\n - return "" + this.code + [this.locationData ? ": " + locationDataToString(this.locationData) : void 0];\n + return "" + this.code + (this.locationData ? ": " + locationDataToString(this.locationData) : \'\');\n };\n \n return CodeFragment;\n @@ -4529,7 +4662,10 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ Base.prototype.assigns = NO;\n \n Base.prototype.updateLocationDataIfMissing = function(locationData) {\n - this.locationData || (this.locationData = locationData);\n + if (this.locationData) {\n + return this;\n + }\n + this.locationData = locationData;\n return this.eachChild(function(child) {\n return child.updateLocationDataIfMissing(locationData);\n });\n @@ -4776,6 +4912,8 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ fragments.push(this.makeCode(scope.assignedVariables().join(",\\n" + (this.tab + TAB))));\n }\n fragments.push(this.makeCode(";\\n" + (this.spaced ? \'\\n\' : \'\')));\n + } else if (fragments.length && post.length) {\n + fragments.push(this.makeCode("\\n"));\n }\n }\n return fragments.concat(post);\n @@ -4935,7 +5073,7 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ Return.prototype.compileNode = function(o) {\n var answer;\n answer = [];\n - answer.push(this.makeCode(this.tab + ("return" + [this.expression ? " " : void 0])));\n + answer.push(this.makeCode(this.tab + ("return" + (this.expression ? " " : ""))));\n if (this.expression) {\n answer = answer.concat(this.expression.compileToFragments(o, LEVEL_PAREN));\n }\n @@ -5074,17 +5212,16 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ };\n \n Value.prototype.unfoldSoak = function(o) {\n - var _ref4,\n - _this = this;\n - return (_ref4 = this.unfoldedSoak) != null ? _ref4 : this.unfoldedSoak = (function() {\n - var fst, i, ifn, prop, ref, snd, _i, _len, _ref5, _ref6;\n + var _this = this;\n + return this.unfoldedSoak != null ? this.unfoldedSoak : this.unfoldedSoak = (function() {\n + var fst, i, ifn, prop, ref, snd, _i, _len, _ref4, _ref5;\n if (ifn = _this.base.unfoldSoak(o)) {\n - (_ref5 = ifn.body.properties).push.apply(_ref5, _this.properties);\n + (_ref4 = ifn.body.properties).push.apply(_ref4, _this.properties);\n return ifn;\n }\n - _ref6 = _this.properties;\n - for (i = _i = 0, _len = _ref6.length; _i < _len; i = ++_i) {\n - prop = _ref6[i];\n + _ref5 = _this.properties;\n + for (i = _i = 0, _len = _ref5.length; _i < _len; i = ++_i) {\n + prop = _ref5[i];\n if (!prop.soak) {\n continue;\n }\n @@ -5121,11 +5258,11 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ \n Comment.prototype.compileNode = function(o, level) {\n var code;\n - code = "/*" + (multident(this.comment, this.tab)) + (__indexOf.call(this.comment, \'\\n\') >= 0 ? "\\n" + this.tab : \'\') + "*/\\n";\n + code = "/*" + (multident(this.comment, this.tab)) + (__indexOf.call(this.comment, \'\\n\') >= 0 ? "\\n" + this.tab : \'\') + "*/";\n if ((level || o.level) === LEVEL_TOP) {\n code = o.indent + code;\n }\n - return [this.makeCode(code)];\n + return [this.makeCode("\\n"), this.makeCode(code)];\n };\n \n return Comment;\n @@ -5525,7 +5662,30 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ answer = [];\n for (i = _j = 0, _len1 = props.length; _j < _len1; i = ++_j) {\n prop = props[i];\n - join = i === props.length - 1 ? \'\' : prop === lastNoncom || prop instanceof Comment ? \'\\n\' : \',\\n\';\n + join = i === props.length - 1 ? \'\' : prop === lastNoncom || prop instanceof Comment ? \'\\n\' : \',\\ + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +n\';\n indent = prop instanceof Comment ? \'\' : idt;\n if (prop instanceof Assign && prop.variable instanceof Value && prop.variable.hasProperties()) {\n prop.variable.error(\'Invalid object key\');\n @@ -5609,7 +5769,7 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ }\n answer.push.apply(answer, fragments);\n }\n - if ((fragmentsToText(answer)).indexOf(\'\\n\') >= 0) {\n + if (fragmentsToText(answer).indexOf(\'\\n\') >= 0) {\n answer.unshift(this.makeCode("[\\n" + o.indent));\n answer.push(this.makeCode("\\n" + this.tab + "]"));\n } else {\n @@ -6607,7 +6767,7 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ \n Op.prototype.compileExistence = function(o) {\n var fst, ref;\n - if (this.first.isComplex()) {\n + if (!o.isExistentialEquals && this.first.isComplex()) {\n ref = new Literal(o.scope.freeVariable(\'ref\'));\n fst = new Parens(new Assign(ref, this.first));\n } else {\n @@ -6711,7 +6871,7 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ var fragments, ref, sub, _ref4;\n _ref4 = this.object.cache(o, LEVEL_LIST), sub = _ref4[0], ref = _ref4[1];\n fragments = [].concat(this.makeCode(utility(\'indexOf\') + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? \'< 0\' : \'>= 0\')));\n - if ((fragmentsToText(sub)) === (fragmentsToText(ref))) {\n + if (fragmentsToText(sub) === fragmentsToText(ref)) {\n return fragments;\n }\n fragments = sub.concat(this.makeCode(\', \'), fragments);\n @@ -6883,6 +7043,9 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ if (this.range && this.pattern) {\n this.name.error(\'cannot pattern match over range loops\');\n }\n + if (this.own && !this.object) {\n + this.index.error(\'cannot use own with for-in\');\n + }\n this.returns = false;\n }\n \n @@ -7148,6 +7311,7 @@ define(\'ace/mode/coffee/nodes\', [\'require\', \'exports\', \'module\' , \'ace/ } else {\n this.isChain = elseBody instanceof If;\n this.elseBody = this.ensureBlock(elseBody);\n + this.elseBody.updateLocationDataIfMissing(elseBody.locationData);\n }\n return this;\n };\n @@ -7494,6 +7658,12 @@ define(\'ace/mode/coffee/scope\', [\'require\', \'exports\', \'module\' , \'ace/ ]]></string> </value> </item> + <item> + <key> <string>next</string> </key> + <value> + <none/> + </value> + </item> </dictionary> </pickle> </record> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-css.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-css.js.xml index a451dbea6d..5afefcd14e 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-css.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-css.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155570.13</string> </value> + <value> <string>ts83646621.72</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>285838</int> </value> + <value> <int>286897</int> </value> </item> <item> <key> <string>title</string> </key> @@ -55,31 +55,30 @@ if (typeof window.window != "undefined" && window.document) {\n return;\n }\n \n -window.console = {\n - log: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - },\n - error: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - }\n +window.console = function() {\n + var msgs = Array.prototype.slice.call(arguments, 0);\n + postMessage({type: "log", data: msgs});\n };\n +window.console.error =\n +window.console.warn = \n +window.console.log =\n +window.console.trace = window.console;\n +\n window.window = window;\n window.ace = window;\n \n window.normalizeModule = function(parentId, moduleName) {\n if (moduleName.indexOf("!") !== -1) {\n var chunks = moduleName.split("!");\n - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);\n + return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);\n }\n if (moduleName.charAt(0) == ".") {\n var base = parentId.split("/").slice(0, -1).join("/");\n - moduleName = base + "/" + moduleName;\n + moduleName = (base ? base + "/" : "") + moduleName;\n \n while(moduleName.indexOf(".") !== -1 && previous != moduleName) {\n var previous = moduleName;\n - moduleName = moduleName.replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n + moduleName = moduleName.replace(/^\\.\\//, "").replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n }\n }\n \n @@ -94,9 +93,9 @@ window.require = function(parentId, id) {\n if (!id.charAt)\n throw new Error("worker.js require() accepts only (parentId, id) as arguments");\n \n - id = normalizeModule(parentId, id);\n + id = window.normalizeModule(parentId, id);\n \n - var module = require.modules[id];\n + var module = window.require.modules[id];\n if (module) {\n if (!module.initialized) {\n module.initialized = true;\n @@ -106,48 +105,60 @@ window.require = function(parentId, id) {\n }\n \n var chunks = id.split("/");\n - chunks[0] = require.tlns[chunks[0]] || chunks[0];\n + if (!window.require.tlns)\n + return console.log("unable to load " + id);\n + chunks[0] = window.require.tlns[chunks[0]] || chunks[0];\n var path = chunks.join("/") + ".js";\n \n - require.id = id;\n + window.require.id = id;\n importScripts(path);\n - return require(parentId, id);\n + return window.require(parentId, id);\n };\n -\n -require.modules = {};\n -require.tlns = {};\n +window.require.modules = {};\n +window.require.tlns = {};\n \n window.define = function(id, deps, factory) {\n if (arguments.length == 2) {\n factory = deps;\n if (typeof id != "string") {\n deps = id;\n - id = require.id;\n + id = window.require.id;\n }\n } else if (arguments.length == 1) {\n factory = id;\n - id = require.id;\n + deps = []\n + id = window.require.id;\n }\n +\n + if (!deps.length)\n + deps = [\'require\', \'exports\', \'module\']\n \n if (id.indexOf("text!") === 0) \n return;\n \n - var req = function(deps, factory) {\n - return require(id, deps, factory);\n + var req = function(childId) {\n + return window.require(id, childId);\n };\n \n - require.modules[id] = {\n + window.require.modules[id] = {\n + exports: {},\n factory: function() {\n - var module = {\n - exports: {}\n - };\n - var returnExports = factory(req, module.exports, module);\n + var module = this;\n + var returnExports = factory.apply(this, deps.map(function(dep) {\n + switch(dep) {\n + case \'require\': return req\n + case \'exports\': return module.exports\n + case \'module\': return module\n + default: return req(dep)\n + }\n + }));\n if (returnExports)\n module.exports = returnExports;\n return module;\n }\n };\n };\n +window.define.amd = {}\n \n window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n require.tlns = topLevelNamespaces;\n @@ -155,8 +166,8 @@ window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n \n window.initSender = function initSender() {\n \n - var EventEmitter = require("ace/lib/event_emitter").EventEmitter;\n - var oop = require("ace/lib/oop");\n + var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;\n + var oop = window.require("ace/lib/oop");\n \n var Sender = function() {};\n \n @@ -207,158 +218,7 @@ window.onmessage = function(e) {\n sender._emit(msg.event, msg.data);\n }\n };\n -})(this);\n -\n -define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -var EventEmitter = {};\n -var stopPropagation = function() { this.propagationStopped = true; };\n -var preventDefault = function() { this.defaultPrevented = true; };\n -\n -EventEmitter._emit =\n -EventEmitter._dispatchEvent = function(eventName, e) {\n - this._eventRegistry || (this._eventRegistry = {});\n - this._defaultHandlers || (this._defaultHandlers = {});\n -\n - var listeners = this._eventRegistry[eventName] || [];\n - var defaultHandler = this._defaultHandlers[eventName];\n - if (!listeners.length && !defaultHandler)\n - return;\n -\n - if (typeof e != "object" || !e)\n - e = {};\n -\n - if (!e.type)\n - e.type = eventName;\n - if (!e.stopPropagation)\n - e.stopPropagation = stopPropagation;\n - if (!e.preventDefault)\n - e.preventDefault = preventDefault;\n -\n - for (var i=0; i<listeners.length; i++) {\n - listeners[i](e, this);\n - if (e.propagationStopped)\n - break;\n - }\n - \n - if (defaultHandler && !e.defaultPrevented)\n - return defaultHandler(e, this);\n -};\n -\n -\n -EventEmitter._signal = function(eventName, e) {\n - var listeners = (this._eventRegistry || {})[eventName];\n - if (!listeners)\n - return;\n -\n - for (var i=0; i<listeners.length; i++)\n - listeners[i](e, this);\n -};\n -\n -EventEmitter.once = function(eventName, callback) {\n - var _self = this;\n - callback && this.addEventListener(eventName, function newCallback() {\n - _self.removeEventListener(eventName, newCallback);\n - callback.apply(null, arguments);\n - });\n -};\n -\n -\n -EventEmitter.setDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - handlers = this._defaultHandlers = {_disabled_: {}};\n - \n - if (handlers[eventName]) {\n - var old = handlers[eventName];\n - var disabled = handlers._disabled_[eventName];\n - if (!disabled)\n - handlers._disabled_[eventName] = disabled = [];\n - disabled.push(old);\n - var i = disabled.indexOf(callback);\n - if (i != -1) \n - disabled.splice(i, 1);\n - }\n - handlers[eventName] = callback;\n -};\n -EventEmitter.removeDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - return;\n - var disabled = handlers._disabled_[eventName];\n - \n - if (handlers[eventName] == callback) {\n - var old = handlers[eventName];\n - if (disabled)\n - this.setDefaultHandler(eventName, disabled.pop());\n - } else if (disabled) {\n - var i = disabled.indexOf(callback);\n - if (i != -1)\n - disabled.splice(i, 1);\n - }\n -};\n -\n -EventEmitter.on =\n -EventEmitter.addEventListener = function(eventName, callback, capturing) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - listeners = this._eventRegistry[eventName] = [];\n -\n - if (listeners.indexOf(callback) == -1)\n - listeners[capturing ? "unshift" : "push"](callback);\n - return callback;\n -};\n -\n -EventEmitter.off =\n -EventEmitter.removeListener =\n -EventEmitter.removeEventListener = function(eventName, callback) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - return;\n -\n - var index = listeners.indexOf(callback);\n - if (index !== -1)\n - listeners.splice(index, 1);\n -};\n -\n -EventEmitter.removeAllListeners = function(eventName) {\n - if (this._eventRegistry) this._eventRegistry[eventName] = [];\n -};\n -\n -exports.EventEmitter = EventEmitter;\n -\n -});\n -\n -define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -exports.inherits = (function() {\n - var tempCtor = function() {};\n - return function(ctor, superCtor) {\n - tempCtor.prototype = superCtor.prototype;\n - ctor.super_ = superCtor.prototype;\n - ctor.prototype = new tempCtor();\n - ctor.prototype.constructor = ctor;\n - };\n -}());\n -\n -exports.mixin = function(obj, mixin) {\n - for (var key in mixin) {\n - obj[key] = mixin[key];\n - }\n - return obj;\n -};\n -\n -exports.implement = function(proto, mixin) {\n - exports.mixin(proto, mixin);\n -};\n -\n -});\n +})(this);// https://github.com/kriskowal/es5-shim\n \n define(\'ace/lib/es5-shim\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n @@ -1113,7 +973,8 @@ oop.inherits(Worker, Mirror);\n row: msg.line - 1,\n column: msg.col - 1,\n text: msg.message,\n - type: infoRules[msg.rule.id] ? "info" : msg.type\n + type: infoRules[msg.rule.id] ? "info" : msg.type,\n + rule: msg.rule.name\n }\n }));\n };\n @@ -1122,6 +983,32 @@ oop.inherits(Worker, Mirror);\n \n });\n \n +define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +exports.inherits = (function() {\n + var tempCtor = function() {};\n + return function(ctor, superCtor) {\n + tempCtor.prototype = superCtor.prototype;\n + ctor.super_ = superCtor.prototype;\n + ctor.prototype = new tempCtor();\n + ctor.prototype.constructor = ctor;\n + };\n +}());\n +\n +exports.mixin = function(obj, mixin) {\n + for (var key in mixin) {\n + obj[key] = mixin[key];\n + }\n + return obj;\n +};\n +\n +exports.implement = function(proto, mixin) {\n + exports.mixin(proto, mixin);\n +};\n +\n +});\n +\n define(\'ace/lib/lang\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n \n @@ -1427,7 +1314,7 @@ var Document = function(text) {\n };\n this.getTextRange = function(range) {\n if (range.start.row == range.end.row) {\n - return this.$lines[range.start.row]\n + return this.getLine(range.start.row)\n .substring(range.start.column, range.end.column);\n }\n var lines = this.getLines(range.start.row, range.end.row);\n @@ -1538,6 +1425,8 @@ var Document = function(text) {\n return end;\n };\n this.remove = function(range) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n range.start = this.$clipPosition(range.start);\n range.end = this.$clipPosition(range.end);\n \n @@ -1621,6 +1510,8 @@ var Document = function(text) {\n this._emit("change", { data: delta });\n };\n this.replace = function(range, text) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n if (text.length == 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n @@ -1693,6 +1584,132 @@ var Document = function(text) {\n exports.Document = Document;\n });\n \n +define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +var EventEmitter = {};\n +var stopPropagation = function() { this.propagationStopped = true; };\n +var preventDefault = function() { this.defaultPrevented = true; };\n +\n +EventEmitter._emit =\n +EventEmitter._dispatchEvent = function(eventName, e) {\n + this._eventRegistry || (this._eventRegistry = {});\n + this._defaultHandlers || (this._defaultHandlers = {});\n +\n + var listeners = this._eventRegistry[eventName] || [];\n + var defaultHandler = this._defaultHandlers[eventName];\n + if (!listeners.length && !defaultHandler)\n + return;\n +\n + if (typeof e != "object" || !e)\n + e = {};\n +\n + if (!e.type)\n + e.type = eventName;\n + if (!e.stopPropagation)\n + e.stopPropagation = stopPropagation;\n + if (!e.preventDefault)\n + e.preventDefault = preventDefault;\n +\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++) {\n + listeners[i](e, this);\n + if (e.propagationStopped)\n + break;\n + }\n + \n + if (defaultHandler && !e.defaultPrevented)\n + return defaultHandler(e, this);\n +};\n +\n +\n +EventEmitter._signal = function(eventName, e) {\n + var listeners = (this._eventRegistry || {})[eventName];\n + if (!listeners)\n + return;\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++)\n + listeners[i](e, this);\n +};\n +\n +EventEmitter.once = function(eventName, callback) {\n + var _self = this;\n + callback && this.addEventListener(eventName, function newCallback() {\n + _self.removeEventListener(eventName, newCallback);\n + callback.apply(null, arguments);\n + });\n +};\n +\n +\n +EventEmitter.setDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + handlers = this._defaultHandlers = {_disabled_: {}};\n + \n + if (handlers[eventName]) {\n + var old = handlers[eventName];\n + var disabled = handlers._disabled_[eventName];\n + if (!disabled)\n + handlers._disabled_[eventName] = disabled = [];\n + disabled.push(old);\n + var i = disabled.indexOf(callback);\n + if (i != -1) \n + disabled.splice(i, 1);\n + }\n + handlers[eventName] = callback;\n +};\n +EventEmitter.removeDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + return;\n + var disabled = handlers._disabled_[eventName];\n + \n + if (handlers[eventName] == callback) {\n + var old = handlers[eventName];\n + if (disabled)\n + this.setDefaultHandler(eventName, disabled.pop());\n + } else if (disabled) {\n + var i = disabled.indexOf(callback);\n + if (i != -1)\n + disabled.splice(i, 1);\n + }\n +};\n +\n +EventEmitter.on =\n +EventEmitter.addEventListener = function(eventName, callback, capturing) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + listeners = this._eventRegistry[eventName] = [];\n +\n + if (listeners.indexOf(callback) == -1)\n + listeners[capturing ? "unshift" : "push"](callback);\n + return callback;\n +};\n +\n +EventEmitter.off =\n +EventEmitter.removeListener =\n +EventEmitter.removeEventListener = function(eventName, callback) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + return;\n +\n + var index = listeners.indexOf(callback);\n + if (index !== -1)\n + listeners.splice(index, 1);\n +};\n +\n +EventEmitter.removeAllListeners = function(eventName) {\n + if (this._eventRegistry) this._eventRegistry[eventName] = [];\n +};\n +\n +exports.EventEmitter = EventEmitter;\n +\n +});\n +\n define(\'ace/range\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n var comparePoints = function(p1, p2) {\n @@ -1939,29 +1956,25 @@ var oop = require("./lib/oop");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n \n var Anchor = exports.Anchor = function(doc, row, column) {\n - this.document = doc;\n -\n + this.$onChange = this.onChange.bind(this);\n + this.attach(doc);\n + \n if (typeof column == "undefined")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n -\n - this.$onChange = this.onChange.bind(this);\n - doc.on("change", this.$onChange);\n };\n \n (function() {\n \n oop.implement(this, EventEmitter);\n -\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n -\n this.getDocument = function() {\n return this.document;\n };\n -\n + this.$insertRight = false;\n this.onChange = function(e) {\n var delta = e.data;\n var range = delta.range;\n @@ -1982,7 +1995,8 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n if (delta.action === "insertText") {\n if (start.row === row && start.column <= column) {\n - if (start.row === end.row) {\n + if (start.column === column && this.$insertRight) {\n + } else if (start.row === end.row) {\n column += end.column - start.column;\n } else {\n column -= start.column;\n @@ -2023,7 +2037,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n this.setPosition(row, column, true);\n };\n -\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n @@ -2050,10 +2063,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n value: pos\n });\n };\n -\n this.detach = function() {\n this.document.removeEventListener("change", this.$onChange);\n };\n + this.attach = function(doc) {\n + this.document = doc || this.document;\n + this.document.on("change", this.$onChange);\n + };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n \n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-javascript.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-javascript.js.xml index ed5abf0688..84809ba443 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-javascript.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-javascript.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155570.31</string> </value> + <value> <string>ts83646620.53</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>163954</int> </value> + <value> <int>262743</int> </value> </item> <item> <key> <string>title</string> </key> @@ -55,31 +55,30 @@ if (typeof window.window != "undefined" && window.document) {\n return;\n }\n \n -window.console = {\n - log: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - },\n - error: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - }\n +window.console = function() {\n + var msgs = Array.prototype.slice.call(arguments, 0);\n + postMessage({type: "log", data: msgs});\n };\n +window.console.error =\n +window.console.warn = \n +window.console.log =\n +window.console.trace = window.console;\n +\n window.window = window;\n window.ace = window;\n \n window.normalizeModule = function(parentId, moduleName) {\n if (moduleName.indexOf("!") !== -1) {\n var chunks = moduleName.split("!");\n - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);\n + return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);\n }\n if (moduleName.charAt(0) == ".") {\n var base = parentId.split("/").slice(0, -1).join("/");\n - moduleName = base + "/" + moduleName;\n + moduleName = (base ? base + "/" : "") + moduleName;\n \n while(moduleName.indexOf(".") !== -1 && previous != moduleName) {\n var previous = moduleName;\n - moduleName = moduleName.replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n + moduleName = moduleName.replace(/^\\.\\//, "").replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n }\n }\n \n @@ -94,9 +93,9 @@ window.require = function(parentId, id) {\n if (!id.charAt)\n throw new Error("worker.js require() accepts only (parentId, id) as arguments");\n \n - id = normalizeModule(parentId, id);\n + id = window.normalizeModule(parentId, id);\n \n - var module = require.modules[id];\n + var module = window.require.modules[id];\n if (module) {\n if (!module.initialized) {\n module.initialized = true;\n @@ -106,48 +105,60 @@ window.require = function(parentId, id) {\n }\n \n var chunks = id.split("/");\n - chunks[0] = require.tlns[chunks[0]] || chunks[0];\n + if (!window.require.tlns)\n + return console.log("unable to load " + id);\n + chunks[0] = window.require.tlns[chunks[0]] || chunks[0];\n var path = chunks.join("/") + ".js";\n \n - require.id = id;\n + window.require.id = id;\n importScripts(path);\n - return require(parentId, id);\n + return window.require(parentId, id);\n };\n -\n -require.modules = {};\n -require.tlns = {};\n +window.require.modules = {};\n +window.require.tlns = {};\n \n window.define = function(id, deps, factory) {\n if (arguments.length == 2) {\n factory = deps;\n if (typeof id != "string") {\n deps = id;\n - id = require.id;\n + id = window.require.id;\n }\n } else if (arguments.length == 1) {\n factory = id;\n - id = require.id;\n + deps = []\n + id = window.require.id;\n }\n +\n + if (!deps.length)\n + deps = [\'require\', \'exports\', \'module\']\n \n if (id.indexOf("text!") === 0) \n return;\n \n - var req = function(deps, factory) {\n - return require(id, deps, factory);\n + var req = function(childId) {\n + return window.require(id, childId);\n };\n \n - require.modules[id] = {\n + window.require.modules[id] = {\n + exports: {},\n factory: function() {\n - var module = {\n - exports: {}\n - };\n - var returnExports = factory(req, module.exports, module);\n + var module = this;\n + var returnExports = factory.apply(this, deps.map(function(dep) {\n + switch(dep) {\n + case \'require\': return req\n + case \'exports\': return module.exports\n + case \'module\': return module\n + default: return req(dep)\n + }\n + }));\n if (returnExports)\n module.exports = returnExports;\n return module;\n }\n };\n };\n +window.define.amd = {}\n \n window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n require.tlns = topLevelNamespaces;\n @@ -155,8 +166,8 @@ window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n \n window.initSender = function initSender() {\n \n - var EventEmitter = require("ace/lib/event_emitter").EventEmitter;\n - var oop = require("ace/lib/oop");\n + var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;\n + var oop = window.require("ace/lib/oop");\n \n var Sender = function() {};\n \n @@ -207,158 +218,7 @@ window.onmessage = function(e) {\n sender._emit(msg.event, msg.data);\n }\n };\n -})(this);\n -\n -define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -var EventEmitter = {};\n -var stopPropagation = function() { this.propagationStopped = true; };\n -var preventDefault = function() { this.defaultPrevented = true; };\n -\n -EventEmitter._emit =\n -EventEmitter._dispatchEvent = function(eventName, e) {\n - this._eventRegistry || (this._eventRegistry = {});\n - this._defaultHandlers || (this._defaultHandlers = {});\n -\n - var listeners = this._eventRegistry[eventName] || [];\n - var defaultHandler = this._defaultHandlers[eventName];\n - if (!listeners.length && !defaultHandler)\n - return;\n -\n - if (typeof e != "object" || !e)\n - e = {};\n -\n - if (!e.type)\n - e.type = eventName;\n - if (!e.stopPropagation)\n - e.stopPropagation = stopPropagation;\n - if (!e.preventDefault)\n - e.preventDefault = preventDefault;\n -\n - for (var i=0; i<listeners.length; i++) {\n - listeners[i](e, this);\n - if (e.propagationStopped)\n - break;\n - }\n - \n - if (defaultHandler && !e.defaultPrevented)\n - return defaultHandler(e, this);\n -};\n -\n -\n -EventEmitter._signal = function(eventName, e) {\n - var listeners = (this._eventRegistry || {})[eventName];\n - if (!listeners)\n - return;\n -\n - for (var i=0; i<listeners.length; i++)\n - listeners[i](e, this);\n -};\n -\n -EventEmitter.once = function(eventName, callback) {\n - var _self = this;\n - callback && this.addEventListener(eventName, function newCallback() {\n - _self.removeEventListener(eventName, newCallback);\n - callback.apply(null, arguments);\n - });\n -};\n -\n -\n -EventEmitter.setDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - handlers = this._defaultHandlers = {_disabled_: {}};\n - \n - if (handlers[eventName]) {\n - var old = handlers[eventName];\n - var disabled = handlers._disabled_[eventName];\n - if (!disabled)\n - handlers._disabled_[eventName] = disabled = [];\n - disabled.push(old);\n - var i = disabled.indexOf(callback);\n - if (i != -1) \n - disabled.splice(i, 1);\n - }\n - handlers[eventName] = callback;\n -};\n -EventEmitter.removeDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - return;\n - var disabled = handlers._disabled_[eventName];\n - \n - if (handlers[eventName] == callback) {\n - var old = handlers[eventName];\n - if (disabled)\n - this.setDefaultHandler(eventName, disabled.pop());\n - } else if (disabled) {\n - var i = disabled.indexOf(callback);\n - if (i != -1)\n - disabled.splice(i, 1);\n - }\n -};\n -\n -EventEmitter.on =\n -EventEmitter.addEventListener = function(eventName, callback, capturing) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - listeners = this._eventRegistry[eventName] = [];\n -\n - if (listeners.indexOf(callback) == -1)\n - listeners[capturing ? "unshift" : "push"](callback);\n - return callback;\n -};\n -\n -EventEmitter.off =\n -EventEmitter.removeListener =\n -EventEmitter.removeEventListener = function(eventName, callback) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - return;\n -\n - var index = listeners.indexOf(callback);\n - if (index !== -1)\n - listeners.splice(index, 1);\n -};\n -\n -EventEmitter.removeAllListeners = function(eventName) {\n - if (this._eventRegistry) this._eventRegistry[eventName] = [];\n -};\n -\n -exports.EventEmitter = EventEmitter;\n -\n -});\n -\n -define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -exports.inherits = (function() {\n - var tempCtor = function() {};\n - return function(ctor, superCtor) {\n - tempCtor.prototype = superCtor.prototype;\n - ctor.super_ = superCtor.prototype;\n - ctor.prototype = new tempCtor();\n - ctor.prototype.constructor = ctor;\n - };\n -}());\n -\n -exports.mixin = function(obj, mixin) {\n - for (var key in mixin) {\n - obj[key] = mixin[key];\n - }\n - return obj;\n -};\n -\n -exports.implement = function(proto, mixin) {\n - exports.mixin(proto, mixin);\n -};\n -\n -});\n +})(this);// https://github.com/kriskowal/es5-shim\n \n define(\'ace/lib/es5-shim\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n @@ -1106,8 +966,8 @@ oop.inherits(JavaScriptWorker, Mirror);\n (function() {\n this.setOptions = function(options) {\n this.options = options || {\n - es5: true,\n esnext: true,\n + moz: true,\n devel: true,\n browser: true,\n node: true,\n @@ -1204,6 +1064,32 @@ oop.inherits(JavaScriptWorker, Mirror);\n }).call(JavaScriptWorker.prototype);\n \n });\n +\n +define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +exports.inherits = (function() {\n + var tempCtor = function() {};\n + return function(ctor, superCtor) {\n + tempCtor.prototype = superCtor.prototype;\n + ctor.super_ = superCtor.prototype;\n + ctor.prototype = new tempCtor();\n + ctor.prototype.constructor = ctor;\n + };\n +}());\n +\n +exports.mixin = function(obj, mixin) {\n + for (var key in mixin) {\n + obj[key] = mixin[key];\n + }\n + return obj;\n +};\n +\n +exports.implement = function(proto, mixin) {\n + exports.mixin(proto, mixin);\n +};\n +\n +});\n define(\'ace/worker/mirror\', [\'require\', \'exports\', \'module\' , \'ace/document\', \'ace/lib/lang\'], function(require, exports, module) {\n \n \n @@ -1333,7 +1219,7 @@ var Document = function(text) {\n };\n this.getTextRange = function(range) {\n if (range.start.row == range.end.row) {\n - return this.$lines[range.start.row]\n + return this.getLine(range.start.row)\n .substring(range.start.column, range.end.column);\n }\n var lines = this.getLines(range.start.row, range.end.row);\n @@ -1444,6 +1330,8 @@ var Document = function(text) {\n return end;\n };\n this.remove = function(range) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n range.start = this.$clipPosition(range.start);\n range.end = this.$clipPosition(range.end);\n \n @@ -1527,6 +1415,8 @@ var Document = function(text) {\n this._emit("change", { data: delta });\n };\n this.replace = function(range, text) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n if (text.length == 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n @@ -1599,45 +1489,171 @@ var Document = function(text) {\n exports.Document = Document;\n });\n \n -define(\'ace/range\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n -var comparePoints = function(p1, p2) {\n - return p1.row - p2.row || p1.column - p2.column;\n -};\n -var Range = function(startRow, startColumn, endRow, endColumn) {\n - this.start = {\n - row: startRow,\n - column: startColumn\n - };\n \n - this.end = {\n - row: endRow,\n - column: endColumn\n - };\n +var EventEmitter = {};\n +var stopPropagation = function() { this.propagationStopped = true; };\n +var preventDefault = function() { this.defaultPrevented = true; };\n +\n +EventEmitter._emit =\n +EventEmitter._dispatchEvent = function(eventName, e) {\n + this._eventRegistry || (this._eventRegistry = {});\n + this._defaultHandlers || (this._defaultHandlers = {});\n +\n + var listeners = this._eventRegistry[eventName] || [];\n + var defaultHandler = this._defaultHandlers[eventName];\n + if (!listeners.length && !defaultHandler)\n + return;\n +\n + if (typeof e != "object" || !e)\n + e = {};\n +\n + if (!e.type)\n + e.type = eventName;\n + if (!e.stopPropagation)\n + e.stopPropagation = stopPropagation;\n + if (!e.preventDefault)\n + e.preventDefault = preventDefault;\n +\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++) {\n + listeners[i](e, this);\n + if (e.propagationStopped)\n + break;\n + }\n + \n + if (defaultHandler && !e.defaultPrevented)\n + return defaultHandler(e, this);\n };\n \n -(function() {\n - this.isEqual = function(range) {\n - return this.start.row === range.start.row &&\n - this.end.row === range.end.row &&\n - this.start.column === range.start.column &&\n - this.end.column === range.end.column;\n - };\n - this.toString = function() {\n - return ("Range: [" + this.start.row + "/" + this.start.column +\n - "] -> [" + this.end.row + "/" + this.end.column + "]");\n - };\n \n - this.contains = function(row, column) {\n - return this.compare(row, column) == 0;\n - };\n - this.compareRange = function(range) {\n - var cmp,\n - end = range.end,\n - start = range.start;\n +EventEmitter._signal = function(eventName, e) {\n + var listeners = (this._eventRegistry || {})[eventName];\n + if (!listeners)\n + return;\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++)\n + listeners[i](e, this);\n +};\n \n - cmp = this.compare(end.row, end.column);\n - if (cmp == 1) {\n +EventEmitter.once = function(eventName, callback) {\n + var _self = this;\n + callback && this.addEventListener(eventName, function newCallback() {\n + _self.removeEventListener(eventName, newCallback);\n + callback.apply(null, arguments);\n + });\n +};\n +\n +\n +EventEmitter.setDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + handlers = this._defaultHandlers = {_disabled_: {}};\n + \n + if (handlers[eventName]) {\n + var old = handlers[eventName];\n + var disabled = handlers._disabled_[eventName];\n + if (!disabled)\n + handlers._disabled_[eventName] = disabled = [];\n + disabled.push(old);\n + var i = disabled.indexOf(callback);\n + if (i != -1) \n + disabled.splice(i, 1);\n + }\n + handlers[eventName] = callback;\n +};\n +EventEmitter.removeDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + return;\n + var disabled = handlers._disabled_[eventName];\n + \n + if (handlers[eventName] == callback) {\n + var old = handlers[eventName];\n + if (disabled)\n + this.setDefaultHandler(eventName, disabled.pop());\n + } else if (disabled) {\n + var i = disabled.indexOf(callback);\n + if (i != -1)\n + disabled.splice(i, 1);\n + }\n +};\n +\n +EventEmitter.on =\n +EventEmitter.addEventListener = function(eventName, callback, capturing) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + listeners = this._eventRegistry[eventName] = [];\n +\n + if (listeners.indexOf(callback) == -1)\n + listeners[capturing ? "unshift" : "push"](callback);\n + return callback;\n +};\n +\n +EventEmitter.off =\n +EventEmitter.removeListener =\n +EventEmitter.removeEventListener = function(eventName, callback) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + return;\n +\n + var index = listeners.indexOf(callback);\n + if (index !== -1)\n + listeners.splice(index, 1);\n +};\n +\n +EventEmitter.removeAllListeners = function(eventName) {\n + if (this._eventRegistry) this._eventRegistry[eventName] = [];\n +};\n +\n +exports.EventEmitter = EventEmitter;\n +\n +});\n +\n +define(\'ace/range\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +var comparePoints = function(p1, p2) {\n + return p1.row - p2.row || p1.column - p2.column;\n +};\n +var Range = function(startRow, startColumn, endRow, endColumn) {\n + this.start = {\n + row: startRow,\n + column: startColumn\n + };\n +\n + this.end = {\n + row: endRow,\n + column: endColumn\n + };\n +};\n +\n +(function() {\n + this.isEqual = function(range) {\n + return this.start.row === range.start.row &&\n + this.end.row === range.end.row &&\n + this.start.column === range.start.column &&\n + this.end.column === range.end.column;\n + };\n + this.toString = function() {\n + return ("Range: [" + this.start.row + "/" + this.start.column +\n + "] -> [" + this.end.row + "/" + this.end.column + "]");\n + };\n +\n + this.contains = function(row, column) {\n + return this.compare(row, column) == 0;\n + };\n + this.compareRange = function(range) {\n + var cmp,\n + end = range.end,\n + start = range.start;\n +\n + cmp = this.compare(end.row, end.column);\n + if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n @@ -1845,29 +1861,25 @@ var oop = require("./lib/oop");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n \n var Anchor = exports.Anchor = function(doc, row, column) {\n - this.document = doc;\n -\n + this.$onChange = this.onChange.bind(this);\n + this.attach(doc);\n + \n if (typeof column == "undefined")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n -\n - this.$onChange = this.onChange.bind(this);\n - doc.on("change", this.$onChange);\n };\n \n (function() {\n \n oop.implement(this, EventEmitter);\n -\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n -\n this.getDocument = function() {\n return this.document;\n };\n -\n + this.$insertRight = false;\n this.onChange = function(e) {\n var delta = e.data;\n var range = delta.range;\n @@ -1888,7 +1900,8 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n if (delta.action === "insertText") {\n if (start.row === row && start.column <= column) {\n - if (start.row === end.row) {\n + if (start.column === column && this.$insertRight) {\n + } else if (start.row === end.row) {\n column += end.column - start.column;\n } else {\n column -= start.column;\n @@ -1929,7 +1942,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n this.setPosition(row, column, true);\n };\n -\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n @@ -1956,10 +1968,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n value: pos\n });\n };\n -\n this.detach = function() {\n this.document.removeEventListener("change", this.$onChange);\n };\n + this.attach = function(doc) {\n + this.document = doc || this.document;\n + this.document.on("change", this.$onChange);\n + };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n \n @@ -2163,645 +2178,1900 @@ exports.delayedCall = function(fcn, defaultTimeout) {\n };\n });\n define(\'ace/mode/javascript/jshint\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +require = null;\n +require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module \'"+o+"\'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({\n +9:[function (req,module,exports){\n + ["log", "info", "warn", "error", \n + "time","timeEnd", "trace", "dir", "assert"\n + ].forEach(function(x) {exports[x] = nop;});\n + function nop() {}\n + },{}],\n +1:[function(req,module,exports){\n \n -var JSHINT = (function () {\n -\t\n -\n -\tvar anonname,\t\t// The guessed name for anonymous functions.\n -\n -\t\tbang = {\n -\t\t\t"<" : true,\n -\t\t\t"<=" : true,\n -\t\t\t"==" : true,\n -\t\t\t"===": true,\n -\t\t\t"!==": true,\n -\t\t\t"!=" : true,\n -\t\t\t">" : true,\n -\t\t\t">=" : true,\n -\t\t\t"+" : true,\n -\t\t\t"-" : true,\n -\t\t\t"*" : true,\n -\t\t\t"/" : true,\n -\t\t\t"%" : true\n -\t\t},\n -\t\tboolOptions = {\n -\t\t\tasi\t\t\t: true, // if automatic semicolon insertion should be tolerated\n -\t\t\tbitwise\t\t: true, // if bitwise operators should not be allowed\n -\t\t\tboss\t\t: true, // if advanced usage of assignments should be allowed\n -\t\t\tbrowser\t\t: true, // if the standard browser globals should be predefined\n -\t\t\tcamelcase\t: true, // if identifiers should be required in camel case\n -\t\t\tcouch\t\t: true, // if CouchDB globals should be predefined\n -\t\t\tcurly\t\t: true, // if curly braces around all blocks should be required\n -\t\t\tdebug\t\t: true, // if debugger statements should be allowed\n -\t\t\tdevel\t\t: true, // if logging globals should be predefined (console,\n -\t\t\tdojo\t\t: true, // if Dojo Toolkit globals should be predefined\n -\t\t\teqeqeq\t\t: true, // if === should be required\n -\t\t\teqnull\t\t: true, // if == null comparisons should be tolerated\n -\t\t\tes5\t\t\t: true, // if ES5 syntax should be allowed\n -\t\t\tesnext\t\t: true, // if es.next specific syntax should be allowed\n -\t\t\tevil\t\t: true, // if eval should be allowed\n -\t\t\texpr\t\t: true, // if ExpressionStatement should be allowed as Programs\n -\t\t\tforin\t\t: true, // if for in statements must filter\n -\t\t\tfuncscope\t: true, // if only function scope should be used for scope tests\n -\t\t\tglobalstrict: true, // if global should be allowed (also\n -\t\t\timmed\t\t: true, // if immediate invocations must be wrapped in parens\n -\t\t\titerator\t: true, // if the `__iterator__` property should be allowed\n -\t\t\tjquery\t\t: true, // if jQuery globals should be predefined\n -\t\t\tlastsemic\t: true, // if semicolons may be ommitted for the trailing\n -\t\t\tlatedef\t\t: true, // if the use before definition should not be tolerated\n -\t\t\tlaxbreak\t: true, // if line breaks should not be checked\n -\t\t\tlaxcomma\t: true, // if line breaks should not be checked around commas\n -\t\t\tloopfunc\t: true, // if functions should be allowed to be defined within\n -\t\t\tmootools\t: true, // if MooTools globals should be predefined\n -\t\t\tmultistr\t: true, // allow multiline strings\n -\t\t\tnewcap\t\t: true, // if constructor names must be capitalized\n -\t\t\tnoarg\t\t: true, // if arguments.caller and arguments.callee should be\n -\t\t\tnode\t\t: true, // if the Node.js environment globals should be\n -\t\t\tnoempty\t\t: true, // if empty blocks should be disallowed\n -\t\t\tnonew\t\t: true, // if using `new` for side-effects should be disallowed\n -\t\t\tnonstandard : true, // if non-standard (but widely adopted) globals should\n -\t\t\tnomen\t\t: true, // if names should be checked\n -\t\t\tonevar\t\t: true, // if only one var statement per function should be\n -\t\t\tonecase\t\t: true, // if one case switch statements should be allowed\n -\t\t\tpassfail\t: true, // if the scan should stop on first error\n -\t\t\tplusplus\t: true, // if increment/decrement should not be allowed\n -\t\t\tproto\t\t: true, // if the `__proto__` property should be allowed\n -\t\t\tprototypejs : true, // if Prototype and Scriptaculous globals should be\n -\t\t\tregexdash\t: true, // if unescaped first/last dash (-) inside brackets\n -\t\t\tregexp\t\t: true, // if the . should not be allowed in regexp literals\n -\t\t\trhino\t\t: true, // if the Rhino environment globals should be predefined\n -\t\t\tundef\t\t: true, // if variables should be declared before used\n -\t\t\tunused\t\t: true, // if variables should be always used\n -\t\t\tscripturl\t: true, // if script-targeted URLs should be tolerated\n -\t\t\tshadow\t\t: true, // if variable shadowing should be tolerated\n -\t\t\tsmarttabs\t: true, // if smarttabs should be tolerated\n -\t\t\tstrict\t\t: true, // require the pragma\n -\t\t\tsub\t\t\t: true, // if all forms of subscript notation are tolerated\n -\t\t\tsupernew\t: true, // if `new function () { ... };` and `new Object;`\n -\t\t\ttrailing\t: true, // if trailing whitespace rules apply\n -\t\t\tvalidthis\t: true, // if \'this\' inside a non-constructor function is valid.\n -\t\t\twithstmt\t: true, // if with statements should be allowed\n -\t\t\twhite\t\t: true, // if strict whitespace rules apply\n -\t\t\tworker\t\t: true, // if Web Worker script symbols should be allowed\n -\t\t\twsh\t\t\t: true, // if the Windows Scripting Host environment globals\n -\t\t\tyui\t\t\t: true\t// YUI variables should be predefined\n -\t\t},\n -\t\tvalOptions = {\n -\t\t\tmaxlen\t\t : false,\n -\t\t\tindent\t\t : false,\n -\t\t\tmaxerr\t\t : false,\n -\t\t\tpredef\t\t : false,\n -\t\t\tquotmark\t : false, //\'single\'|\'double\'|true\n -\t\t\tscope\t\t : false,\n -\t\t\tmaxstatements: false, // {int} max statements per function\n -\t\t\tmaxdepth\t : false, // {int} max nested block depth per function\n -\t\t\tmaxparams\t : false, // {int} max params per function\n -\t\t\tmaxcomplexity: false // {int} max cyclomatic complexity per function\n -\t\t},\n -\t\tinvertedOptions = {\n -\t\t\tbitwise\t\t: true,\n -\t\t\tforin\t\t: true,\n -\t\t\tnewcap\t\t: true,\n -\t\t\tnomen\t\t: true,\n -\t\t\tplusplus\t: true,\n -\t\t\tregexp\t\t: true,\n -\t\t\tundef\t\t: true,\n -\t\t\twhite\t\t: true,\n -\t\t\teqeqeq\t\t: true,\n -\t\t\tonevar\t\t: true\n -\t\t},\n -\t\trenamedOptions = {\n -\t\t\teqeq\t\t: "eqeqeq",\n -\t\t\tvars\t\t: "onevar",\n -\t\t\twindows\t\t: "wsh"\n -\t\t},\n -\t\tbrowser = {\n -\t\t\tArrayBuffer\t\t\t\t :\tfalse,\n -\t\t\tArrayBufferView\t\t\t :\tfalse,\n -\t\t\tAudio\t\t\t\t\t :\tfalse,\n -\t\t\tBlob\t\t\t\t\t :\tfalse,\n -\t\t\taddEventListener\t\t :\tfalse,\n -\t\t\tapplicationCache\t\t :\tfalse,\n -\t\t\tatob\t\t\t\t\t :\tfalse,\n -\t\t\tblur\t\t\t\t\t :\tfalse,\n -\t\t\tbtoa\t\t\t\t\t :\tfalse,\n -\t\t\tclearInterval\t\t\t :\tfalse,\n -\t\t\tclearTimeout\t\t\t :\tfalse,\n -\t\t\tclose\t\t\t\t\t :\tfalse,\n -\t\t\tclosed\t\t\t\t\t :\tfalse,\n -\t\t\tDataView\t\t\t\t :\tfalse,\n -\t\t\tDOMParser\t\t\t\t :\tfalse,\n -\t\t\tdefaultStatus\t\t\t :\tfalse,\n -\t\t\tdocument\t\t\t\t :\tfalse,\n -\t\t\tevent\t\t\t\t\t :\tfalse,\n -\t\t\tFileReader\t\t\t\t :\tfalse,\n -\t\t\tFloat32Array\t\t\t :\tfalse,\n -\t\t\tFloat64Array\t\t\t :\tfalse,\n -\t\t\tFormData\t\t\t\t :\tfalse,\n -\t\t\tfocus\t\t\t\t\t :\tfalse,\n -\t\t\tframes\t\t\t\t\t :\tfalse,\n -\t\t\tgetComputedStyle\t\t :\tfalse,\n -\t\t\tHTMLElement\t\t\t\t :\tfalse,\n -\t\t\tHTMLAnchorElement\t\t :\tfalse,\n -\t\t\tHTMLBaseElement\t\t\t :\tfalse,\n -\t\t\tHTMLBlockquoteElement\t :\tfalse,\n -\t\t\tHTMLBodyElement\t\t\t :\tfalse,\n -\t\t\tHTMLBRElement\t\t\t :\tfalse,\n -\t\t\tHTMLButtonElement\t\t :\tfalse,\n -\t\t\tHTMLCanvasElement\t\t :\tfalse,\n -\t\t\tHTMLDirectoryElement\t :\tfalse,\n -\t\t\tHTMLDivElement\t\t\t :\tfalse,\n -\t\t\tHTMLDListElement\t\t :\tfalse,\n -\t\t\tHTMLFieldSetElement\t\t :\tfalse,\n -\t\t\tHTMLFontElement\t\t\t :\tfalse,\n -\t\t\tHTMLFormElement\t\t\t :\tfalse,\n -\t\t\tHTMLFrameElement\t\t :\tfalse,\n -\t\t\tHTMLFrameSetElement\t\t :\tfalse,\n -\t\t\tHTMLHeadElement\t\t\t :\tfalse,\n -\t\t\tHTMLHeadingElement\t\t :\tfalse,\n -\t\t\tHTMLHRElement\t\t\t :\tfalse,\n -\t\t\tHTMLHtmlElement\t\t\t :\tfalse,\n -\t\t\tHTMLIFrameElement\t\t :\tfalse,\n -\t\t\tHTMLImageElement\t\t :\tfalse,\n -\t\t\tHTMLInputElement\t\t :\tfalse,\n -\t\t\tHTMLIsIndexElement\t\t :\tfalse,\n -\t\t\tHTMLLabelElement\t\t :\tfalse,\n -\t\t\tHTMLLayerElement\t\t :\tfalse,\n -\t\t\tHTMLLegendElement\t\t :\tfalse,\n -\t\t\tHTMLLIElement\t\t\t :\tfalse,\n -\t\t\tHTMLLinkElement\t\t\t :\tfalse,\n -\t\t\tHTMLMapElement\t\t\t :\tfalse,\n -\t\t\tHTMLMenuElement\t\t\t :\tfalse,\n -\t\t\tHTMLMetaElement\t\t\t :\tfalse,\n -\t\t\tHTMLModElement\t\t\t :\tfalse,\n -\t\t\tHTMLObjectElement\t\t :\tfalse,\n -\t\t\tHTMLOListElement\t\t :\tfalse,\n -\t\t\tHTMLOptGroupElement\t\t :\tfalse,\n -\t\t\tHTMLOptionElement\t\t :\tfalse,\n -\t\t\tHTMLParagraphElement\t :\tfalse,\n -\t\t\tHTMLParamElement\t\t :\tfalse,\n -\t\t\tHTMLPreElement\t\t\t :\tfalse,\n -\t\t\tHTMLQuoteElement\t\t :\tfalse,\n -\t\t\tHTMLScriptElement\t\t :\tfalse,\n -\t\t\tHTMLSelectElement\t\t :\tfalse,\n -\t\t\tHTMLStyleElement\t\t :\tfalse,\n -\t\t\tHTMLTableCaptionElement :\tfalse,\n -\t\t\tHTMLTableCellElement\t :\tfalse,\n -\t\t\tHTMLTableColElement\t\t :\tfalse,\n -\t\t\tHTMLTableElement\t\t :\tfalse,\n -\t\t\tHTMLTableRowElement\t\t :\tfalse,\n -\t\t\tHTMLTableSectionElement :\tfalse,\n -\t\t\tHTMLTextAreaElement\t\t :\tfalse,\n -\t\t\tHTMLTitleElement\t\t :\tfalse,\n -\t\t\tHTMLUListElement\t\t :\tfalse,\n -\t\t\tHTMLVideoElement\t\t :\tfalse,\n -\t\t\thistory\t\t\t\t\t :\tfalse,\n -\t\t\tInt16Array\t\t\t\t :\tfalse,\n -\t\t\tInt32Array\t\t\t\t :\tfalse,\n -\t\t\tInt8Array\t\t\t\t :\tfalse,\n -\t\t\tImage\t\t\t\t\t :\tfalse,\n -\t\t\tlength\t\t\t\t\t :\tfalse,\n -\t\t\tlocalStorage\t\t\t :\tfalse,\n -\t\t\tlocation\t\t\t\t :\tfalse,\n -\t\t\tMessageChannel\t\t\t :\tfalse,\n -\t\t\tMessageEvent\t\t\t :\tfalse,\n -\t\t\tMessagePort\t\t\t\t :\tfalse,\n -\t\t\tmoveBy\t\t\t\t\t :\tfalse,\n -\t\t\tmoveTo\t\t\t\t\t :\tfalse,\n -\t\t\tMutationObserver\t\t :\tfalse,\n -\t\t\tname\t\t\t\t\t :\tfalse,\n -\t\t\tNode\t\t\t\t\t :\tfalse,\n -\t\t\tNodeFilter\t\t\t\t :\tfalse,\n -\t\t\tnavigator\t\t\t\t :\tfalse,\n -\t\t\tonbeforeunload\t\t\t :\ttrue,\n -\t\t\tonblur\t\t\t\t\t :\ttrue,\n -\t\t\tonerror\t\t\t\t\t :\ttrue,\n -\t\t\tonfocus\t\t\t\t\t :\ttrue,\n -\t\t\tonload\t\t\t\t\t :\ttrue,\n -\t\t\tonresize\t\t\t\t :\ttrue,\n -\t\t\tonunload\t\t\t\t :\ttrue,\n -\t\t\topen\t\t\t\t\t :\tfalse,\n -\t\t\topenDatabase\t\t\t :\tfalse,\n -\t\t\topener\t\t\t\t\t :\tfalse,\n -\t\t\tOption\t\t\t\t\t :\tfalse,\n -\t\t\tparent\t\t\t\t\t :\tfalse,\n -\t\t\tprint\t\t\t\t\t :\tfalse,\n -\t\t\tremoveEventListener\t\t :\tfalse,\n -\t\t\tresizeBy\t\t\t\t :\tfalse,\n -\t\t\tresizeTo\t\t\t\t :\tfalse,\n -\t\t\tscreen\t\t\t\t\t :\tfalse,\n -\t\t\tscroll\t\t\t\t\t :\tfalse,\n -\t\t\tscrollBy\t\t\t\t :\tfalse,\n -\t\t\tscrollTo\t\t\t\t :\tfalse,\n -\t\t\tsessionStorage\t\t\t :\tfalse,\n -\t\t\tsetInterval\t\t\t\t :\tfalse,\n -\t\t\tsetTimeout\t\t\t\t :\tfalse,\n -\t\t\tSharedWorker\t\t\t :\tfalse,\n -\t\t\tstatus\t\t\t\t\t :\tfalse,\n -\t\t\ttop\t\t\t\t\t\t :\tfalse,\n -\t\t\tUint16Array\t\t\t\t :\tfalse,\n -\t\t\tUint32Array\t\t\t\t :\tfalse,\n -\t\t\tUint8Array\t\t\t\t :\tfalse,\n -\t\t\tWebSocket\t\t\t\t :\tfalse,\n -\t\t\twindow\t\t\t\t\t :\tfalse,\n -\t\t\tWorker\t\t\t\t\t :\tfalse,\n -\t\t\tXMLHttpRequest\t\t\t :\tfalse,\n -\t\t\tXMLSerializer\t\t\t :\tfalse,\n -\t\t\tXPathEvaluator\t\t\t :\tfalse,\n -\t\t\tXPathException\t\t\t :\tfalse,\n -\t\t\tXPathExpression\t\t\t :\tfalse,\n -\t\t\tXPathNamespace\t\t\t :\tfalse,\n -\t\t\tXPathNSResolver\t\t\t :\tfalse,\n -\t\t\tXPathResult\t\t\t\t :\tfalse\n -\t\t},\n -\n -\t\tcouch = {\n -\t\t\t"require" : false,\n -\t\t\trespond : false,\n -\t\t\tgetRow\t : false,\n -\t\t\temit\t : false,\n -\t\t\tsend\t : false,\n -\t\t\tstart\t : false,\n -\t\t\tsum\t\t : false,\n -\t\t\tlog\t\t : false,\n -\t\t\texports : false,\n -\t\t\tmodule\t : false,\n -\t\t\tprovides : false\n -\t\t},\n -\n -\t\tdeclared, // Globals that were declared using /*global ... */ syntax.\n -\n -\t\tdevel = {\n -\t\t\talert\t: false,\n -\t\t\tconfirm : false,\n -\t\t\tconsole : false,\n -\t\t\tDebug\t: false,\n -\t\t\topera\t: false,\n -\t\t\tprompt\t: false\n -\t\t},\n -\n -\t\tdojo = {\n -\t\t\tdojo\t : false,\n -\t\t\tdijit\t : false,\n -\t\t\tdojox\t : false,\n -\t\t\tdefine\t : false,\n -\t\t\t"require" : false\n -\t\t},\n -\n -\t\tfunct,\t\t\t// The current function\n -\n -\t\tfunctionicity = [\n -\t\t\t"closure", "exception", "global", "label",\n -\t\t\t"outer", "unused", "var"\n -\t\t],\n -\n -\t\tfunctions,\t\t// All of the functions\n -\n -\t\tglobal,\t\t\t// The global scope\n -\t\timplied,\t\t// Implied globals\n -\t\tinblock,\n -\t\tindent,\n -\t\tjsonmode,\n -\n -\t\tjquery = {\n -\t\t\t"$" : false,\n -\t\t\tjQuery : false\n -\t\t},\n -\n -\t\tlines,\n -\t\tlookahead,\n -\t\tmember,\n -\t\tmembersOnly,\n -\n -\t\tmootools = {\n -\t\t\t"$"\t\t\t\t: false,\n -\t\t\t"$$"\t\t\t: false,\n -\t\t\tAsset\t\t\t: false,\n -\t\t\tBrowser\t\t\t: false,\n -\t\t\tChain\t\t\t: false,\n -\t\t\tClass\t\t\t: false,\n -\t\t\tColor\t\t\t: false,\n -\t\t\tCookie\t\t\t: false,\n -\t\t\tCore\t\t\t: false,\n -\t\t\tDocument\t\t: false,\n -\t\t\tDomReady\t\t: false,\n -\t\t\tDOMEvent\t\t: false,\n -\t\t\tDOMReady\t\t: false,\n -\t\t\tDrag\t\t\t: false,\n -\t\t\tElement\t\t\t: false,\n -\t\t\tElements\t\t: false,\n -\t\t\tEvent\t\t\t: false,\n -\t\t\tEvents\t\t\t: false,\n -\t\t\tFx\t\t\t\t: false,\n -\t\t\tGroup\t\t\t: false,\n -\t\t\tHash\t\t\t: false,\n -\t\t\tHtmlTable\t\t: false,\n -\t\t\tIframe\t\t\t: false,\n -\t\t\tIframeShim\t\t: false,\n -\t\t\tInputValidator\t: false,\n -\t\t\tinstanceOf\t\t: false,\n -\t\t\tKeyboard\t\t: false,\n -\t\t\tLocale\t\t\t: false,\n -\t\t\tMask\t\t\t: false,\n -\t\t\tMooTools\t\t: false,\n -\t\t\tNative\t\t\t: false,\n -\t\t\tOptions\t\t\t: false,\n -\t\t\tOverText\t\t: false,\n -\t\t\tRequest\t\t\t: false,\n -\t\t\tScroller\t\t: false,\n -\t\t\tSlick\t\t\t: false,\n -\t\t\tSlider\t\t\t: false,\n -\t\t\tSortables\t\t: false,\n -\t\t\tSpinner\t\t\t: false,\n -\t\t\tSwiff\t\t\t: false,\n -\t\t\tTips\t\t\t: false,\n -\t\t\tType\t\t\t: false,\n -\t\t\ttypeOf\t\t\t: false,\n -\t\t\tURI\t\t\t\t: false,\n -\t\t\tWindow\t\t\t: false\n -\t\t},\n +(function() {\n + var root = this;\n + var previousUnderscore = root._;\n + var breaker = {};\n + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n + var push = ArrayProto.push,\n + slice = ArrayProto.slice,\n + concat = ArrayProto.concat,\n + toString = ObjProto.toString,\n + hasOwnProperty = ObjProto.hasOwnProperty;\n + var\n + nativeForEach = ArrayProto.forEach,\n + nativeMap = ArrayProto.map,\n + nativeReduce = ArrayProto.reduce,\n + nativeReduceRight = ArrayProto.reduceRight,\n + nativeFilter = ArrayProto.filter,\n + nativeEvery = ArrayProto.every,\n + nativeSome = ArrayProto.some,\n + nativeIndexOf = ArrayProto.indexOf,\n + nativeLastIndexOf = ArrayProto.lastIndexOf,\n + nativeIsArray = Array.isArray,\n + nativeKeys = Object.keys,\n + nativeBind = FuncProto.bind;\n + var _ = function(obj) {\n + if (obj instanceof _) return obj;\n + if (!(this instanceof _)) return new _(obj);\n + this._wrapped = obj;\n + };\n + if (typeof exports !== \'undefined\') {\n + if (typeof module !== \'undefined\' && module.exports) {\n + exports = module.exports = _;\n + }\n + exports._ = _;\n + } else {\n + root._ = _;\n + }\n + _.VERSION = \'1.4.4\';\n + var each = _.each = _.forEach = function(obj, iterator, context) {\n + if (obj == null) return;\n + if (nativeForEach && obj.forEach === nativeForEach) {\n + obj.forEach(iterator, context);\n + } else if (obj.length === +obj.length) {\n + for (var i = 0, l = obj.length; i < l; i++) {\n + if (iterator.call(context, obj[i], i, obj) === breaker) return;\n + }\n + } else {\n + for (var key in obj) {\n + if (_.has(obj, key)) {\n + if + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + (iterator.call(context, obj[key], key, obj) === breaker) return;\n + }\n + }\n + }\n + };\n + _.map = _.collect = function(obj, iterator, context) {\n + var results = [];\n + if (obj == null) return results;\n + if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n + each(obj, function(value, index, list) {\n + results[results.length] = iterator.call(context, value, index, list);\n + });\n + return results;\n + };\n +\n + var reduceError = \'Reduce of empty array with no initial value\';\n + _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n + var initial = arguments.length > 2;\n + if (obj == null) obj = [];\n + if (nativeReduce && obj.reduce === nativeReduce) {\n + if (context) iterator = _.bind(iterator, context);\n + return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n + }\n + each(obj, function(value, index, list) {\n + if (!initial) {\n + memo = value;\n + initial = true;\n + } else {\n + memo = iterator.call(context, memo, value, index, list);\n + }\n + });\n + if (!initial) throw new TypeError(reduceError);\n + return memo;\n + };\n + _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n + var initial = arguments.length > 2;\n + if (obj == null) obj = [];\n + if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n + if (context) iterator = _.bind(iterator, context);\n + return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n + }\n + var length = obj.length;\n + if (length !== +length) {\n + var keys = _.keys(obj);\n + length = keys.length;\n + }\n + each(obj, function(value, index, list) {\n + index = keys ? keys[--length] : --length;\n + if (!initial) {\n + memo = obj[index];\n + initial = true;\n + } else {\n + memo = iterator.call(context, memo, obj[index], index, list);\n + }\n + });\n + if (!initial) throw new TypeError(reduceError);\n + return memo;\n + };\n + _.find = _.detect = function(obj, iterator, context) {\n + var result;\n + any(obj, function(value, index, list) {\n + if (iterator.call(context, value, index, list)) {\n + result = value;\n + return true;\n + }\n + });\n + return result;\n + };\n + _.filter = _.select = function(obj, iterator, context) {\n + var results = [];\n + if (obj == null) return results;\n + if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n + each(obj, function(value, index, list) {\n + if (iterator.call(context, value, index, list)) results[results.length] = value;\n + });\n + return results;\n + };\n + _.reject = function(obj, iterator, context) {\n + return _.filter(obj, function(value, index, list) {\n + return !iterator.call(context, value, index, list);\n + }, context);\n + };\n + _.every = _.all = function(obj, iterator, context) {\n + iterator || (iterator = _.identity);\n + var result = true;\n + if (obj == null) return result;\n + if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n + each(obj, function(value, index, list) {\n + if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n + });\n + return !!result;\n + };\n + var any = _.some = _.any = function(obj, iterator, context) {\n + iterator || (iterator = _.identity);\n + var result = false;\n + if (obj == null) return result;\n + if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n + each(obj, function(value, index, list) {\n + if (result || (result = iterator.call(context, value, index, list))) return breaker;\n + });\n + return !!result;\n + };\n + _.contains = _.include = function(obj, target) {\n + if (obj == null) return false;\n + if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n + return any(obj, function(value) {\n + return value === target;\n + });\n + };\n + _.invoke = function(obj, method) {\n + var args = slice.call(arguments, 2);\n + var isFunc = _.isFunction(method);\n + return _.map(obj, function(value) {\n + return (isFunc ? method : value[method]).apply(value, args);\n + });\n + };\n + _.pluck = function(obj, key) {\n + return _.map(obj, function(value){ return value[key]; });\n + };\n + _.where = function(obj, attrs, first) {\n + if (_.isEmpty(attrs)) return first ? null : [];\n + return _[first ? \'find\' : \'filter\'](obj, function(value) {\n + for (var key in attrs) {\n + if (attrs[key] !== value[key]) return false;\n + }\n + return true;\n + });\n + };\n + _.findWhere = function(obj, attrs) {\n + return _.where(obj, attrs, true);\n + };\n + _.max = function(obj, iterator, context) {\n + if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n + return Math.max.apply(Math, obj);\n + }\n + if (!iterator && _.isEmpty(obj)) return -Infinity;\n + var result = {computed : -Infinity, value: -Infinity};\n + each(obj, function(value, index, list) {\n + var computed = iterator ? iterator.call(context, value, index, list) : value;\n + computed >= result.computed && (result = {value : value, computed : computed});\n + });\n + return result.value;\n + };\n + _.min = function(obj, iterator, context) {\n + if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n + return Math.min.apply(Math, obj);\n + }\n + if (!iterator && _.isEmpty(obj)) return Infinity;\n + var result = {computed : Infinity, value: Infinity};\n + each(obj, function(value, index, list) {\n + var computed = iterator ? iterator.call(context, value, index, list) : value;\n + computed < result.computed && (result = {value : value, computed : computed});\n + });\n + return result.value;\n + };\n + _.shuffle = function(obj) {\n + var rand;\n + var index = 0;\n + var shuffled = [];\n + each(obj, function(value) {\n + rand = _.random(index++);\n + shuffled[index - 1] = shuffled[rand];\n + shuffled[rand] = value;\n + });\n + return shuffled;\n + };\n + var lookupIterator = function(value) {\n + return _.isFunction(value) ? value : function(obj){ return obj[value]; };\n + };\n + _.sortBy = function(obj, value, context) {\n + var iterator = lookupIterator(value);\n + return _.pluck(_.map(obj, function(value, index, list) {\n + return {\n + value : value,\n + index : index,\n + criteria : iterator.call(context, value, index, list)\n + };\n + }).sort(function(left, right) {\n + var a = left.criteria;\n + var b = right.criteria;\n + if (a !== b) {\n + if (a > b || a === void 0) return 1;\n + if (a < b || b === void 0) return -1;\n + }\n + return left.index < right.index ? -1 : 1;\n + }), \'value\');\n + };\n + var group = function(obj, value, context, behavior) {\n + var result = {};\n + var iterator = lookupIterator(value || _.identity);\n + each(obj, function(value, index) {\n + var key = iterator.call(context, value, index, obj);\n + behavior(result, key, value);\n + });\n + return result;\n + };\n + _.groupBy = function(obj, value, context) {\n + return group(obj, value, context, function(result, key, value) {\n + (_.has(result, key) ? result[key] : (result[key] = [])).push(value);\n + });\n + };\n + _.countBy = function(obj, value, context) {\n + return group(obj, value, context, function(result, key) {\n + if (!_.has(result, key)) result[key] = 0;\n + result[key]++;\n + });\n + };\n + _.sortedIndex = function(array, obj, iterator, context) {\n + iterator = iterator == null ? _.identity : lookupIterator(iterator);\n + var value = iterator.call(context, obj);\n + var low = 0, high = array.length;\n + while (low < high) {\n + var mid = (low + high) >>> 1;\n + iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\n + }\n + return low;\n + };\n + _.toArray = function(obj) {\n + if (!obj) return [];\n + if (_.isArray(obj)) return slice.call(obj);\n + if (obj.length === +obj.length) return _.map(obj, _.identity);\n + return _.values(obj);\n + };\n + _.size = function(obj) {\n + if (obj == null) return 0;\n + return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;\n + };\n + _.first = _.head = _.take = function(array, n, guard) {\n + if (array == null) return void 0;\n + return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n + };\n + _.initial = function(array, n, guard) {\n + return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n + };\n + _.last = function(array, n, guard) {\n + if (array == null) return void 0;\n + if ((n != null) && !guard) {\n + return slice.call(array, Math.max(array.length - n, 0));\n + } else {\n + return array[array.length - 1];\n + }\n + };\n + _.rest = _.tail = _.drop = function(array, n, guard) {\n + return slice.call(array, (n == null) || guard ? 1 : n);\n + };\n + _.compact = function(array) {\n + return _.filter(array, _.identity);\n + };\n + var flatten = function(input, shallow, output) {\n + each(input, function(value) {\n + if (_.isArray(value)) {\n + shallow ? push.apply(output, value) : flatten(value, shallow, output);\n + } else {\n + output.push(value);\n + }\n + });\n + return output;\n + };\n + _.flatten = function(array, shallow) {\n + return flatten(array, shallow, []);\n + };\n + _.without = function(array) {\n + return _.difference(array, slice.call(arguments, 1));\n + };\n + _.uniq = _.unique = function(array, isSorted, iterator, context) {\n + if (_.isFunction(isSorted)) {\n + context = iterator;\n + iterator = isSorted;\n + isSorted = false;\n + }\n + var initial = iterator ? _.map(array, iterator, context) : array;\n + var results = [];\n + var seen = [];\n + each(initial, function(value, index) {\n + if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\n + seen.push(value);\n + results.push(array[index]);\n + }\n + });\n + return results;\n + };\n + _.union = function() {\n + return _.uniq(concat.apply(ArrayProto, arguments));\n + };\n + _.intersection = function(array) {\n + var rest = slice.call(arguments, 1);\n + return _.filter(_.uniq(array), function(item) {\n + return _.every(rest, function(other) {\n + return _.indexOf(other, item) >= 0;\n + });\n + });\n + };\n + _.difference = function(array) {\n + var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\n + return _.filter(array, function(value){ return !_.contains(rest, value); });\n + };\n + _.zip = function() {\n + var args = slice.call(arguments);\n + var length = _.max(_.pluck(args, \'length\'));\n + var results = new Array(length);\n + for (var i = 0; i < length; i++) {\n + results[i] = _.pluck(args, "" + i);\n + }\n + return results;\n + };\n + _.object = function(list, values) {\n + if (list == null) return {};\n + var result = {};\n + for (var i = 0, l = list.length; i < l; i++) {\n + if (values) {\n + result[list[i]] = values[i];\n + } else {\n + result[list[i][0]] = list[i][1];\n + }\n + }\n + return result;\n + };\n + _.indexOf = function(array, item, isSorted) {\n + if (array == null) return -1;\n + var i = 0, l = array.length;\n + if (isSorted) {\n + if (typeof isSorted == \'number\') {\n + i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);\n + } else {\n + i = _.sortedIndex(array, item);\n + return array[i] === item ? i : -1;\n + }\n + }\n + if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\n + for (; i < l; i++) if (array[i] === item) return i;\n + return -1;\n + };\n + _.lastIndexOf = function(array, item, from) {\n + if (array == null) return -1;\n + var hasIndex = from != null;\n + if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\n + return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\n + }\n + var i = (hasIndex ? from : array.length);\n + while (i--) if (array[i] === item) return i;\n + return -1;\n + };\n + _.range = function(start, stop, step) {\n + if (arguments.length <= 1) {\n + stop = start || 0;\n + start = 0;\n + }\n + step = arguments[2] || 1;\n \n -\t\tnexttoken,\n -\n -\t\tnode = {\n -\t\t\t__filename\t : false,\n -\t\t\t__dirname\t : false,\n -\t\t\tBuffer\t\t : false,\n -\t\t\tconsole\t\t : false,\n -\t\t\texports\t\t : true, // In Node it is ok to exports = module.exports = foo();\n -\t\t\tGLOBAL\t\t : false,\n -\t\t\tglobal\t\t : false,\n -\t\t\tmodule\t\t : false,\n -\t\t\tprocess\t\t : false,\n -\t\t\trequire\t\t : false,\n -\t\t\tsetTimeout\t : false,\n -\t\t\tclearTimeout : false,\n -\t\t\tsetInterval : false,\n -\t\t\tclearInterval : false\n -\t\t},\n + var len = Math.max(Math.ceil((stop - start) / step), 0);\n + var idx = 0;\n + var range = new Array(len);\n \n -\t\tnoreach,\n -\t\toption,\n -\t\tpredefined,\t\t// Global variables defined by option\n -\t\tprereg,\n -\t\tprevtoken,\n -\n -\t\tprototypejs = {\n -\t\t\t"$"\t\t\t\t : false,\n -\t\t\t"$$"\t\t\t : false,\n -\t\t\t"$A"\t\t\t : false,\n -\t\t\t"$F"\t\t\t : false,\n -\t\t\t"$H"\t\t\t : false,\n -\t\t\t"$R"\t\t\t : false,\n -\t\t\t"$break"\t\t : false,\n -\t\t\t"$continue"\t\t : false,\n -\t\t\t"$w"\t\t\t : false,\n -\t\t\tAbstract\t\t : false,\n -\t\t\tAjax\t\t\t : false,\n -\t\t\tClass\t\t\t : false,\n -\t\t\tEnumerable\t\t : false,\n -\t\t\tElement\t\t\t : false,\n -\t\t\tEvent\t\t\t : false,\n -\t\t\tField\t\t\t : false,\n -\t\t\tForm\t\t\t : false,\n -\t\t\tHash\t\t\t : false,\n -\t\t\tInsertion\t\t : false,\n -\t\t\tObjectRange\t\t : false,\n -\t\t\tPeriodicalExecuter: false,\n -\t\t\tPosition\t\t : false,\n -\t\t\tPrototype\t\t : false,\n -\t\t\tSelector\t\t : false,\n -\t\t\tTemplate\t\t : false,\n -\t\t\tToggle\t\t\t : false,\n -\t\t\tTry\t\t\t\t : false,\n -\t\t\tAutocompleter\t : false,\n -\t\t\tBuilder\t\t\t : false,\n -\t\t\tControl\t\t\t : false,\n -\t\t\tDraggable\t\t : false,\n -\t\t\tDraggables\t\t : false,\n -\t\t\tDroppables\t\t : false,\n -\t\t\tEffect\t\t\t : false,\n -\t\t\tSortable\t\t : false,\n -\t\t\tSortableObserver : false,\n -\t\t\tSound\t\t\t : false,\n -\t\t\tScriptaculous\t : false\n -\t\t},\n + while(idx < len) {\n + range[idx++] = start;\n + start += step;\n + }\n \n -\t\tquotmark,\n -\n -\t\trhino = {\n -\t\t\tdefineClass : false,\n -\t\t\tdeserialize : false,\n -\t\t\tgc\t\t\t : false,\n -\t\t\thelp\t\t : false,\n -\t\t\timportPackage: false,\n -\t\t\t"java"\t\t : false,\n -\t\t\tload\t\t : false,\n -\t\t\tloadClass\t : false,\n -\t\t\tprint\t\t : false,\n -\t\t\tquit\t\t : false,\n -\t\t\treadFile\t : false,\n -\t\t\treadUrl\t\t : false,\n -\t\t\trunCommand\t : false,\n -\t\t\tseal\t\t : false,\n -\t\t\tserialize\t : false,\n -\t\t\tspawn\t\t : false,\n -\t\t\tsync\t\t : false,\n -\t\t\ttoint32\t\t : false,\n -\t\t\tversion\t\t : false\n -\t\t},\n + return range;\n + };\n + _.bind = function(func, context) {\n + if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n + var args = slice.call(arguments, 2);\n + return function() {\n + return func.apply(context, args.concat(slice.call(arguments)));\n + };\n + };\n + _.partial = function(func) {\n + var args = slice.call(arguments, 1);\n + return function() {\n + return func.apply(this, args.concat(slice.call(arguments)));\n + };\n + };\n + _.bindAll = function(obj) {\n + var funcs = slice.call(arguments, 1);\n + if (funcs.length === 0) funcs = _.functions(obj);\n + each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n + return obj;\n + };\n + _.memoize = function(func, hasher) {\n + var memo = {};\n + hasher || (hasher = _.identity);\n + return function() {\n + var key = hasher.apply(this, arguments);\n + return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n + };\n + };\n + _.delay = function(func, wait) {\n + var args = slice.call(arguments, 2);\n + return setTimeout(function(){ return func.apply(null, args); }, wait);\n + };\n + _.defer = function(func) {\n + return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n + };\n + _.throttle = function(func, wait) {\n + var context, args, timeout, result;\n + var previous = 0;\n + var later = function() {\n + previous = new Date;\n + timeout = null;\n + result = func.apply(context, args);\n + };\n + return function() {\n + var now = new Date;\n + var remaining = wait - (now - previous);\n + context = this;\n + args = arguments;\n + if (remaining <= 0) {\n + clearTimeout(timeout);\n + timeout = null;\n + previous = now;\n + result = func.apply(context, args);\n + } else if (!timeout) {\n + timeout = setTimeout(later, remaining);\n + }\n + return result;\n + };\n + };\n + _.debounce = function(func, wait, immediate) {\n + var timeout, result;\n + return function() {\n + var context = this, args = arguments;\n + var later = function() {\n + timeout = null;\n + if (!immediate) result = func.apply(context, args);\n + };\n + var callNow = immediate && !timeout;\n + clearTimeout(timeout);\n + timeout = setTimeout(later, wait);\n + if (callNow) result = func.apply(context, args);\n + return result;\n + };\n + };\n + _.once = function(func) {\n + var ran = false, memo;\n + return function() {\n + if (ran) return memo;\n + ran = true;\n + memo = func.apply(this, arguments);\n + func = null;\n + return memo;\n + };\n + };\n + _.wrap = function(func, wrapper) {\n + return function() {\n + var args = [func];\n + push.apply(args, arguments);\n + return wrapper.apply(this, args);\n + };\n + };\n + _.compose = function() {\n + var funcs = arguments;\n + return function() {\n + var args = arguments;\n + for (var i = funcs.length - 1; i >= 0; i--) {\n + args = [funcs[i].apply(this, args)];\n + }\n + return args[0];\n + };\n + };\n + _.after = function(times, func) {\n + if (times <= 0) return func();\n + return function() {\n + if (--times < 1) {\n + return func.apply(this, arguments);\n + }\n + };\n + };\n + _.keys = nativeKeys || function(obj) {\n + if (obj !== Object(obj)) throw new TypeError(\'Invalid object\');\n + var keys = [];\n + for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n + return keys;\n + };\n + _.values = function(obj) {\n + var values = [];\n + for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);\n + return values;\n + };\n + _.pairs = function(obj) {\n + var pairs = [];\n + for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);\n + return pairs;\n + };\n + _.invert = function(obj) {\n + var result = {};\n + for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;\n + return result;\n + };\n + _.functions = _.methods = function(obj) {\n + var names = [];\n + for (var key in obj) {\n + if (_.isFunction(obj[key])) names.push(key);\n + }\n + return names.sort();\n + };\n + _.extend = function(obj) {\n + each(slice.call(arguments, 1), function(source) {\n + if (source) {\n + for (var prop in source) {\n + obj[prop] = source[prop];\n + }\n + }\n + });\n + return obj;\n + };\n + _.pick = function(obj) {\n + var copy = {};\n + var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n + each(keys, function(key) {\n + if (key in obj) copy[key] = obj[key];\n + });\n + return copy;\n + };\n + _.omit = function(obj) {\n + var copy = {};\n + var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n + for (var key in obj) {\n + if (!_.contains(keys, key)) copy[key] = obj[key];\n + }\n + return copy;\n + };\n + _.defaults = function(obj) {\n + each(slice.call(arguments, 1), function(source) {\n + if (source) {\n + for (var prop in source) {\n + if (obj[prop] == null) obj[prop] = source[prop];\n + }\n + }\n + });\n + return obj;\n + };\n + _.clone = function(obj) {\n + if (!_.isObject(obj)) return obj;\n + return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n + };\n + _.tap = function(obj, interceptor) {\n + interceptor(obj);\n + return obj;\n + };\n + var eq = function(a, b, aStack, bStack) {\n + if (a === b) return a !== 0 || 1 / a == 1 / b;\n + if (a == null || b == null) return a === b;\n + if (a instanceof _) a = a._wrapped;\n + if (b instanceof _) b = b._wrapped;\n + var className = toString.call(a);\n + if (className != toString.call(b)) return false;\n + switch (className) {\n + case \'[object String]\':\n + return a == String(b);\n + case \'[object Number]\':\n + return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n + case \'[object Date]\':\n + case \'[object Boolean]\':\n + return +a == +b;\n + case \'[object RegExp]\':\n + return a.source == b.source &&\n + a.global == b.global &&\n + a.multiline == b.multiline &&\n + a.ignoreCase == b.ignoreCase;\n + }\n + if (typeof a != \'object\' || typeof b != \'object\') return false;\n + var length = aStack.length;\n + while (length--) {\n + if (aStack[length] == a) return bStack[length] == b;\n + }\n + aStack.push(a);\n + bStack.push(b);\n + var size = 0, result = true;\n + if (className == \'[object Array]\') {\n + size = a.length;\n + result = size == b.length;\n + if (result) {\n + while (size--) {\n + if (!(result = eq(a[size], b[size], aStack, bStack))) break;\n + }\n + }\n + } else {\n + var aCtor = a.constructor, bCtor = b.constructor;\n + if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\n + _.isFunction(bCtor) && (bCtor instanceof bCtor))) {\n + return false;\n + }\n + for (var key in a) {\n + if (_.has(a, key)) {\n + size++;\n + if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\n + }\n + }\n + if (result) {\n + for (key in b) {\n + if (_.has(b, key) && !(size--)) break;\n + }\n + result = !size;\n + }\n + }\n + aStack.pop();\n + bStack.pop();\n + return result;\n + };\n + _.isEqual = function(a, b) {\n + return eq(a, b, [], []);\n + };\n + _.isEmpty = function(obj) {\n + if (obj == null) return true;\n + if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n + for (var key in obj) if (_.has(obj, key)) return false;\n + return true;\n + };\n + _.isElement = function(obj) {\n + return !!(obj && obj.nodeType === 1);\n + };\n + _.isArray = nativeIsArray || function(obj) {\n + return toString.call(obj) == \'[object Array]\';\n + };\n + _.isObject = function(obj) {\n + return obj === Object(obj);\n + };\n + each([\'Arguments\', \'Function\', \'String\', \'Number\', \'Date\', \'RegExp\'], function(name) {\n + _[\'is\' + name] = function(obj) {\n + return toString.call(obj) == \'[object \' + name + \']\';\n + };\n + });\n + if (!_.isArguments(arguments)) {\n + _.isArguments = function(obj) {\n + return !!(obj && _.has(obj, \'callee\'));\n + };\n + }\n + if (typeof (/./) !== \'function\') {\n + _.isFunction = function(obj) {\n + return typeof obj === \'function\';\n + };\n + }\n + _.isFinite = function(obj) {\n + return isFinite(obj) && !isNaN(parseFloat(obj));\n + };\n + _.isNaN = function(obj) {\n + return _.isNumber(obj) && obj != +obj;\n + };\n + _.isBoolean = function(obj) {\n + return obj === true || obj === false || toString.call(obj) == \'[object Boolean]\';\n + };\n + _.isNull = function(obj) {\n + return obj === null;\n + };\n + _.isUndefined = function(obj) {\n + return obj === void 0;\n + };\n + _.has = function(obj, key) {\n + return hasOwnProperty.call(obj, key);\n + };\n + _.noConflict = function() {\n + root._ = previousUnderscore;\n + return this;\n + };\n + _.identity = function(value) {\n + return value;\n + };\n + _.times = function(n, iterator, context) {\n + var accum = Array(n);\n + for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\n + return accum;\n + };\n + _.random = function(min, max) {\n + if (max == null) {\n + max = min;\n + min = 0;\n + }\n + return min + Math.floor(Math.random() * (max - min + 1));\n + };\n + var entityMap = {\n + escape: {\n + \'&\': \'&\',\n + \'<\': \'<\',\n + \'>\': \'>\',\n + \'"\': \'"\',\n + "\'": \''\',\n + \'/\': \'/\'\n + }\n + };\n + entityMap.unescape = _.invert(entityMap.escape);\n + var entityRegexes = {\n + escape: new RegExp(\'[\' + _.keys(entityMap.escape).join(\'\') + \']\', \'g\'),\n + unescape: new RegExp(\'(\' + _.keys(entityMap.unescape).join(\'|\') + \')\', \'g\')\n + };\n + _.each([\'escape\', \'unescape\'], function(method) {\n + _[method] = function(string) {\n + if (string == null) return \'\';\n + return (\'\' + string).replace(entityRegexes[method], function(match) {\n + return entityMap[method][match];\n + });\n + };\n + });\n + _.result = function(object, property) {\n + if (object == null) return null;\n + var value = object[property];\n + return _.isFunction(value) ? value.call(object) : value;\n + };\n + _.mixin = function(obj) {\n + each(_.functions(obj), function(name){\n + var func = _[name] = obj[name];\n + _.prototype[name] = function() {\n + var args = [this._wrapped];\n + push.apply(args, arguments);\n + return result.call(this, func.apply(_, args));\n + };\n + });\n + };\n + var idCounter = 0;\n + _.uniqueId = function(prefix) {\n + var id = ++idCounter + \'\';\n + return prefix ? prefix + id : id;\n + };\n + _.templateSettings = {\n + evaluate : /<%([\\s\\S]+?)%>/g,\n + interpolate : /<%=([\\s\\S]+?)%>/g,\n + escape : /<%-([\\s\\S]+?)%>/g\n + };\n + var noMatch = /(.)^/;\n + var escapes = {\n + "\'": "\'",\n + \'\\\\\': \'\\\\\',\n + \'\\r\': \'r\',\n + \'\\n\': \'n\',\n + \'\\t\': \'t\',\n + \'\\u2028\': \'u2028\',\n + \'\\u2029\': \'u2029\'\n + };\n +\n + var escaper = /\\\\|\'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n + _.template = function(text, data, settings) {\n + var render;\n + settings = _.defaults({}, settings, _.templateSettings);\n + var matcher = new RegExp([\n + (settings.escape || noMatch).source,\n + (settings.interpolate || noMatch).source,\n + (settings.evaluate || noMatch).source\n + ].join(\'|\') + \'|$\', \'g\');\n + var index = 0;\n + var source = "__p+=\'";\n + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n + source += text.slice(index, offset)\n + .replace(escaper, function(match) { return \'\\\\\' + escapes[match]; });\n +\n + if (escape) {\n + source += "\'+\\n((__t=(" + escape + "))==null?\'\':_.escape(__t))+\\n\'";\n + }\n + if (interpolate) {\n + source += "\'+\\n((__t=(" + interpolate + "))==null?\'\':__t)+\\n\'";\n + }\n + if (evaluate) {\n + source += "\';\\n" + evaluate + "\\n__p+=\'";\n + }\n + index = offset + match.length;\n + return match;\n + });\n + source += "\';\\n";\n + if (!settings.variable) source = \'with(obj||{}){\\n\' + source + \'}\\n\';\n \n -\t\tscope,\t\t// The current scope\n -\t\tstack,\n -\t\tstandard = {\n -\t\t\tArray\t\t\t\t: false,\n -\t\t\tBoolean\t\t\t\t: false,\n -\t\t\tDate\t\t\t\t: false,\n -\t\t\tdecodeURI\t\t\t: false,\n -\t\t\tdecodeURIComponent\t: false,\n -\t\t\tencodeURI\t\t\t: false,\n -\t\t\tencodeURIComponent\t: false,\n -\t\t\tError\t\t\t\t: false,\n -\t\t\t"eval"\t\t\t\t: false,\n -\t\t\tEvalError\t\t\t: false,\n -\t\t\tFunction\t\t\t: false,\n -\t\t\thasOwnProperty\t\t: false,\n -\t\t\tisFinite\t\t\t: false,\n -\t\t\tisNaN\t\t\t\t: false,\n -\t\t\tJSON\t\t\t\t: false,\n -\t\t\tMap\t\t\t\t\t: false,\n -\t\t\tMath\t\t\t\t: false,\n -\t\t\tNaN\t\t\t\t\t: false,\n -\t\t\tNumber\t\t\t\t: false,\n -\t\t\tObject\t\t\t\t: false,\n -\t\t\tparseInt\t\t\t: false,\n -\t\t\tparseFloat\t\t\t: false,\n -\t\t\tRangeError\t\t\t: false,\n -\t\t\tReferenceError\t\t: false,\n -\t\t\tRegExp\t\t\t\t: false,\n -\t\t\tSet\t\t\t\t\t: false,\n -\t\t\tString\t\t\t\t: false,\n -\t\t\tSyntaxError\t\t\t: false,\n -\t\t\tTypeError\t\t\t: false,\n -\t\t\tURIError\t\t\t: false,\n -\t\t\tWeakMap\t\t\t\t: false\n -\t\t},\n -\t\tnonstandard = {\n -\t\t\tescape\t\t\t\t: false,\n -\t\t\tunescape\t\t\t: false\n -\t\t},\n + source = "var __t,__p=\'\',__j=Array.prototype.join," +\n + "print=function(){__p+=__j.call(arguments,\'\');};\\n" +\n + source + "return __p;\\n";\n \n -\t\tdirective,\n -\t\tsyntax = {},\n -\t\ttab,\n -\t\ttoken,\n -\t\tunuseds,\n -\t\turls,\n -\t\tuseESNextSyntax,\n -\t\twarnings,\n + try {\n + render = new Function(settings.variable || \'obj\', \'_\', source);\n + } catch (e) {\n + e.source = source;\n + throw e;\n + }\n \n -\t\tworker = {\n -\t\t\timportScripts\t\t: true,\n -\t\t\tpostMessage\t\t\t: true,\n -\t\t\tself\t\t\t\t: true\n -\t\t},\n + if (data) return render(data, _);\n + var template = function(data) {\n + return render.call(this, data, _);\n + };\n + template.source = \'function(\' + (settings.variable || \'obj\') + \'){\\n\' + source + \'}\';\n +\n + return template;\n + };\n + _.chain = function(obj) {\n + return _(obj).chain();\n + };\n + var result = function(obj) {\n + return this._chain ? _(obj).chain() : obj;\n + };\n + _.mixin(_);\n + each([\'pop\', \'push\', \'reverse\', \'shift\', \'sort\', \'splice\', \'unshift\'], function(name) {\n + var method = ArrayProto[name];\n + _.prototype[name] = function() {\n + var obj = this._wrapped;\n + method.apply(obj, arguments);\n + if ((name == \'shift\' || name == \'splice\') && obj.length === 0) delete obj[0];\n + return result.call(this, obj);\n + };\n + });\n + each([\'concat\', \'join\', \'slice\'], function(name) {\n + var method = ArrayProto[name];\n + _.prototype[name] = function() {\n + return result.call(this, method.apply(this._wrapped, arguments));\n + };\n + });\n \n -\t\twsh = {\n -\t\t\tActiveXObject\t\t\t : true,\n -\t\t\tEnumerator\t\t\t\t : true,\n -\t\t\tGetObject\t\t\t\t : true,\n -\t\t\tScriptEngine\t\t\t : true,\n -\t\t\tScriptEngineBuildVersion : true,\n -\t\t\tScriptEngineMajorVersion : true,\n -\t\t\tScriptEngineMinorVersion : true,\n -\t\t\tVBArray\t\t\t\t\t : true,\n -\t\t\tWSH\t\t\t\t\t\t : true,\n -\t\t\tWScript\t\t\t\t\t : true,\n -\t\t\tXDomainRequest\t\t\t : true\n -\t\t},\n + _.extend(_.prototype, {\n + chain: function() {\n + this._chain = true;\n + return this;\n + },\n + value: function() {\n + return this._wrapped;\n + }\n \n -\t\tyui = {\n -\t\t\tYUI\t\t\t\t: false,\n -\t\t\tY\t\t\t\t: false,\n -\t\t\tYUI_config\t\t: false\n -\t\t};\n -\tvar ax, cx, tx, nx, nxg, lx, ix, jx, ft;\n -\t(function () {\n -\t\tax = /@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|</i;\n -\t\tcx = /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n -\t\ttx = /^\\s*([(){}\\[.,:;\'"~\\?\\]#@]|==?=?|\\/=(?!(\\S*\\/[gim]?))|\\/(\\*(jshint|jslint|members?|global)?|\\/)?|\\*[\\/=]?|\\+(?:=|\\++)?|-(?:=|-+)?|%=?|&[&=]?|\\|[|=]?|>>?>?=?|<([\\/=!]|\\!(\\[|--)?|<=?)?|\\^=?|\\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\\.[0-9]*)?([eE][+\\-]?[0-9]+)?)/;\n -\t\tnx = /[\\u0000-\\u001f&<"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n -\t\tnxg = /[\\u0000-\\u001f&<"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n -\t\tlx = /\\*\\//;\n -\t\tix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;\n -\t\tjx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\\s*:/i;\n -\t\tft = /^\\s*\\/\\*\\s*falls\\sthrough\\s*\\*\\/\\s*$/;\n -\t}());\n + });\n +\n +}).call(this);\n +\n +},\n +{}],\n +2:[function(req,module,exports){\n +\n +\n +var _ = req("underscore");\n +\n +var errors = {\n +\tE001: "Bad option: \'{a}\'.",\n +\tE002: "Bad option value.",\n +\tE003: "Expected a JSON value.",\n +\tE004: "Input is neither a string nor an array of strings.",\n +\tE005: "Input is empty.",\n +\tE006: "Unexpected early end of program.",\n +\tE007: "Missing \\"use strict\\" statement.",\n +\tE008: "Strict violation.",\n +\tE009: "Option \'validthis\' can\'t be used in a global scope.",\n +\tE010: "\'with\' is not allowed in strict mode.",\n +\tE011: "const \'{a}\' has already been declared.",\n +\tE012: "const \'{a}\' is initialized to \'undefined\'.",\n +\tE013: "Attempting to override \'{a}\' which is a constant.",\n +\tE014: "A regular expression literal can be confused with \'/=\'.",\n +\tE015: "Unclosed regular expression.",\n +\tE016: "Invalid regular expression.",\n +\tE017: "Unclosed comment.",\n +\tE018: "Unbegun comment.",\n +\tE019: "Unmatched \'{a}\'.",\n +\tE020: "Expected \'{a}\' to match \'{b}\' from line {c} and instead saw \'{d}\'.",\n +\tE021: "Expected \'{a}\' and instead saw \'{b}\'.",\n +\tE022: "Line breaking error \'{a}\'.",\n +\tE023: "Missing \'{a}\'.",\n +\tE024: "Unexpected \'{a}\'.",\n +\tE025: "Missing \':\' on a case clause.",\n +\tE026: "Missing \'}\' to match \'{\' from line {a}.",\n +\tE027: "Missing \']\' to match \'[\' form line {a}.",\n +\tE028: "Illegal comma.",\n +\tE029: "Unclosed string.",\n +\tE030: "Expected an identifier and instead saw \'{a}\'.",\n +\tE031: "Bad assignment.", // FIXME: Rephrase\n +\tE032: "Expected a small integer or \'false\' and instead saw \'{a}\'.",\n +\tE033: "Expected an operator and instead saw \'{a}\'.",\n +\tE034: "get/set are ES5 features.",\n +\tE035: "Missing property name.",\n +\tE036: "Expected to see a statement and instead saw a block.",\n +\tE037: null, // Vacant\n +\tE038: null, // Vacant\n +\tE039: "Function declarations are not invocable. Wrap the whole function invocation in parens.",\n +\tE040: "Each value should have its own case label.",\n +\tE041: "Unrecoverable syntax error.",\n +\tE042: "Stopping.",\n +\tE043: "Too many errors.",\n +\tE044: "\'{a}\' is already defined and can\'t be redefined.",\n +\tE045: "Invalid for each loop.",\n +\tE046: "A yield statement shall be within a generator function (with syntax: `function*`)",\n +\tE047: "A generator function shall contain a yield statement.",\n +\tE048: "Let declaration not directly within block.",\n +\tE049: "A {a} cannot be named \'{b}\'.",\n +\tE050: "Mozilla requires the yield expression to be parenthesized here.",\n +\tE051: "Regular parameters cannot come after default parameters."\n +};\n \n -\tfunction F() {}\t\t// Used by Object.create\n +var warnings = {\n +\tW001: "\'hasOwnProperty\' is a really bad name.",\n +\tW002: "Value of \'{a}\' may be overwritten in IE 8 and earlier.",\n +\tW003: "\'{a}\' was used before it was defined.",\n +\tW004: "\'{a}\' is already defined.",\n +\tW005: "A dot following a number can be confused with a decimal point.",\n +\tW006: "Confusing minuses.",\n +\tW007: "Confusing pluses.",\n +\tW008: "A leading decimal point can be confused with a dot: \'{a}\'.",\n +\tW009: "The array literal notation [] is preferrable.",\n +\tW010: "The object literal notation {} is preferrable.",\n +\tW011: "Unexpected space after \'{a}\'.",\n +\tW012: "Unexpected space before \'{a}\'.",\n +\tW013: "Missing space after \'{a}\'.",\n +\tW014: "Bad line breaking before \'{a}\'.",\n +\tW015: "Expected \'{a}\' to have an indentation at {b} instead at {c}.",\n +\tW016: "Unexpected use of \'{a}\'.",\n +\tW017: "Bad operand.",\n +\tW018: "Confusing use of \'{a}\'.",\n +\tW019: "Use the isNaN function to compare with NaN.",\n +\tW020: "Read only.",\n +\tW021: "\'{a}\' is a function.",\n +\tW022: "Do not assign to the exception parameter.",\n +\tW023: "Expected an identifier in an assignment and instead saw a function invocation.",\n +\tW024: "Expected an identifier and instead saw \'{a}\' (a reserved word).",\n +\tW025: "Missing name in function declaration.",\n +\tW026: "Inner functions should be listed at the top of the outer function.",\n +\tW027: "Unreachable \'{a}\' after \'{b}\'.",\n +\tW028: "Label \'{a}\' on {b} statement.",\n +\tW030: "Expected an assignment or function call and instead saw an expression.",\n +\tW031: "Do not use \'new\' for side effects.",\n +\tW032: "Unnecessary semicolon.",\n +\tW033: "Missing semicolon.",\n +\tW034: "Unnecessary directive \\"{a}\\".",\n +\tW035: "Empty block.",\n +\tW036: "Unexpected /*member \'{a}\'.",\n +\tW037: "\'{a}\' is a statement label.",\n +\tW038: "\'{a}\' used out of scope.",\n +\tW039: "\'{a}\' is not allowed.",\n +\tW040: "Possible strict violation.",\n +\tW041: "Use \'{a}\' to compare with \'{b}\'.",\n +\tW042: "Avoid EOL escaping.",\n +\tW043: "Bad escaping of EOL. Use option multistr if needed.",\n +\tW044: "Bad or unnecessary escaping.",\n +\tW045: "Bad number \'{a}\'.",\n +\tW046: "Don\'t use extra leading zeros \'{a}\'.",\n +\tW047: "A trailing decimal point can be confused with a dot: \'{a}\'.",\n +\tW048: "Unexpected control character in regular expression.",\n +\tW049: "Unexpected escaped character \'{a}\' in regular expression.",\n +\tW050: "JavaScript URL.",\n +\tW051: "Variables should not be deleted.",\n +\tW052: "Unexpected \'{a}\'.",\n +\tW053: "Do not use {a} as a constructor.",\n +\tW054: "The Function constructor is a form of eval.",\n +\tW055: "A constructor name should start with an uppercase letter.",\n +\tW056: "Bad constructor.",\n +\tW057: "Weird construction. Is \'new\' unnecessary?",\n +\tW058: "Missing \'()\' invoking a constructor.",\n +\tW059: "Avoid arguments.{a}.",\n +\tW060: "document.write can be a form of eval.",\n +\tW061: "eval can be harmful.",\n +\tW062: "Wrap an immediate function invocation in parens " +\n +\t\t"to assist the reader in understanding that the expression " +\n +\t\t"is the result of a function, and not the function itself.",\n +\tW063: "Math is not a function.",\n +\tW064: "Missing \'new\' prefix when invoking a constructor.",\n +\tW065: "Missing radix parameter.",\n +\tW066: "Implied eval. Consider passing a function instead of a string.",\n +\tW067: "Bad invocation.",\n +\tW068: "Wrapping non-IIFE function literals in parens is unnecessary.",\n +\tW069: "[\'{a}\'] is better written in dot notation.",\n +\tW070: "Extra comma. (it breaks older versions of IE)",\n +\tW071: "This function has too many statements. ({a})",\n +\tW072: "This function has too many parameters. ({a})",\n +\tW073: "Blocks are nested too deeply. ({a})",\n +\tW074: "This function\'s cyclomatic complexity is too high. ({a})",\n +\tW075: "Duplicate key \'{a}\'.",\n +\tW076: "Unexpected parameter \'{a}\' in get {b} function.",\n +\tW077: "Expected a single parameter in set {a} function.",\n +\tW078: "Setter is defined without getter.",\n +\tW079: "Redefinition of \'{a}\'.",\n +\tW080: "It\'s not necessary to initialize \'{a}\' to \'undefined\'.",\n +\tW081: "Too many var statements.",\n +\tW082: "Function declarations should not be placed in blocks. " +\n +\t\t"Use a function expression or move the statement to the top of " +\n +\t\t"the outer function.",\n +\tW083: "Don\'t make functions within a loop.",\n +\tW084: "Assignment in conditional expression",\n +\tW085: "Don\'t use \'with\'.",\n +\tW086: "Expected a \'break\' statement before \'{a}\'.",\n +\tW087: "Forgotten \'debugger\' statement?",\n +\tW088: "Creating global \'for\' variable. Should be \'for (var {a} ...\'.",\n +\tW089: "The body of a for in should be wrapped in an if statement to filter " +\n +\t\t"unwanted properties from the prototype.",\n +\tW090: "\'{a}\' is not a statement label.",\n +\tW091: "\'{a}\' is out of scope.",\n +\tW092: "Wrap the /regexp/ literal in parens to disambiguate the slash operator.",\n +\tW093: "Did you mean to return a conditional instead of an assignment?",\n +\tW094: "Unexpected comma.",\n +\tW095: "Expected a string and instead saw {a}.",\n +\tW096: "The \'{a}\' key may produce unexpected results.",\n +\tW097: "Use the function form of \\"use strict\\".",\n +\tW098: "\'{a}\' is defined but never used.",\n +\tW099: "Mixed spaces and tabs.",\n +\tW100: "This character may get silently deleted by one or more browsers.",\n +\tW101: "Line is too long.",\n +\tW102: "Trailing whitespace.",\n +\tW103: "The \'{a}\' property is deprecated.",\n +\tW104: "\'{a}\' is only available in JavaScript 1.7.",\n +\tW105: "Unexpected {a} in \'{b}\'.",\n +\tW106: "Identifier \'{a}\' is not in camel case.",\n +\tW107: "Script URL.",\n +\tW108: "Strings must use doublequote.",\n +\tW109: "Strings must use singlequote.",\n +\tW110: "Mixed double and single quotes.",\n +\tW112: "Unclosed string.",\n +\tW113: "Control character in string: {a}.",\n +\tW114: "Avoid {a}.",\n +\tW115: "Octal literals are not allowed in strict mode.",\n +\tW116: "Expected \'{a}\' and instead saw \'{b}\'.",\n +\tW117: "\'{a}\' is not defined.",\n +\tW118: "\'{a}\' is only available in Mozilla JavaScript extensions (use moz option).",\n +\tW119: "\'{a}\' is only available in ES6 (use esnext option).",\n +\tW120: "You might be leaking a variable ({a}) here."\n +};\n \n -\tfunction is_own(object, name) {\n -\t\treturn Object.prototype.hasOwnProperty.call(object, name);\n -\t}\n +var info = {\n +\tI001: "Comma warnings can be turned off with \'laxcomma\'.",\n +\tI002: "Reserved words as properties can be used under the \'es5\' option.",\n +\tI003: "ES5 option is now set per default"\n +};\n \n -\tfunction checkOption(name, t) {\n -\t\tif (valOptions[name] === undefined && boolOptions[name] === undefined) {\n -\t\t\twarning("Bad option: \'" + name + "\'.", t);\n -\t\t}\n -\t}\n +exports.errors = {};\n +exports.warnings = {};\n +exports.info = {};\n \n -\tfunction isString(obj) {\n -\t\treturn Object.prototype.toString.call(obj) === "[object String]";\n -\t}\n +_.each(errors, function (desc, code) {\n +\texports.errors[code] = { code: code, desc: desc };\n +});\n \n -\tif (typeof Array.isArray !== "function") {\n -\t\tArray.isArray = function (o) {\n -\t\t\treturn Object.prototype.toString.apply(o) === "[object Array]";\n -\t\t};\n -\t}\n +_.each(warnings, function (desc, code) {\n +\texports.warnings[code] = { code: code, desc: desc };\n +});\n \n -\tif (!Array.prototype.forEach) {\n -\t\tArray.prototype.forEach = function (fn, scope) {\n -\t\t\tvar len = this.length;\n +_.each(info, function (desc, code) {\n +\texports.info[code] = { code: code, desc: desc };\n +});\n \n -\t\t\tfor (var i = 0; i < len; i++) {\n -\t\t\t\tfn.call(scope || this, this[i], i, this);\n -\t\t\t}\n -\t\t};\n -\t}\n +},\n +{"underscore":1}],\n +3:[function(req,module,exports){\n \n -\tif (!Array.prototype.indexOf) {\n -\t\tArray.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n -\t\t\tif (this === null || this === undefined) {\n -\t\t\t\tthrow new TypeError();\n -\t\t\t}\n +exports.reservedVars = {\n +\targuments : false,\n +\tNaN : false\n +};\n \n -\t\t\tvar t = new Object(this);\n -\t\t\tvar len = t.length >>> 0;\n +exports.ecmaIdentifiers = {\n +\tArray : false,\n +\tBoolean : false,\n +\tDate : false,\n +\tdecodeURI : false,\n +\tdecodeURIComponent : false,\n +\tencodeURI : false,\n +\tencodeURIComponent : false,\n +\tError : false,\n +\t"eval" : false,\n +\tEvalError : false,\n +\tFunction : false,\n +\thasOwnProperty : false,\n +\tisFinite : false,\n +\tisNaN : false,\n +\tJSON : false,\n +\tMath : false,\n +\tMap : false,\n +\tNumber : false,\n +\tObject : false,\n +\tparseInt : false,\n +\tparseFloat : false,\n +\tRangeError : false,\n +\tReferenceError : false,\n +\tRegExp : false,\n +\tSet : false,\n +\tString : false,\n +\tSyntaxError : false,\n +\tTypeError : false,\n +\tURIError : false,\n +\tWeakMap : false\n +};\n \n -\t\t\tif (len === 0) {\n -\t\t\t\treturn -1;\n -\t\t\t}\n +exports.browser = {\n +\tArrayBuffer : false,\n +\tArrayBufferView : false,\n +\tAudio : false,\n +\tBlob : false,\n +\taddEventListener : false,\n +\tapplicationCache : false,\n +\tatob : false,\n +\tblur : false,\n +\tbtoa : false,\n +\tclearInterval : false,\n +\tclearTimeout : false,\n +\tclose : false,\n +\tclosed : false,\n +\tCustomEvent : false,\n +\tDataView : false,\n +\tDOMParser : false,\n +\tdefaultStatus : false,\n +\tdocument : false,\n +\tElement : false,\n +\tElementTimeControl : false,\n +\tevent : false,\n +\tFileReader : false,\n +\tFloat32Array : false,\n +\tFloat64Array : false,\n +\tFormData : false,\n +\tfocus : false,\n +\tframes : false,\n +\tgetComputedStyle : false,\n +\tHTMLElement : false,\n +\tHTMLAnchorElement : false,\n +\tHTMLBaseElement : false,\n +\tHTMLBlockquoteElement: false,\n +\tHTMLBodyElement : false,\n +\tHTMLBRElement : false,\n +\tHTMLButtonElement : false,\n +\tHTMLCanvasElement : false,\n +\tHTMLDirectoryElement : false,\n +\tHTMLDivElement : false,\n +\tHTMLDListElement : false,\n +\tHTMLFieldSetElement : false,\n +\tHTMLFontElement : false,\n +\tHTMLFormElement : false,\n +\tHTMLFrameElement : false,\n +\tHTMLFrameSetElement : false,\n +\tHTMLHeadElement : false,\n +\tHTMLHeadingElement : false,\n +\tHTMLHRElement : false,\n +\tHTMLHtmlElement : false,\n +\tHTMLIFrameElement : false,\n +\tHTMLImageElement : false,\n +\tHTMLInputElement : false,\n +\tHTMLIsIndexElement : false,\n +\tHTMLLabelElement : false,\n +\tHTMLLayerElement : false,\n +\tHTMLLegendElement : false,\n +\tHTMLLIElement : false,\n +\tHTMLLinkElement : false,\n +\tHTMLMapElement : false,\n +\tHTMLMenuElement : false,\n +\tHTMLMetaElement : false,\n +\tHTMLModElement : false,\n +\tHTMLObjectElement : false,\n +\tHTMLOListElement : false,\n +\tHTMLOptGroupElement : false,\n +\tHTMLOptionElement : false,\n +\tHTMLParagraphElement : false,\n +\tHTMLParamElement : false,\n +\tHTMLPreElement : false,\n +\tHTMLQuoteElement : false,\n +\tHTMLScriptElement : false,\n +\tHTMLSelectElement : false,\n +\tHTMLStyleElement : false,\n +\tHTMLTableCaptionElement: false,\n +\tHTMLTableCellElement : false,\n +\tHTMLTableColElement : false,\n +\tHTMLTableElement : false,\n +\tHTMLTableRowElement : false,\n +\tHTMLTableSectionElement: false,\n +\tHTMLTextAreaElement : false,\n +\tHTMLTitleElement : false,\n +\tHTMLUListElement : false,\n +\tHTMLVideoElement : false,\n +\thistory : false,\n +\tInt16Array : false,\n +\tInt32Array : false,\n +\tInt8Array : false,\n +\tImage : false,\n +\tlength : false,\n +\tlocalStorage : false,\n +\tlocation : false,\n +\tMessageChannel : false,\n +\tMessageEvent : false,\n +\tMessagePort : false,\n +\tMouseEvent : false,\n +\tmoveBy : false,\n +\tmoveTo : false,\n +\tMutationObserver : false,\n +\tname : false,\n +\tNode : false,\n +\tNodeFilter : false,\n +\tnavigator : false,\n +\tonbeforeunload : true,\n +\tonblur : true,\n +\tonerror : true,\n +\tonfocus : true,\n +\tonload : true,\n +\tonresize : true,\n +\tonunload : true,\n +\topen : false,\n +\topenDatabase : false,\n +\topener : false,\n +\tOption : false,\n +\tparent : false,\n +\tprint : false,\n +\tremoveEventListener : false,\n +\tresizeBy : false,\n +\tresizeTo : false,\n +\tscreen : false,\n +\tscroll : false,\n +\tscrollBy : false,\n +\tscrollTo : false,\n +\tsessionStorage : false,\n +\tsetInterval : false,\n +\tsetTimeout : false,\n +\tSharedWorker : false,\n +\tstatus : false,\n +\tSVGAElement : false,\n +\tSVGAltGlyphDefElement: false,\n +\tSVGAltGlyphElement : false,\n +\tSVGAltGlyphItemElement: false,\n +\tSVGAngle : false,\n +\tSVGAnimateColorElement: false,\n +\tSVGAnimateElement : false,\n +\tSVGAnimateMotionElement: false,\n +\tSVGAnimateTransformElement: false,\n +\tSVGAnimatedAngle : false,\n +\tSVGAnimatedBoolean : false,\n +\tSVGAnimatedEnumeration: false,\n +\tSVGAnimatedInteger : false,\n +\tSVGAnimatedLength : false,\n +\tSVGAnimatedLengthList: false,\n +\tSVGAnimatedNumber : false,\n +\tSVGAnimatedNumberList: false,\n +\tSVGAnimatedPathData : false,\n +\tSVGAnimatedPoints : false,\n +\tSVGAnimatedPreserveAspectRatio: false,\n +\tSVGAnimatedRect : false,\n +\tSVGAnimatedString : false,\n +\tSVGAnimatedTransformList: false,\n +\tSVGAnimationElement : false,\n +\tSVGCSSRule : false,\n +\tSVGCircleElement : false,\n +\tSVGClipPathElement : false,\n +\tSVGColor : false,\n +\tSVGColorProfileElement: false,\n +\tSVGColorProfileRule : false,\n +\tSVGComponentTransferFunctionElement: false,\n +\tSVGCursorElement : false,\n +\tSVGDefsElement : false,\n +\tSVGDescElement : false,\n +\tSVGDocument : false,\n +\tSVGElement : false,\n +\tSVGElementInstance : false,\n +\tSVGElementInstanceList: false,\n +\tSVGEllipseElement : false,\n +\tSVGExternalResourcesRequired: false,\n +\tSVGFEBlendElement : false,\n +\tSVGFEColorMatrixElement: false,\n +\tSVGFEComponentTransferElement: false,\n +\tSVGFECompositeElement: false,\n +\tSVGFEConvolveMatrixElement: false,\n +\tSVGFEDiffuseLightingElement: false,\n +\tSVGFEDisplacementMapElement: false,\n +\tSVGFEDistantLightElement: false,\n +\tSVGFEFloodElement : false,\n +\tSVGFEFuncAElement : false,\n +\tSVGFEFuncBElement : false,\n +\tSVGFEFuncGElement : false,\n +\tSVGFEFuncRElement : false,\n +\tSVGFEGaussianBlurElement: false,\n +\tSVGFEImageElement : false,\n +\tSVGFEMergeElement : false,\n +\tSVGFEMergeNodeElement: false,\n +\tSVGFEMorphologyElement: false,\n +\tSVGFEOffsetElement : false,\n +\tSVGFEPointLightElement: false,\n +\tSVGFESpecularLightingElement: false,\n +\tSVGFESpotLightElement: false,\n +\tSVGFETileElement : false,\n +\tSVGFETurbulenceElement: false,\n +\tSVGFilterElement : false,\n +\tSVGFilterPrimitiveStandardAttributes: false,\n +\tSVGFitToViewBox : false,\n +\tSVGFontElement : false,\n +\tSVGFontFaceElement : false,\n +\tSVGFontFaceFormatElement: false,\n +\tSVGFontFaceNameElement: false,\n +\tSVGFontFaceSrcElement: false,\n +\tSVGFontFaceUriElement: false,\n +\tSVGForeignObjectElement: false,\n +\tSVGGElement : false,\n +\tSVGGlyphElement : false,\n +\tSVGGlyphRefElement : false,\n +\tSVGGradientElement : false,\n +\tSVGHKernElement : false,\n +\tSVGICCColor : false,\n +\tSVGImageElement : false,\n +\tSVGLangSpace : false,\n +\tSVGLength : false,\n +\tSVGLengthList : false,\n +\tSVGLineElement : false,\n +\tSVGLinearGradientElement: false,\n +\tSVGLocatable : false,\n +\tSVGMPathElement : false,\n +\tSVGMarkerElement : false,\n +\tSVGMaskElement : false,\n +\tSVGMatrix : false,\n +\tSVGMetadataElement : false,\n +\tSVGMissingGlyphElement: false,\n +\tSVGNumber : false,\n +\tSVGNumberList : false,\n +\tSVGPaint : false,\n +\tSVGPathElement : false,\n +\tSVGPathSeg : false,\n +\tSVGPathSegArcAbs : false,\n +\tSVGPathSegArcRel : false,\n +\tSVGPathSegClosePath : false,\n +\tSVGPathSegCurvetoCubicAbs: false,\n +\tSVGPathSegCurvetoCubicRel: false,\n +\tSVGPathSegCurvetoCubicSmoothAbs: false,\n +\tSVGPathSegCurvetoCubicSmoothRel: false,\n +\tSVGPathSegCurvetoQuadraticAbs: false,\n +\tSVGPathSegCurvetoQuadraticRel: false,\n +\tSVGPathSegCurvetoQuadraticSmoothAbs: false,\n +\tSVGPathSegCurvetoQuadraticSmoothRel: false,\n +\tSVGPathSegLinetoAbs : false,\n +\tSVGPathSegLinetoHorizontalAbs: false,\n +\tSVGPathSegLinetoHorizontalRel: false,\n +\tSVGPathSegLinetoRel : false,\n +\tSVGPathSegLinetoVerticalAbs: false,\n +\tSVGPathSegLinetoVerticalRel: false,\n +\tSVGPathSegList : false,\n +\tSVGPathSegMovetoAbs : false,\n +\tSVGPathSegMovetoRel : false,\n +\tSVGPatternElement : false,\n +\tSVGPoint : false,\n +\tSVGPointList : false,\n +\tSVGPolygonElement : false,\n +\tSVGPolylineElement : false,\n +\tSVGPreserveAspectRatio: false,\n +\tSVGRadialGradientElement: false,\n +\tSVGRect : false,\n +\tSVGRectElement : false,\n +\tSVGRenderingIntent : false,\n +\tSVGSVGElement : false,\n +\tSVGScriptElement : false,\n +\tSVGSetElement : false,\n +\tSVGStopElement : false,\n +\tSVGStringList : false,\n +\tSVGStylable : false,\n +\tSVGStyleElement : false,\n +\tSVGSwitchElement : false,\n +\tSVGSymbolElement : false,\n +\tSVGTRefElement : false,\n +\tSVGTSpanElement : false,\n +\tSVGTests : false,\n +\tSVGTextContentElement: false,\n +\tSVGTextElement : false,\n +\tSVGTextPathElement : false,\n +\tSVGTextPositioningElement: false,\n +\tSVGTitleElement : false,\n +\tSVGTransform : false,\n +\tSVGTransformList : false,\n +\tSVGTransformable : false,\n +\tSVGURIReference : false,\n +\tSVGUnitTypes : false,\n +\tSVGUseElement : false,\n +\tSVGVKernElement : false,\n +\tSVGViewElement : false,\n +\tSVGViewSpec : false,\n +\tSVGZoomAndPan : false,\n +\tTimeEvent : false,\n +\ttop : false,\n +\tUint16Array : false,\n +\tUint32Array : false,\n +\tUint8Array : false,\n +\tUint8ClampedArray : false,\n +\tWebSocket : false,\n +\twindow : false,\n +\tWorker : false,\n +\tXMLHttpRequest : false,\n +\tXMLSerializer : false,\n +\tXPathEvaluator : false,\n +\tXPathException : false,\n +\tXPathExpression : false,\n +\tXPathNamespace : false,\n +\tXPathNSResolver : false,\n +\tXPathResult : false\n +};\n \n -\t\t\tvar n = 0;\n -\t\t\tif (arguments.length > 0) {\n -\t\t\t\tn = Number(arguments[1]);\n -\t\t\t\tif (n != n) { // shortcut for verifying if it\'s NaN\n -\t\t\t\t\tn = 0;\n -\t\t\t\t} else if (n !== 0 && n != Infinity && n != -Infinity) {\n -\t\t\t\t\tn = (n > 0 || -1) * Math.floor(Math.abs(n));\n -\t\t\t\t}\n -\t\t\t}\n +exports.devel = {\n +\talert : false,\n +\tconfirm: false,\n +\tconsole: false,\n +\tDebug : false,\n +\topera : false,\n +\tprompt : false\n +};\n \n -\t\t\tif (n >= len) {\n -\t\t\t\treturn -1;\n -\t\t\t}\n +exports.worker = {\n +\timportScripts: true,\n +\tpostMessage : true,\n +\tself : true\n +};\n +exports.nonstandard = {\n +\tescape : false,\n +\tunescape: false\n +};\n \n -\t\t\tvar k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n -\t\t\tfor (; k < len; k++) {\n -\t\t\t\tif (k in t && t[k] === searchElement) {\n -\t\t\t\t\treturn k;\n -\t\t\t\t}\n -\t\t\t}\n +exports.couch = {\n +\t"require" : false,\n +\trespond : false,\n +\tgetRow : false,\n +\temit : false,\n +\tsend : false,\n +\tstart : false,\n +\tsum : false,\n +\tlog : false,\n +\texports : false,\n +\tmodule : false,\n +\tprovides : false\n +};\n \n -\t\t\treturn -1;\n -\t\t};\n -\t}\n +exports.node = {\n +\t__filename : false,\n +\t__dirname : false,\n +\tBuffer : false,\n +\tDataView : false,\n +\tconsole : false,\n +\texports : true, // In Node it is ok to exports = module.exports = foo();\n +\tGLOBAL : false,\n +\tglobal : false,\n +\tmodule : false,\n +\tprocess : false,\n +\trequire : false,\n +\tsetTimeout : false,\n +\tclearTimeout : false,\n +\tsetInterval : false,\n +\tclearInterval : false,\n +\tsetImmediate : false, // v0.9.1+\n +\tclearImmediate: false // v0.9.1+\n +};\n \n -\tif (typeof Object.create !== "function") {\n -\t\tObject.create = function (o) {\n -\t\t\tF.prototype = o;\n -\t\t\treturn new F();\n -\t\t};\n -\t}\n +exports.phantom = {\n +\tphantom : true,\n +\trequire : true,\n +\tWebPage : true\n +};\n \n -\tif (typeof Object.keys !== "function") {\n -\t\tObject.keys = function (o) {\n -\t\t\tvar a = [], k;\n -\t\t\tfor (k in o) {\n -\t\t\t\tif (is_own(o, k)) {\n -\t\t\t\t\ta.push(k);\n -\t\t\t\t}\n +exports.rhino = {\n +\tdefineClass : false,\n +\tdeserialize : false,\n +\tgc : false,\n +\thelp : false,\n +\timportPackage: false,\n +\t"java" : false,\n +\tload : false,\n +\tloadClass : false,\n +\tprint : false,\n +\tquit : false,\n +\treadFile : false,\n +\treadUrl : false,\n +\trunCommand : false,\n +\tseal : false,\n +\tserialize : false,\n +\tspawn : false,\n +\tsync : false,\n +\ttoint32 : false,\n +\tversion : false\n +};\n +\n +exports.shelljs = {\n +\ttarget : false,\n +\techo : false,\n +\texit : false,\n +\tcd : false,\n +\tpwd : false,\n +\tls : false,\n +\tfind : false,\n +\tcp : false,\n +\trm : false,\n +\tmv : false,\n +\tmkdir : false,\n +\ttest : false,\n +\tcat : false,\n +\tsed : false,\n +\tgrep : false,\n +\twhich : false,\n +\tdirs : false,\n +\tpushd : false,\n +\tpopd : false,\n +\tenv : false,\n +\texec : false,\n +\tchmod : false,\n +\tconfig : false,\n +\terror : false,\n +\ttempdir : false\n +};\n +\n +exports.wsh = {\n +\tActiveXObject : true,\n +\tEnumerator : true,\n +\tGetObject : true,\n +\tScriptEngine : true,\n +\tScriptEngineBuildVersion : true,\n +\tScriptEngineMajorVersion : true,\n +\tScriptEngineMinorVersion : true,\n +\tVBArray : true,\n +\tWSH : true,\n +\tWScript : true,\n +\tXDomainRequest : true\n +};\n +\n +exports.dojo = {\n +\tdojo : false,\n +\tdijit : false,\n +\tdojox : false,\n +\tdefine\t : false,\n +\t"require": false\n +};\n +\n +exports.jquery = {\n +\t"$" : false,\n +\tjQuery : false\n +};\n +\n +exports.mootools = {\n +\t"$" : false,\n +\t"$$" : false,\n +\tAsset : false,\n +\tBrowser : false,\n +\tChain : false,\n +\tClass : false,\n +\tColor : false,\n +\tCookie : false,\n +\tCore : false,\n +\tDocument : false,\n +\tDomReady : false,\n +\tDOMEvent : false,\n +\tDOMReady : false,\n +\tDrag : false,\n +\tElement : false,\n +\tElements : false,\n +\tEvent : false,\n +\tEvents : false,\n +\tFx : false,\n +\tGroup : false,\n +\tHash : false,\n +\tHtmlTable : false,\n +\tIframe : false,\n +\tIframeShim : false,\n +\tInputValidator: false,\n +\tinstanceOf : false,\n +\tKeyboard : false,\n +\tLocale : false,\n +\tMask : false,\n +\tMooTools : false,\n +\tNative : false,\n +\tOptions : false,\n +\tOverText : false,\n +\tRequest : false,\n +\tScroller : false,\n +\tSlick : false,\n +\tSlider : false,\n +\tSortables : false,\n +\tSpinner : false,\n +\tSwiff : false,\n +\tTips : false,\n +\tType : false,\n +\ttypeOf : false,\n +\tURI : false,\n +\tWindow : false\n +};\n +\n +exports.prototypejs = {\n +\t"$" : false,\n +\t"$$" : false,\n +\t"$A" : false,\n +\t"$F" : false,\n +\t"$H" : false,\n +\t"$R" : false,\n +\t"$break" : false,\n +\t"$continue" : false,\n +\t"$w" : false,\n +\tAbstract : false,\n +\tAjax : false,\n +\tClass : false,\n +\tEnumerable : false,\n +\tElement : false,\n +\tEvent : false,\n +\tField : false,\n +\tForm : false,\n +\tHash : false,\n +\tInsertion : false,\n +\tObjectRange : false,\n +\tPeriodicalExecuter: false,\n +\tPosition : false,\n +\tPrototype : false,\n +\tSelector : false,\n +\tTemplate : false,\n +\tToggle : false,\n +\tTry : false,\n +\tAutocompleter : false,\n +\tBuilder : false,\n +\tControl : false,\n +\tDraggable : false,\n +\tDraggables : false,\n +\tDroppables : false,\n +\tEffect : false,\n +\tSortable : false,\n +\tSortableObserver : false,\n +\tSound : false,\n +\tScriptaculous : false\n +};\n +\n +exports.yui = {\n +\tYUI : false,\n +\tY : false,\n +\tYUI_config: false\n +};\n +\n +\n +},\n +{}],\n +"n4bKNg":[function(req,module,exports){\n +\n +var _ = req("underscore");\n +var events = req("events");\n +var vars = req("../shared/vars.js");\n +var messages = req("../shared/messages.js");\n +var Lexer = req("./lex.js").Lexer;\n +var reg = req("./reg.js");\n +var state = req("./state.js").state;\n +var style = req("./style.js");\n +var console = req("console-browserify");\n +\n +var JSHINT = (function () {\n +\t\n +\n +\tvar anonname, // The guessed name for anonymous functions.\n +\t\tapi, // Extension API\n +\t\tbang = {\n +\t\t\t"<" : true,\n +\t\t\t"<=" : true,\n +\t\t\t"==" : true,\n +\t\t\t"===": true,\n +\t\t\t"!==": true,\n +\t\t\t"!=" : true,\n +\t\t\t">" : true,\n +\t\t\t">=" : true,\n +\t\t\t"+" : true,\n +\t\t\t"-" : true,\n +\t\t\t"*" : true,\n +\t\t\t"/" : true,\n +\t\t\t"%" : true\n +\t\t},\n +\t\tboolOptions = {\n +\t\t\tasi : true, // if automatic semicolon insertion should be tolerated\n +\t\t\tbitwise : true, // if bitwise operators should not be allowed\n +\t\t\tboss : true, // if advanced usage of assignments should be allowed\n +\t\t\tbrowser : true, // if the standard browser globals should be predefined\n +\t\t\tcamelcase : true, // if identifiers should be required in camel case\n +\t\t\tcouch : true, // if CouchDB globals should be predefined\n +\t\t\tcurly : true, // if curly braces around all blocks should be required\n +\t\t\tdebug : true, // if debugger statements should be allowed\n +\t\t\tdevel : true, // if logging globals should be predefined (console, alert, etc.)\n +\t\t\tdojo : true, // if Dojo Toolkit globals should be predefined\n +\t\t\teqeqeq : true, // if === should be required\n +\t\t\teqnull : true, // if == null comparisons should be tolerated\n +\t\t\tes3 : true, // if ES3 syntax should be allowed\n +\t\t\tes5 : true, // if ES5 syntax should be allowed (is now set per default)\n +\t\t\tesnext : true, // if es.next specific syntax should be allowed\n +\t\t\tmoz : true, // if mozilla specific syntax should be allowed\n +\t\t\tevil : true, // if eval should be allowed\n +\t\t\texpr : true, // if ExpressionStatement should be allowed as Programs\n +\t\t\tforin : true, // if for in statements must filter\n +\t\t\tfuncscope : true, // if only function scope should be used for scope tests\n +\t\t\tgcl : true, // if JSHint should be compatible with Google Closure Linter\n +\t\t\tglobalstrict: true, // if global should be allowed (also enables \'strict\')\n +\t\t\timmed : true, // if immediate invocations must be wrapped in parens\n +\t\t\titerator : true, // if the `__iterator__` property should be allowed\n +\t\t\tjquery : true, // if jQuery globals should be predefined\n +\t\t\tlastsemic : true, // if semicolons may be ommitted for the trailing\n +\t\t\tlaxbreak : true, // if line breaks should not be checked\n +\t\t\tlaxcomma : true, // if line breaks should not be checked around commas\n +\t\t\tloopfunc : true, // if functions should be allowed to be defined within\n +\t\t\tmootools : true, // if MooTools globals should be predefined\n +\t\t\tmultistr : true, // allow multiline strings\n +\t\t\tnewcap : true, // if constructor names must be capitalized\n +\t\t\tnoarg : true, // if arguments.caller and arguments.callee should be\n +\t\t\tnode : true, // if the Node.js environment globals should be\n +\t\t\tnoempty : true, // if empty blocks should be disallowed\n +\t\t\tnonew : true, // if using `new` for side-effects should be disallowed\n +\t\t\tnonstandard : true, // if non-standard (but widely adopted) globals should\n +\t\t\tnomen : true, // if names should be checked\n +\t\t\tonevar : true, // if only one var statement per function should be\n +\t\t\tpassfail : true, // if the scan should stop on first error\n +\t\t\tphantom : true, // if PhantomJS symbols should be allowed\n +\t\t\tplusplus : true, // if increment/decrement should not be allowed\n +\t\t\tproto : true, // if the `__proto__` property should be allowed\n +\t\t\tprototypejs : true, // if Prototype and Scriptaculous globals should be\n +\t\t\trhino : true, // if the Rhino environment globals should be predefined\n +\t\t\tshelljs : true, // if ShellJS globals should be predefined\n +\t\t\tundef : true, // if variables should be declared before used\n +\t\t\tscripturl : true, // if script-targeted URLs should be tolerated\n +\t\t\tshadow : true, // if variable shadowing should be tolerated\n +\t\t\tsmarttabs : true, // if smarttabs should be tolerated\n +\t\t\tstrict : true, // require the pragma\n +\t\t\tsub : true, // if all forms of subscript notation are tolerated\n +\t\t\tsupernew : true, // if `new function () { ... };` and `new Object;`\n +\t\t\ttrailing : true, // if trailing whitespace rules apply\n +\t\t\tvalidthis : true, // if \'this\' inside a non-constructor function is valid.\n +\t\t\twithstmt : true, // if with statements should be allowed\n +\t\t\twhite : true, // if strict whitespace rules apply\n +\t\t\tworker : true, // if Web Worker script symbols should be allowed\n +\t\t\twsh : true, // if the Windows Scripting Host environment globals\n +\t\t\tyui : true, // YUI variables should be predefined\n +\t\t\tonecase : true, // if one case switch statements should be allowed\n +\t\t\tregexp : true, // if the . should not be allowed in regexp literals\n +\t\t\tregexdash : true // if unescaped first/last dash (-) inside brackets\n +\t\t},\n +\t\tvalOptions = {\n +\t\t\tmaxlen : false,\n +\t\t\tindent : false,\n +\t\t\tmaxerr : false,\n +\t\t\tpredef : false,\n +\t\t\tquotmark : false, //\'single\'|\'double\'|true\n +\t\t\tscope : false,\n +\t\t\tmaxstatements: false, // {int} max statements per function\n +\t\t\tmaxdepth : false, // {int} max nested block depth per function\n +\t\t\tmaxparams : false, // {int} max params per function\n +\t\t\tmaxcomplexity: false, // {int} max cyclomatic complexity per function\n +\t\t\tunused : true, // warn if variables are unused. Available options:\n +\t\t\tlatedef : false // warn if the variable is used before its definition\n +\t\t},\n +\t\tinvertedOptions = {\n +\t\t\tbitwise : true,\n +\t\t\tforin : true,\n +\t\t\tnewcap : true,\n +\t\t\tnomen : true,\n +\t\t\tplusplus: true,\n +\t\t\tregexp : true,\n +\t\t\tundef : true,\n +\t\t\twhite : true,\n +\t\t\teqeqeq : true,\n +\t\t\tonevar : true,\n +\t\t\tstrict : true\n +\t\t},\n +\t\trenamedOptions = {\n +\t\t\teqeq : "eqeqeq",\n +\t\t\tvars : "onevar",\n +\t\t\twindows: "wsh",\n +\t\t\tsloppy : "strict"\n +\t\t},\n +\n +\t\tdeclared, // Globals that were declared using /*global ... */ syntax.\n +\t\texported, // Variables that are used outside of the current file.\n +\n +\t\tfunctionicity = [\n +\t\t\t"closure", "exception", "global", "label",\n +\t\t\t"outer", "unused", "var"\n +\t\t],\n +\n +\t\tfunct, // The current function\n +\t\tfunctions, // All of the functions\n +\n +\t\tglobal, // The global scope\n +\t\timplied, // Implied globals\n +\t\tinblock,\n +\t\tindent,\n +\t\tlookahead,\n +\t\tlex,\n +\t\tmember,\n +\t\tmembersOnly,\n +\t\tnoreach,\n +\t\tpredefined,\t\t// Global variables defined by option\n +\n +\t\tscope, // The current scope\n +\t\tstack,\n +\t\tunuseds,\n +\t\turls,\n +\t\twarnings,\n +\n +\t\textraModules = [],\n +\t\temitter = new events.EventEmitter();\n +\n +\tfunction checkOption(name, t) {\n +\t\tname = name.trim();\n +\n +\t\tif (/^[+-]W\\d{3}$/g.test(name)) {\n +\t\t\treturn true;\n +\t\t}\n +\n +\t\tif (valOptions[name] === undefined && boolOptions[name] === undefined) {\n +\t\t\tif (t.type !== "jslint") {\n +\t\t\t\terror("E001", t, name);\n +\t\t\t\treturn false;\n \t\t\t}\n -\t\t\treturn a;\n -\t\t};\n -\t}\n +\t\t}\n \n -\tfunction isAlpha(str) {\n -\t\treturn (str >= "a" && str <= "z\\uffff") ||\n -\t\t\t(str >= "A" && str <= "Z\\uffff");\n +\t\treturn true;\n \t}\n \n -\tfunction isDigit(str) {\n -\t\treturn (str >= "0" && str <= "9");\n +\tfunction isString(obj) {\n +\t\treturn Object.prototype.toString.call(obj) === "[object String]";\n \t}\n \n -\tfunction isIdentifier(token, value) {\n -\t\tif (!token)\n +\tfunction isIdentifier(tkn, value) {\n +\t\tif (!tkn)\n +\t\t\treturn false;\n +\n +\t\tif (!tkn.identifier || tkn.value !== value)\n \t\t\treturn false;\n \n -\t\tif (!token.identifier || token.value !== value)\n +\t\treturn true;\n +\t}\n +\n +\tfunction isReserved(token) {\n +\t\tif (!token.reserved) {\n \t\t\treturn false;\n +\t\t}\n +\t\tvar meta = token.meta;\n +\n +\t\tif (meta && meta.isFutureReservedWord && state.option.inES5()) {\n +\t\t\tif (!meta.es5) {\n +\t\t\t\treturn false;\n +\t\t\t}\n +\t\t\tif (meta.strictOnly) {\n +\t\t\t\tif (!state.option.strict && !state.directive["use strict"]) {\n +\t\t\t\t\treturn false;\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\tif (token.isProperty) {\n +\t\t\t\treturn false;\n +\t\t\t}\n +\t\t}\n \n \t\treturn true;\n \t}\n @@ -2816,7 +4086,7 @@ var JSHINT = (function () {\n \tfunction combine(t, o) {\n \t\tvar n;\n \t\tfor (n in o) {\n -\t\t\tif (is_own(o, n) && !is_own(JSHINT.blacklist, n)) {\n +\t\t\tif (_.has(o, n) && !_.has(JSHINT.blacklist, n)) {\n \t\t\t\tt[n] = o[n];\n \t\t\t}\n \t\t}\n @@ -2829,95 +4099,135 @@ var JSHINT = (function () {\n \t}\n \n \tfunction assume() {\n -\t\tif (option.couch) {\n -\t\t\tcombine(predefined, couch);\n +\t\tif (state.option.couch) {\n +\t\t\tcombine(predefined, vars.couch);\n \t\t}\n \n -\t\tif (option.rhino) {\n -\t\t\tcombine(predefined, rhino);\n +\t\tif (state.option.rhino) {\n +\t\t\tcombine(predefined, vars.rhino);\n \t\t}\n \n -\t\tif (option.prototypejs) {\n -\t\t\tcombine(predefined, prototypejs);\n +\t\tif (state.option.shelljs) {\n +\t\t\tcombine(predefined, vars.shelljs);\n +\t\t\tcombine(predefined, vars.node);\n \t\t}\n \n -\t\tif (option.node) {\n -\t\t\tcombine(predefined, node);\n -\t\t\toption.globalstrict = true;\n +\t\tif (state.option.phantom) {\n +\t\t\tcombine(predefined, vars.phantom);\n \t\t}\n \n -\t\tif (option.devel) {\n -\t\t\tcombine(predefined, devel);\n +\t\tif (state.option.prototypejs) {\n +\t\t\tcombine(predefined, vars.prototypejs);\n \t\t}\n \n -\t\tif (option.dojo) {\n -\t\t\tcombine(predefined, dojo);\n +\t\tif (state.option.node) {\n +\t\t\tcombine(predefined, vars.node);\n \t\t}\n \n -\t\tif (option.browser) {\n -\t\t\tcombine(predefined, browser);\n +\t\tif (state.option.devel) {\n +\t\t\tcombine(predefined, vars.devel);\n \t\t}\n \n -\t\tif (option.nonstandard) {\n -\t\t\tcombine(predefined, nonstandard);\n +\t\tif (state.option.dojo) {\n +\t\t\tcombine(predefined, vars.dojo);\n \t\t}\n \n -\t\tif (option.jquery) {\n -\t\t\tcombine(predefined, jquery);\n +\t\tif (state.option.browser) {\n +\t\t\tcombine(predefined, vars.browser);\n \t\t}\n \n -\t\tif (option.mootools) {\n -\t\t\tcombine(predefined, mootools);\n +\t\tif (state.option.nonstandard) {\n +\t\t\tcombine(predefined, vars.nonstandard);\n \t\t}\n \n -\t\tif (option.worker) {\n -\t\t\tcombine(predefined, worker);\n +\t\tif (state.option.jquery) {\n +\t\t\tcombine(predefined, vars.jquery);\n \t\t}\n \n -\t\tif (option.wsh) {\n -\t\t\tcombine(predefined, wsh);\n +\t\tif (state.option.mootools) {\n +\t\t\tcombine(predefined, vars.mootools);\n \t\t}\n \n -\t\tif (option.esnext) {\n -\t\t\tuseESNextSyntax();\n +\t\tif (state.option.worker) {\n +\t\t\tcombine(predefined, vars.worker);\n \t\t}\n \n -\t\tif (option.globalstrict && option.strict !== false) {\n -\t\t\toption.strict = true;\n +\t\tif (state.option.wsh) {\n +\t\t\tcombine(predefined, vars.wsh);\n \t\t}\n \n -\t\tif (option.yui) {\n -\t\t\tcombine(predefined, yui);\n +\t\tif (state.option.globalstrict && state.option.strict !== false) {\n +\t\t\tstate.option.strict = true;\n \t\t}\n +\n +\t\tif (state.option.yui) {\n +\t\t\tcombine(predefined, vars.yui);\n +\t\t}\n +\n +\t\tstate.option.inMoz = function (strict) {\n +\t\t\treturn state.option.moz;\n +\t\t};\n +\n +\t\tstate.option.inESNext = function (strict) {\n +\t\t\treturn state.option.moz || state.option.esnext;\n +\t\t};\n +\n +\t\tstate.option.inES5 = function (/* strict */) {\n +\t\t\treturn !state.option.es3;\n +\t\t};\n +\n +\t\tstate.option.inES3 = function (strict) {\n +\t\t\tif (strict) {\n +\t\t\t\treturn !state.option.moz && !state.option.esnext && state.option.es3;\n +\t\t\t}\n +\t\t\treturn state.option.es3;\n +\t\t};\n \t}\n -\tfunction quit(message, line, chr) {\n -\t\tvar percentage = Math.floor((line / lines.length) * 100);\n +\tfunction quit(code, line, chr) {\n +\t\tvar percentage = Math.floor((line / state.lines.length) * 100);\n +\t\tvar message = messages.errors[code].desc;\n \n \t\tthrow {\n \t\t\tname: "JSHintError",\n \t\t\tline: line,\n \t\t\tcharacter: chr,\n \t\t\tmessage: message + " (" + percentage + "% scanned).",\n -\t\t\traw: message\n +\t\t\traw: message,\n +\t\t\tcode: code\n \t\t};\n \t}\n \n -\tfunction isundef(scope, m, t, a) {\n -\t\treturn JSHINT.undefs.push([scope, m, t, a]);\n +\tfunction isundef(scope, code, token, a) {\n +\t\treturn JSHINT.undefs.push([scope, code, token, a]);\n \t}\n \n -\tfunction warning(m, t, a, b, c, d) {\n -\t\tvar ch, l, w;\n -\t\tt = t || nexttoken;\n +\tfunction warning(code, t, a, b, c, d) {\n +\t\tvar ch, l, w, msg;\n +\n +\t\tif (/^W\\d{3}$/.test(code)) {\n +\t\t\tif (state.ignored[code])\n +\t\t\t\treturn;\n +\n +\t\t\tmsg = messages.warnings[code];\n +\t\t} else if (/E\\d{3}/.test(code)) {\n +\t\t\tmsg = messages.errors[code];\n +\t\t} else if (/I\\d{3}/.test(code)) {\n +\t\t\tmsg = messages.info[code];\n +\t\t}\n +\n +\t\tt = t || state.tokens.next;\n \t\tif (t.id === "(end)") { // `~\n -\t\t\tt = token;\n +\t\t\tt = state.tokens.curr;\n \t\t}\n +\n \t\tl = t.line || 0;\n \t\tch = t.from || 0;\n +\n \t\tw = {\n \t\t\tid: "(error)",\n -\t\t\traw: m,\n -\t\t\tevidence: lines[l - 1] || "",\n +\t\t\traw: msg.desc,\n +\t\t\tcode: msg.code,\n +\t\t\tevidence: state.lines[l - 1] || "",\n \t\t\tline: l,\n \t\t\tcharacter: ch,\n \t\t\tscope: JSHINT.scope,\n @@ -2926,15 +4236,19 @@ var JSHINT = (function () {\n \t\t\tc: c,\n \t\t\td: d\n \t\t};\n -\t\tw.reason = supplant(m, w);\n +\n +\t\tw.reason = supplant(msg.desc, w);\n \t\tJSHINT.errors.push(w);\n -\t\tif (option.passfail) {\n -\t\t\tquit("Stopping. ", l, ch);\n +\n +\t\tif (state.option.passfail) {\n +\t\t\tquit("E042", l, ch);\n \t\t}\n +\n \t\twarnings += 1;\n -\t\tif (warnings >= option.maxerr) {\n -\t\t\tquit("Too many errors.", l, ch);\n +\t\tif (warnings >= state.option.maxerr) {\n +\t\t\tquit("E043", l, ch);\n \t\t}\n +\n \t\treturn w;\n \t}\n \n @@ -2966,666 +4280,230 @@ var JSHINT = (function () {\n \t\treturn i;\n \t}\n \n -\tvar lex = (function lex() {\n -\t\tvar character, from, line, s;\n -\n -\t\tfunction nextLine() {\n -\t\t\tvar at,\n -\t\t\t\tmatch,\n -\t\t\t\ttw; // trailing whitespace check\n -\n -\t\t\tif (line >= lines.length)\n -\t\t\t\treturn false;\n +\tfunction addlabel(t, type, tkn, islet) {\n +\t\tif (type === "exception") {\n +\t\t\tif (_.has(funct["(context)"], t)) {\n +\t\t\t\tif (funct[t] !== true && !state.option.node) {\n +\t\t\t\t\twarning("W002", state.tokens.next, t);\n +\t\t\t\t}\n +\t\t\t}\n +\t\t}\n \n -\t\t\tcharacter = 1;\n -\t\t\ts = lines[line];\n -\t\t\tline += 1;\n -\t\t\tif (option.smarttabs) {\n -\t\t\t\tmatch = s.match(/(\\/\\/)? \\t/);\n -\t\t\t\tat = match && !match[1] ? 0 : -1;\n +\t\tif (_.has(funct, t) && !funct["(global)"]) {\n +\t\t\tif (funct[t] === true) {\n +\t\t\t\tif (state.option.latedef) {\n +\t\t\t\t\tif ((state.option.latedef === true && _.contains([funct[t], type], "unction")) ||\n +\t\t\t\t\t\t\t!_.contains([funct[t], type], "unction")) {\n +\t\t\t\t\t\twarning("W003", state.tokens.next, t);\n +\t\t\t\t\t}\n +\t\t\t\t}\n \t\t\t} else {\n -\t\t\t\tat = s.search(/ \\t|\\t [^\\*]/);\n +\t\t\t\tif (!state.option.shadow && type !== "exception" ||\n +\t\t\t\t\t\t\t(funct["(blockscope)"].getlabel(t))) {\n +\t\t\t\t\twarning("W004", state.tokens.next, t);\n +\t\t\t\t}\n \t\t\t}\n +\t\t}\n +\t\tif (funct["(blockscope)"] && funct["(blockscope)"].current.has(t)) {\n +\t\t\terror("E044", state.tokens.next, t);\n +\t\t}\n +\t\tif (islet) {\n +\t\t\tfunct["(blockscope)"].current.add(t, type, state.tokens.curr);\n +\t\t} else {\n \n -\t\t\tif (at >= 0)\n -\t\t\t\twarningAt("Mixed spaces and tabs.", line, at + 1);\n +\t\t\tfunct[t] = type;\n \n -\t\t\ts = s.replace(/\\t/g, tab);\n -\t\t\tat = s.search(cx);\n +\t\t\tif (tkn) {\n +\t\t\t\tfunct["(tokens)"][t] = tkn;\n +\t\t\t}\n \n -\t\t\tif (at >= 0)\n -\t\t\t\twarningAt("Unsafe character.", line, at);\n +\t\t\tif (funct["(global)"]) {\n +\t\t\t\tglobal[t] = funct;\n +\t\t\t\tif (_.has(implied, t)) {\n +\t\t\t\t\tif (state.option.latedef) {\n +\t\t\t\t\t\tif ((state.option.latedef === true && _.contains([funct[t], type], "unction")) ||\n +\t\t\t\t\t\t\t\t!_.contains([funct[t], type], "unction")) {\n +\t\t\t\t\t\t\twarning("W003", state.tokens.next, t);\n +\t\t\t\t\t\t}\n +\t\t\t\t\t}\n \n -\t\t\tif (option.maxlen && option.maxlen < s.length)\n -\t\t\t\twarningAt("Line too long.", line, s.length);\n -\t\t\ttw = option.trailing && s.match(/^(.*?)\\s+$/);\n -\t\t\tif (tw && !/^\\s+$/.test(s)) {\n -\t\t\t\twarningAt("Trailing whitespace.", line, tw[1].length + 1);\n +\t\t\t\t\tdelete implied[t];\n +\t\t\t\t}\n +\t\t\t} else {\n +\t\t\t\tscope[t] = funct;\n \t\t\t}\n -\t\t\treturn true;\n \t\t}\n +\t}\n +\n +\tfunction doOption() {\n +\t\tvar nt = state.tokens.next;\n +\t\tvar body = nt.body.match(/(-\\s+)?[^\\s,]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g);\n +\t\tvar predef = {};\n \n -\t\tfunction it(type, value) {\n -\t\t\tvar i, t;\n +\t\tif (nt.type === "globals") {\n +\t\t\tbody.forEach(function (g) {\n +\t\t\t\tg = g.split(":");\n +\t\t\t\tvar key = (g[0] || "").trim();\n +\t\t\t\tvar val = (g[1] || "").trim();\n \n -\t\t\tfunction checkName(name) {\n -\t\t\t\tif (!option.proto && name === "__proto__") {\n -\t\t\t\t\twarningAt("The \'{a}\' property is deprecated.", line, from, name);\n -\t\t\t\t\treturn;\n -\t\t\t\t}\n +\t\t\t\tif (key.charAt(0) === "-") {\n +\t\t\t\t\tkey = key.slice(1);\n +\t\t\t\t\tval = false;\n \n -\t\t\t\tif (!option.iterator && name === "__iterator__") {\n -\t\t\t\t\twarningAt("\'{a}\' is only available in JavaScript 1.7.", line, from, name);\n -\t\t\t\t\treturn;\n +\t\t\t\t\tJSHINT.blacklist[key] = key;\n +\t\t\t\t\tupdatePredefined();\n +\t\t\t\t} else {\n +\t\t\t\t\tpredef[key] = (val === "true");\n \t\t\t\t}\n +\t\t\t});\n \n -\t\t\t\tvar hasDangling = /^(_+.*|.*_+)$/.test(name);\n +\t\t\tcombine(predefined, predef);\n \n -\t\t\t\tif (option.nomen && hasDangling && name !== "_") {\n -\t\t\t\t\tif (option.node && token.id !== "." && /^(__dirname|__filename)$/.test(name))\n -\t\t\t\t\t\treturn;\n -\n -\t\t\t\t\twarningAt("Unexpected {a} in \'{b}\'.", line, from, "dangling \'_\'", name);\n -\t\t\t\t\treturn;\n -\t\t\t\t}\n -\n -\t\t\t\tif (option.camelcase) {\n -\t\t\t\t\tif (name.replace(/^_+/, "").indexOf("_") > -1 && !name.match(/^[A-Z0-9_]*$/)) {\n -\t\t\t\t\t\twarningAt("Identifier \'{a}\' is not in camel case.", line, from, value);\n -\t\t\t\t\t}\n +\t\t\tfor (var key in predef) {\n +\t\t\t\tif (_.has(predef, key)) {\n +\t\t\t\t\tdeclared[key] = nt;\n \t\t\t\t}\n \t\t\t}\n +\t\t}\n \n -\t\t\tif (type === "(color)" || type === "(range)") {\n -\t\t\t\tt = {type: type};\n -\t\t\t} else if (type === "(punctuator)" ||\n -\t\t\t\t\t(type === "(identifier)" && is_own(syntax, value))) {\n -\t\t\t\tt = syntax[value] || syntax["(error)"];\n -\t\t\t} else {\n -\t\t\t\tt = syntax[type];\n -\t\t\t}\n -\n -\t\t\tt = Object.create(t);\n +\t\tif (nt.type === "exported") {\n +\t\t\tbody.forEach(function (e) {\n +\t\t\t\texported[e] = true;\n +\t\t\t});\n +\t\t}\n \n -\t\t\tif (type === "(string)" || type === "(range)") {\n -\t\t\t\tif (!option.scripturl && jx.test(value)) {\n -\t\t\t\t\twarningAt("Script URL.", line, from);\n +\t\tif (nt.type === "members") {\n +\t\t\tmembersOnly = membersOnly || {};\n +\n +\t\t\tbody.forEach(function (m) {\n +\t\t\t\tvar ch1 = m.charAt(0);\n +\t\t\t\tvar ch2 = m.charAt(m.length - 1);\n +\n +\t\t\t\tif (ch1 === ch2 && (ch1 === "\\"" || ch1 === "\'")) {\n +\t\t\t\t\tm = m\n +\t\t\t\t\t\t.substr(1, m.length - 2)\n +\t\t\t\t\t\t.replace("\\\\b", "\\b")\n +\t\t\t\t\t\t.replace("\\\\t", "\\t")\n +\t\t\t\t\t\t.replace("\\\\n", "\\n")\n +\t\t\t\t\t\t.replace("\\\\v", "\\v")\n +\t\t\t\t\t\t.replace("\\\\f", "\\f")\n +\t\t\t\t\t\t.replace("\\\\r", "\\r")\n +\t\t\t\t\t\t.replace("\\\\\\\\", "\\\\")\n +\t\t\t\t\t\t.replace("\\\\\\"", "\\"");\n \t\t\t\t}\n -\t\t\t}\n -\n -\t\t\tif (type === "(identifier)") {\n -\t\t\t\tt.identifier = true;\n -\t\t\t\tcheckName(value);\n -\t\t\t}\n \n -\t\t\tt.value = value;\n -\t\t\tt.line = line;\n -\t\t\tt.character = character;\n -\t\t\tt.from = from;\n -\t\t\ti = t.id;\n -\t\t\tif (i !== "(endline)") {\n -\t\t\t\tprereg = i &&\n -\t\t\t\t\t(("(,=:[!&|?{};".indexOf(i.charAt(i.length - 1)) >= 0) ||\n -\t\t\t\t\ti === "return" ||\n -\t\t\t\t\ti === "case");\n -\t\t\t}\n -\t\t\treturn t;\n +\t\t\t\tmembersOnly[m] = false;\n +\t\t\t});\n \t\t}\n -\t\treturn {\n -\t\t\tinit: function (source) {\n -\t\t\t\tif (typeof source === "string") {\n -\t\t\t\t\tlines = source\n -\t\t\t\t\t\t.replace(/\\r\\n/g, "\\n")\n -\t\t\t\t\t\t.replace(/\\r/g, "\\n")\n -\t\t\t\t\t\t.split("\\n");\n -\t\t\t\t} else {\n -\t\t\t\t\tlines = source;\n -\t\t\t\t}\n -\t\t\t\tif (lines[0] && lines[0].substr(0, 2) === "#!")\n -\t\t\t\t\tlines[0] = "";\n \n -\t\t\t\tline = 0;\n -\t\t\t\tnextLine();\n -\t\t\t\tfrom = 1;\n -\t\t\t},\n +\t\tvar numvals = [\n +\t\t\t"maxstatements",\n +\t\t\t"maxparams",\n +\t\t\t"maxdepth",\n +\t\t\t"maxcomplexity",\n +\t\t\t"maxerr",\n +\t\t\t"maxlen",\n +\t\t\t"indent"\n +\t\t];\n \n -\t\t\trange: function (begin, end) {\n -\t\t\t\tvar c, value = "";\n -\t\t\t\tfrom = character;\n -\t\t\t\tif (s.charAt(0) !== begin) {\n -\t\t\t\t\terrorAt("Expected \'{a}\' and instead saw \'{b}\'.",\n -\t\t\t\t\t\t\tline, character, begin, s.charAt(0));\n -\t\t\t\t}\n -\t\t\t\tfor (;;) {\n -\t\t\t\t\ts = s.slice(1);\n -\t\t\t\t\tcharacter += 1;\n -\t\t\t\t\tc = s.charAt(0);\n -\t\t\t\t\tswitch (c) {\n -\t\t\t\t\tcase "":\n -\t\t\t\t\t\terrorAt("Missing \'{a}\'.", line, character, c);\n -\t\t\t\t\t\tbreak;\n -\t\t\t\t\tcase end:\n -\t\t\t\t\t\ts = s.slice(1);\n -\t\t\t\t\t\tcharacter += 1;\n -\t\t\t\t\t\treturn it("(range)", value);\n -\t\t\t\t\tcase "\\\\":\n -\t\t\t\t\t\twarningAt("Unexpected \'{a}\'.", line, character, c);\n -\t\t\t\t\t}\n -\t\t\t\t\tvalue += c;\n -\t\t\t\t}\n +\t\tif (nt.type === "jshint" || nt.type === "jslint") {\n +\t\t\tbody.forEach(function (g) {\n +\t\t\t\tg = g.split(":");\n +\t\t\t\tvar key = (g[0] || "").trim();\n +\t\t\t\tvar val = (g[1] || "").trim();\n \n -\t\t\t},\n -\t\t\ttoken: function () {\n -\t\t\t\tvar b, c, captures, d, depth, high, i, l, low, q, t, isLiteral, isInRange, n;\n -\n -\t\t\t\tfunction match(x) {\n -\t\t\t\t\tvar r = x.exec(s), r1;\n -\n -\t\t\t\t\tif (r) {\n -\t\t\t\t\t\tl = r[0].length;\n -\t\t\t\t\t\tr1 = r[1];\n -\t\t\t\t\t\tc = r1.charAt(0);\n -\t\t\t\t\t\ts = s.substr(l);\n -\t\t\t\t\t\tfrom = character + l - r1.length;\n -\t\t\t\t\t\tcharacter += l;\n -\t\t\t\t\t\treturn r1;\n -\t\t\t\t\t}\n +\t\t\t\tif (!checkOption(key, nt)) {\n +\t\t\t\t\treturn;\n \t\t\t\t}\n \n -\t\t\t\tfunction string(x) {\n -\t\t\t\t\tvar c, j, r = "", allowNewLine = false;\n -\n -\t\t\t\t\tif (jsonmode && x !== "\\"") {\n -\t\t\t\t\t\twarningAt("Strings must use doublequote.",\n -\t\t\t\t\t\t\t\tline, character);\n -\t\t\t\t\t}\n +\t\t\t\tif (numvals.indexOf(key) >= 0) {\n +\t\t\t\t\tif (val !== "false") {\n +\t\t\t\t\t\tval = +val;\n \n -\t\t\t\t\tif (option.quotmark) {\n -\t\t\t\t\t\tif (option.quotmark === "single" && x !== "\'") {\n -\t\t\t\t\t\t\twarningAt("Strings must use singlequote.",\n -\t\t\t\t\t\t\t\t\tline, character);\n -\t\t\t\t\t\t} else if (option.quotmark === "double" && x !== "\\"") {\n -\t\t\t\t\t\t\twarningAt("Strings must use doublequote.",\n -\t\t\t\t\t\t\t\t\tline, character);\n -\t\t\t\t\t\t} else if (option.quotmark === true) {\n -\t\t\t\t\t\t\tquotmark = quotmark || x;\n -\t\t\t\t\t\t\tif (quotmark !== x) {\n -\t\t\t\t\t\t\t\twarningAt("Mixed double and single quotes.",\n -\t\t\t\t\t\t\t\t\t\tline, character);\n -\t\t\t\t\t\t\t}\n +\t\t\t\t\t\tif (typeof val !== "number" || !isFinite(val) || val <= 0 || Math.floor(val) !== val) {\n +\t\t\t\t\t\t\terror("E032", nt, g[1].trim());\n +\t\t\t\t\t\t\treturn;\n \t\t\t\t\t\t}\n -\t\t\t\t\t}\n \n -\t\t\t\t\tfunction esc(n) {\n -\t\t\t\t\t\tvar i = parseInt(s.substr(j + 1, n), 16);\n -\t\t\t\t\t\tj += n;\n -\t\t\t\t\t\tif (i >= 32 && i <= 126 &&\n -\t\t\t\t\t\t\t\ti !== 34 && i !== 92 && i !== 39) {\n -\t\t\t\t\t\t\twarningAt("Unnecessary escapement.", line, character);\n +\t\t\t\t\t\tif (key === "indent") {\n +\t\t\t\t\t\t\tstate.option["(explicitIndent)"] = true;\n \t\t\t\t\t\t}\n -\t\t\t\t\t\tcharacter += n;\n -\t\t\t\t\t\tc = String.fromCharCode(i);\n -\t\t\t\t\t}\n -\n -\t\t\t\t\tj = 0;\n -\n -unclosedString:\n -\t\t\t\t\tfor (;;) {\n -\t\t\t\t\t\twhile (j >= s.length) {\n -\t\t\t\t\t\t\tj = 0;\n -\n -\t\t\t\t\t\t\tvar cl = line, cf = from;\n -\t\t\t\t\t\t\tif (!nextLine()) {\n -\t\t\t\t\t\t\t\terrorAt("Unclosed string.", cl, cf);\n -\t\t\t\t\t\t\t\tbreak unclosedString;\n -\t\t\t\t\t\t\t}\n -\n -\t\t\t\t\t\t\tif (allowNewLine) {\n -\t\t\t\t\t\t\t\tallowNewLine = false;\n -\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\twarningAt("Unclosed string.", cl, cf);\n -\t\t\t\t\t\t\t}\n +\t\t\t\t\t\tstate.option[key] = val;\n +\t\t\t\t\t} else {\n +\t\t\t\t\t\tif (key === "indent") {\n +\t\t\t\t\t\t\tstate.option["(explicitIndent)"] = false;\n +\t\t\t\t\t\t} else {\n +\t\t\t\t\t\t\tstate.option[key] = false;\n \t\t\t\t\t\t}\n +\t\t\t\t\t}\n \n -\t\t\t\t\t\tc = s.charAt(j);\n -\t\t\t\t\t\tif (c === x) {\n -\t\t\t\t\t\t\tcharacter += 1;\n -\t\t\t\t\t\t\ts = s.substr(j + 1);\n -\t\t\t\t\t\t\treturn it("(string)", r, x);\n -\t\t\t\t\t\t}\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n \n -\t\t\t\t\t\tif (c < " ") {\n -\t\t\t\t\t\t\tif (c === "\\n" || c === "\\r") {\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\twarningAt("Control character in string: {a}.",\n -\t\t\t\t\t\t\t\t\tline, character + j, s.slice(0, j));\n -\t\t\t\t\t\t} else if (c === "\\\\") {\n -\t\t\t\t\t\t\tj += 1;\n -\t\t\t\t\t\t\tcharacter += 1;\n -\t\t\t\t\t\t\tc = s.charAt(j);\n -\t\t\t\t\t\t\tn = s.charAt(j + 1);\n -\t\t\t\t\t\t\tswitch (c) {\n -\t\t\t\t\t\t\tcase "\\\\":\n -\t\t\t\t\t\t\tcase "\\"":\n -\t\t\t\t\t\t\tcase "/":\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "\\\'":\n -\t\t\t\t\t\t\t\tif (jsonmode) {\n -\t\t\t\t\t\t\t\t\twarningAt("Avoid \\\\\'.", line, character);\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "b":\n -\t\t\t\t\t\t\t\tc = "\\b";\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "f":\n -\t\t\t\t\t\t\t\tc = "\\f";\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "n":\n -\t\t\t\t\t\t\t\tc = "\\n";\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "r":\n -\t\t\t\t\t\t\t\tc = "\\r";\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "t":\n -\t\t\t\t\t\t\t\tc = "\\t";\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "0":\n -\t\t\t\t\t\t\t\tc = "\\0";\n -\t\t\t\t\t\t\t\tif (n >= 0 && n <= 7 && directive["use strict"]) {\n -\t\t\t\t\t\t\t\t\twarningAt(\n -\t\t\t\t\t\t\t\t\t"Octal literals are not allowed in strict mode.",\n -\t\t\t\t\t\t\t\t\tline, character);\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "u":\n -\t\t\t\t\t\t\t\tesc(4);\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "v":\n -\t\t\t\t\t\t\t\tif (jsonmode) {\n -\t\t\t\t\t\t\t\t\twarningAt("Avoid \\\\v.", line, character);\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\tc = "\\v";\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "x":\n -\t\t\t\t\t\t\t\tif (jsonmode) {\n -\t\t\t\t\t\t\t\t\twarningAt("Avoid \\\\x-.", line, character);\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\tesc(2);\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "":\n -\t\t\t\t\t\t\t\tallowNewLine = true;\n -\t\t\t\t\t\t\t\tif (option.multistr) {\n -\t\t\t\t\t\t\t\t\tif (jsonmode) {\n -\t\t\t\t\t\t\t\t\t\twarningAt("Avoid EOL escapement.", line, character);\n -\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\tc = "";\n -\t\t\t\t\t\t\t\t\tcharacter -= 1;\n -\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\twarningAt("Bad escapement of EOL. Use option multistr if needed.",\n -\t\t\t\t\t\t\t\t\tline, character);\n -\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tcase "!":\n -\t\t\t\t\t\t\t\tif (s.charAt(j - 2) === "<")\n -\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\tdefault:\n -\t\t\t\t\t\t\t\twarningAt("Bad escapement.", line, character);\n -\t\t\t\t\t\t\t}\n +\t\t\t\tif (key === "validthis") {\n +\t\t\t\t\tif (funct["(global)"]) {\n +\t\t\t\t\t\terror("E009");\n +\t\t\t\t\t} else {\n +\t\t\t\t\t\tif (val === "true" || val === "false") {\n +\t\t\t\t\t\t\tstate.option.validthis = (val === "true");\n +\t\t\t\t\t\t} else {\n +\t\t\t\t\t\t\terror("E002", nt);\n \t\t\t\t\t\t}\n -\t\t\t\t\t\tr += c;\n -\t\t\t\t\t\tcharacter += 1;\n -\t\t\t\t\t\tj += 1;\n \t\t\t\t\t}\n +\t\t\t\t\treturn;\n \t\t\t\t}\n \n -\t\t\t\tfor (;;) {\n -\t\t\t\t\tif (!s) {\n -\t\t\t\t\t\treturn it(nextLine() ? "(endline)" : "(end)", "");\n +\t\t\t\tif (key === "quotmark") {\n +\t\t\t\t\tswitch (val) {\n +\t\t\t\t\tcase "true":\n +\t\t\t\t\tcase "false":\n +\t\t\t\t\t\tstate.option.quotmark = (val === "true");\n +\t\t\t\t\t\tbreak;\n +\t\t\t\t\tcase "double":\n +\t\t\t\t\tcase "single":\n +\t\t\t\t\t\tstate.option.quotmark = val;\n +\t\t\t\t\t\tbreak;\n +\t\t\t\t\tdefault:\n +\t\t\t\t\t\terror("E002", nt);\n \t\t\t\t\t}\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n \n -\t\t\t\t\tt = match(tx);\n -\n -\t\t\t\t\tif (!t) {\n -\t\t\t\t\t\tt = "";\n -\t\t\t\t\t\tc = "";\n -\t\t\t\t\t\twhile (s && s < "!") {\n -\t\t\t\t\t\t\ts = s.substr(1);\n -\t\t\t\t\t\t}\n -\t\t\t\t\t\tif (s) {\n -\t\t\t\t\t\t\terrorAt("Unexpected \'{a}\'.", line, character, s.substr(0, 1));\n -\t\t\t\t\t\t\ts = "";\n -\t\t\t\t\t\t}\n -\t\t\t\t\t} else {\n -\n -\t\t\t\t\t\tif (isAlpha(c) || c === "_" || c === "$") {\n -\t\t\t\t\t\t\treturn it("(identifier)", t);\n -\t\t\t\t\t\t}\n -\n -\t\t\t\t\t\tif (isDigit(c)) {\n -\t\t\t\t\t\t\tif (!isFinite(Number(t))) {\n -\t\t\t\t\t\t\t\twarningAt("Bad number \'{a}\'.",\n -\t\t\t\t\t\t\t\t\tline, character, t);\n -\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\tif (isAlpha(s.substr(0, 1))) {\n -\t\t\t\t\t\t\t\twarningAt("Missing space after \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\tline, character, t);\n -\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\tif (c === "0") {\n -\t\t\t\t\t\t\t\td = t.substr(1, 1);\n -\t\t\t\t\t\t\t\tif (isDigit(d)) {\n -\t\t\t\t\t\t\t\t\tif (token.id !== ".") {\n -\t\t\t\t\t\t\t\t\t\twarningAt("Don\'t use extra leading zeros \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\tline, character, t);\n -\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t} else if (jsonmode && (d === "x" || d === "X")) {\n -\t\t\t\t\t\t\t\t\twarningAt("Avoid 0x-. \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\tline, character, t);\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\tif (t.substr(t.length - 1) === ".") {\n -\t\t\t\t\t\t\t\twarningAt(\n -"A trailing decimal point can be confused with a dot \'{a}\'.", line, character, t);\n -\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\treturn it("(number)", t);\n -\t\t\t\t\t\t}\n -\t\t\t\t\t\tswitch (t) {\n -\n -\t\t\t\t\t\tcase "\\"":\n -\t\t\t\t\t\tcase "\'":\n -\t\t\t\t\t\t\treturn string(t);\n -\n -\t\t\t\t\t\tcase "//":\n -\t\t\t\t\t\t\ts = "";\n -\t\t\t\t\t\t\ttoken.comment = true;\n -\t\t\t\t\t\t\tbreak;\n -\n -\t\t\t\t\t\tcase "/*":\n -\t\t\t\t\t\t\tfor (;;) {\n -\t\t\t\t\t\t\t\ti = s.search(lx);\n -\t\t\t\t\t\t\t\tif (i >= 0) {\n -\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\tif (!nextLine()) {\n -\t\t\t\t\t\t\t\t\terrorAt("Unclosed comment.", line, character);\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\ts = s.substr(i + 2);\n -\t\t\t\t\t\t\ttoken.comment = true;\n -\t\t\t\t\t\t\tbreak;\n -\n -\t\t\t\t\t\tcase "/*members":\n -\t\t\t\t\t\tcase "/*member":\n -\t\t\t\t\t\tcase "/*jshint":\n -\t\t\t\t\t\tcase "/*jslint":\n -\t\t\t\t\t\tcase "/*global":\n -\t\t\t\t\t\tcase "*/":\n -\t\t\t\t\t\t\treturn {\n -\t\t\t\t\t\t\t\tvalue: t,\n -\t\t\t\t\t\t\t\ttype: "special",\n -\t\t\t\t\t\t\t\tline: line,\n -\t\t\t\t\t\t\t\tcharacter: character,\n -\t\t\t\t\t\t\t\tfrom: from\n -\t\t\t\t\t\t\t};\n -\n -\t\t\t\t\t\tcase "":\n -\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\tcase "/":\n -\t\t\t\t\t\t\tif (s.charAt(0) === "=") {\n -\t\t\t\t\t\t\t\terrorAt("A regular expression literal can be confused with \'/=\'.",\n -\t\t\t\t\t\t\t\t\tline, from);\n -\t\t\t\t\t\t\t}\n +\t\t\t\tif (key === "unused") {\n +\t\t\t\t\tswitch (val) {\n +\t\t\t\t\tcase "true":\n +\t\t\t\t\t\tstate.option.unused = true;\n +\t\t\t\t\t\tbreak;\n +\t\t\t\t\tcase "false":\n +\t\t\t\t\t\tstate.option.unused = false;\n +\t\t\t\t\t\tbreak;\n +\t\t\t\t\tcase "vars":\n +\t\t\t\t\tcase "strict":\n +\t\t\t\t\t\tstate.option.unused = val;\n +\t\t\t\t\t\tbreak;\n +\t\t\t\t\tdefault:\n +\t\t\t\t\t\terror("E002", nt);\n +\t\t\t\t\t}\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n \n -\t\t\t\t\t\t\tif (prereg) {\n -\t\t\t\t\t\t\t\tdepth = 0;\n -\t\t\t\t\t\t\t\tcaptures = 0;\n -\t\t\t\t\t\t\t\tl = 0;\n -\t\t\t\t\t\t\t\tfor (;;) {\n -\t\t\t\t\t\t\t\t\tb = true;\n -\t\t\t\t\t\t\t\t\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\tswitch (c) {\n -\t\t\t\t\t\t\t\t\tcase "":\n -\t\t\t\t\t\t\t\t\t\terrorAt("Unclosed regular expression.", line, from);\n -\t\t\t\t\t\t\t\t\t\treturn quit("Stopping.", line, from);\n -\t\t\t\t\t\t\t\t\tcase "/":\n -\t\t\t\t\t\t\t\t\t\tif (depth > 0) {\n -\t\t\t\t\t\t\t\t\t\t\twarningAt("{a} unterminated regular expression " +\n -\t\t\t\t\t\t\t\t\t\t\t\t"group(s).", line, from + l, depth);\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tc = s.substr(0, l - 1);\n -\t\t\t\t\t\t\t\t\t\tq = {\n -\t\t\t\t\t\t\t\t\t\t\tg: true,\n -\t\t\t\t\t\t\t\t\t\t\ti: true,\n -\t\t\t\t\t\t\t\t\t\t\tm: true\n -\t\t\t\t\t\t\t\t\t\t};\n -\t\t\t\t\t\t\t\t\t\twhile (q[s.charAt(l)] === true) {\n -\t\t\t\t\t\t\t\t\t\t\tq[s.charAt(l)] = false;\n -\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tcharacter += l;\n -\t\t\t\t\t\t\t\t\t\ts = s.substr(l);\n -\t\t\t\t\t\t\t\t\t\tq = s.charAt(0);\n -\t\t\t\t\t\t\t\t\t\tif (q === "/" || q === "*") {\n -\t\t\t\t\t\t\t\t\t\t\terrorAt("Confusing regular expression.",\n -\t\t\t\t\t\t\t\t\t\t\t\t\tline, from);\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\treturn it("(regexp)", c);\n -\t\t\t\t\t\t\t\t\tcase "\\\\":\n -\t\t\t\t\t\t\t\t\t\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\t\tif (c < " ") {\n -\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"Unexpected control character in regular expression.", line, from + l);\n -\t\t\t\t\t\t\t\t\t\t} else if (c === "<") {\n -\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"Unexpected escaped character \'{a}\' in regular expression.", line, from + l, c);\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\tcase "(":\n -\t\t\t\t\t\t\t\t\t\tdepth += 1;\n -\t\t\t\t\t\t\t\t\t\tb = false;\n -\t\t\t\t\t\t\t\t\t\tif (s.charAt(l) === "?") {\n -\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\tswitch (s.charAt(l)) {\n -\t\t\t\t\t\t\t\t\t\t\tcase ":":\n -\t\t\t\t\t\t\t\t\t\t\tcase "=":\n -\t\t\t\t\t\t\t\t\t\t\tcase "!":\n -\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\t\tdefault:\n -\t\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"Expected \'{a}\' and instead saw \'{b}\'.", line, from + l, ":", s.charAt(l));\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\tcaptures += 1;\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\tcase "|":\n -\t\t\t\t\t\t\t\t\t\tb = false;\n -\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\tcase ")":\n -\t\t\t\t\t\t\t\t\t\tif (depth === 0) {\n -\t\t\t\t\t\t\t\t\t\t\twarningAt("Unescaped \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\t\t\tline, from + l, ")");\n -\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\tdepth -= 1;\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\tcase " ":\n -\t\t\t\t\t\t\t\t\t\tq = 1;\n -\t\t\t\t\t\t\t\t\t\twhile (s.charAt(l) === " ") {\n -\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\tq += 1;\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tif (q > 1) {\n -\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"Spaces are hard to count. Use {{a}}.", line, from + l, q);\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\tcase "[":\n -\t\t\t\t\t\t\t\t\t\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\t\tif (c === "^") {\n -\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\tif (s.charAt(l) === "]") {\n -\t\t\t\t\t\t\t\t\t\t\t\terrorAt("Unescaped \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\t\t\tline, from + l, "^");\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tif (c === "]") {\n -\t\t\t\t\t\t\t\t\t\t\twarningAt("Empty class.", line,\n -\t\t\t\t\t\t\t\t\t\t\t\t\tfrom + l - 1);\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tisLiteral = false;\n -\t\t\t\t\t\t\t\t\t\tisInRange = false;\n -klass:\n -\t\t\t\t\t\t\t\t\t\tdo {\n -\t\t\t\t\t\t\t\t\t\t\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\tswitch (c) {\n -\t\t\t\t\t\t\t\t\t\t\tcase "[":\n -\t\t\t\t\t\t\t\t\t\t\tcase "^":\n -\t\t\t\t\t\t\t\t\t\t\t\twarningAt("Unescaped \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\tline, from + l, c);\n -\t\t\t\t\t\t\t\t\t\t\t\tif (isInRange) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisLiteral = true;\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\t\tcase "-":\n -\t\t\t\t\t\t\t\t\t\t\t\tif (isLiteral && !isInRange) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisLiteral = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = true;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else if (isInRange) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else if (s.charAt(l) === "]") {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = true;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tif (option.regexdash !== (l === 2 || (l === 3 &&\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\ts.charAt(1) === "^"))) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\twarningAt("Unescaped \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tline, from + l - 1, "-");\n -\t\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisLiteral = true;\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\t\tcase "]":\n -\t\t\t\t\t\t\t\t\t\t\t\tif (isInRange && !option.regexdash) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\twarningAt("Unescaped \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tline, from + l - 1, "-");\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\tbreak klass;\n -\t\t\t\t\t\t\t\t\t\t\tcase "\\\\":\n -\t\t\t\t\t\t\t\t\t\t\t\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\t\t\t\tif (c < " ") {\n -\t\t\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"Unexpected control character in regular expression.", line, from + l);\n -\t\t\t\t\t\t\t\t\t\t\t\t} else if (c === "<") {\n -\t\t\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"Unexpected escaped character \'{a}\' in regular expression.", line, from + l, c);\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t\tif (/[wsd]/i.test(c)) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tif (isInRange) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\twarningAt("Unescaped \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tline, from + l, "-");\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisLiteral = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else if (isInRange) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisLiteral = true;\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\t\tcase "/":\n -\t\t\t\t\t\t\t\t\t\t\t\twarningAt("Unescaped \'{a}\'.",\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\tline, from + l - 1, "/");\n -\n -\t\t\t\t\t\t\t\t\t\t\t\tif (isInRange) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisLiteral = true;\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\t\tcase "<":\n -\t\t\t\t\t\t\t\t\t\t\t\tif (isInRange) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisLiteral = true;\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\t\tdefault:\n -\t\t\t\t\t\t\t\t\t\t\t\tif (isInRange) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisInRange = false;\n -\t\t\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tisLiteral = true;\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t} while (c);\n -\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\tcase ".":\n -\t\t\t\t\t\t\t\t\t\tif (option.regexp) {\n -\t\t\t\t\t\t\t\t\t\t\twarningAt("Insecure \'{a}\'.", line,\n -\t\t\t\t\t\t\t\t\t\t\t\t\tfrom + l, c);\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\tcase "]":\n -\t\t\t\t\t\t\t\t\tcase "?":\n -\t\t\t\t\t\t\t\t\tcase "{":\n -\t\t\t\t\t\t\t\t\tcase "}":\n -\t\t\t\t\t\t\t\t\tcase "+":\n -\t\t\t\t\t\t\t\t\tcase "*":\n -\t\t\t\t\t\t\t\t\t\twarningAt("Unescaped \'{a}\'.", line,\n -\t\t\t\t\t\t\t\t\t\t\t\tfrom + l, c);\n -\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\tif (b) {\n -\t\t\t\t\t\t\t\t\t\tswitch (s.charAt(l)) {\n -\t\t\t\t\t\t\t\t\t\tcase "?":\n -\t\t\t\t\t\t\t\t\t\tcase "+":\n -\t\t\t\t\t\t\t\t\t\tcase "*":\n -\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\tif (s.charAt(l) === "?") {\n -\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\tcase "{":\n -\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\t\t\tif (c < "0" || c > "9") {\n -\t\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"Expected a number and instead saw \'{a}\'.", line, from + l, c);\n -\t\t\t\t\t\t\t\t\t\t\t\tbreak; // No reason to continue checking numbers.\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\tlow = +c;\n -\t\t\t\t\t\t\t\t\t\t\tfor (;;) {\n -\t\t\t\t\t\t\t\t\t\t\t\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\t\t\t\tif (c < "0" || c > "9") {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t\tlow = +c + (low * 10);\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\thigh = low;\n -\t\t\t\t\t\t\t\t\t\t\tif (c === ",") {\n -\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t\thigh = Infinity;\n -\t\t\t\t\t\t\t\t\t\t\t +\t\t\t\tif (key === "latedef") {\n +\t\t\t\t\tswitch (val) {\n +\t\t\t\t\tcase "true":\n +\t\t\t\t\t\tstat ]]></string> </value> </item> <item> <key> <string>next</string> </key> <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> </value> </item> </dictionary> </pickle> </record> - <record id="3" aka="AAAAAAAAAAM="> + <record id="4" aka="AAAAAAAAAAQ="> <pickle> <global name="Pdata" module="OFS.Image"/> </pickle> @@ -3635,259 +4513,48 @@ klass:\n <key> <string>data</string> </key> <value> <string encoding="cdata"><![CDATA[ -\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\t\t\t\tif (c >= "0" && c <= "9") {\n -\t\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t\t\thigh = +c;\n -\t\t\t\t\t\t\t\t\t\t\t\t\tfor (;;) {\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\tc = s.charAt(l);\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (c < "0" || c > "9") {\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t\t\t\thigh = +c + (high * 10);\n -\t\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\tif (s.charAt(l) !== "}") {\n -\t\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"Expected \'{a}\' and instead saw \'{b}\'.", line, from + l, "}", c);\n -\t\t\t\t\t\t\t\t\t\t\t} else {\n -\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\tif (s.charAt(l) === "?") {\n -\t\t\t\t\t\t\t\t\t\t\t\tl += 1;\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t\tif (low > high) {\n -\t\t\t\t\t\t\t\t\t\t\t\twarningAt(\n -"\'{a}\' should not be greater than \'{b}\'.", line, from + l, low, high);\n -\t\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\t\tc = s.substr(0, l - 1);\n -\t\t\t\t\t\t\t\tcharacter += l;\n -\t\t\t\t\t\t\t\ts = s.substr(l);\n -\t\t\t\t\t\t\t\treturn it("(regexp)", c);\n -\t\t\t\t\t\t\t}\n -\t\t\t\t\t\t\treturn it("(punctuator)", t);\n -\n -\t\t\t\t\t\tcase "#":\n -\t\t\t\t\t\t\treturn it("(punctuator)", t);\n -\t\t\t\t\t\tdefault:\n -\t\t\t\t\t\t\treturn it("(punctuator)", t);\n -\t\t\t\t\t\t}\n -\t\t\t\t\t}\n -\t\t\t\t}\n -\t\t\t}\n -\t\t};\n -\t}());\n -\n -\n -\tfunction addlabel(t, type, token) {\n -\t\tif (t === "hasOwnProperty") {\n -\t\t\twarning("\'hasOwnProperty\' is a really bad name.");\n -\t\t}\n -\t\tif (type === "exception") {\n -\t\t\tif (is_own(funct["(context)"], t)) {\n -\t\t\t\tif (funct[t] !== true && !option.node) {\n -\t\t\t\t\twarning("Value of \'{a}\' may be overwritten in IE.", nexttoken, t);\n -\t\t\t\t}\n -\t\t\t}\n -\t\t}\n -\n -\t\tif (is_own(funct, t) && !funct["(global)"]) {\n -\t\t\tif (funct[t] === true) {\n -\t\t\t\tif (option.latedef)\n -\t\t\t\t\twarning("\'{a}\' was used before it was defined.", nexttoken, t);\n -\t\t\t} else {\n -\t\t\t\tif (!option.shadow && type !== "exception") {\n -\t\t\t\t\twarning("\'{a}\' is already defined.", nexttoken, t);\n -\t\t\t\t}\n -\t\t\t}\n -\t\t}\n -\n -\t\tfunct[t] = type;\n -\n -\t\tif (token) {\n -\t\t\tfunct["(tokens)"][t] = token;\n -\t\t}\n -\n -\t\tif (funct["(global)"]) {\n -\t\t\tglobal[t] = funct;\n -\t\t\tif (is_own(implied, t)) {\n -\t\t\t\tif (option.latedef)\n -\t\t\t\t\twarning("\'{a}\' was used before it was defined.", nexttoken, t);\n -\t\t\t\tdelete implied[t];\n -\t\t\t}\n -\t\t} else {\n -\t\t\tscope[t] = funct;\n -\t\t}\n -\t}\n -\n -\n -\tfunction doOption() {\n -\t\tvar nt = nexttoken;\n -\t\tvar o = nt.value;\n -\t\tvar quotmarkValue = option.quotmark;\n -\t\tvar predef = {};\n -\t\tvar b, obj, filter, t, tn, v, minus;\n -\n -\t\tswitch (o) {\n -\t\tcase "*/":\n -\t\t\terror("Unbegun comment.");\n -\t\t\tbreak;\n -\t\tcase "/*members":\n -\t\tcase "/*member":\n -\t\t\to = "/*members";\n -\t\t\tif (!membersOnly) {\n -\t\t\t\tmembersOnly = {};\n -\t\t\t}\n -\t\t\tobj = membersOnly;\n -\t\t\toption.quotmark = false;\n -\t\t\tbreak;\n -\t\tcase "/*jshint":\n -\t\tcase "/*jslint":\n -\t\t\tobj = option;\n -\t\t\tfilter = boolOptions;\n -\t\t\tbreak;\n -\t\tcase "/*global":\n -\t\t\tobj = predef;\n -\t\t\tbreak;\n -\t\tdefault:\n -\t\t\terror("What?");\n -\t\t}\n -\n -\t\tt = lex.token();\n -\n -\t\tfor (;;) {\n -\t\t\tminus = false;\n -\t\t\tvar breakOuterLoop;\n -\t\t\tfor (;;) {\n -\t\t\t\tif (t.type === "special" && t.value === "*/") {\n -\t\t\t\t\tbreakOuterLoop = true;\n -\t\t\t\t\tbreak;\n -\t\t\t\t}\n -\t\t\t\tif (t.id !== "(endline)" && t.id !== ",") {\n -\t\t\t\t\tbreak;\n -\t\t\t\t}\n -\t\t\t\tt = lex.token();\n -\t\t\t}\n -\t\t\tif (breakOuterLoop)\n -\t\t\t\tbreak;\n -\n -\t\t\tif (o === "/*global" && t.value === "-") {\n -\t\t\t\tminus = true;\n -\t\t\t\tt = lex.token();\n -\t\t\t}\n -\n -\t\t\tif (t.type !== "(string)" && t.type !== "(identifier)" && o !== "/*members") {\n -\t\t\t\terror("Bad option.", t);\n -\t\t\t}\n -\n -\t\t\tv = lex.token();\n -\t\t\tif (v.id === ":") {\n -\t\t\t\tv = lex.token();\n -\n -\t\t\t\tif (obj === membersOnly) {\n -\t\t\t\t\terror("Expected \'{a}\' and instead saw \'{b}\'.", t, "*/", ":");\n -\t\t\t\t}\n -\n -\t\t\t\tif (o === "/*jshint") {\n -\t\t\t\t\tcheckOption(t.value, t);\n -\t\t\t\t}\n -\n -\t\t\t\tvar numericVals = [\n -\t\t\t\t\t"maxstatements",\n -\t\t\t\t\t"maxparams",\n -\t\t\t\t\t"maxdepth",\n -\t\t\t\t\t"maxcomplexity",\n -\t\t\t\t\t"maxerr",\n -\t\t\t\t\t"maxlen",\n -\t\t\t\t\t"indent"\n -\t\t\t\t];\n -\n -\t\t\t\tif (numericVals.indexOf(t.value) > -1 && (o === "/*jshint" || o === "/*jslint")) {\n -\t\t\t\t\tb = +v.value;\n -\n -\t\t\t\t\tif (typeof b !== "number" || !isFinite(b) || b <= 0 || Math.floor(b) !== b) {\n -\t\t\t\t\t\terror("Expected a small integer and instead saw \'{a}\'.", v, v.value);\n -\t\t\t\t\t}\n -\n -\t\t\t\t\tif (t.value === "indent")\n -\t\t\t\t\t\tobj.white = true;\n -\n -\t\t\t\t\tobj[t.value] = b;\n -\t\t\t\t} else if (t.value === "validthis") {\n -\t\t\t\t\tif (funct["(global)"]) {\n -\t\t\t\t\t\terror("Option \'validthis\' can\'t be used in a global scope.");\n -\t\t\t\t\t} else {\n -\t\t\t\t\t\tif (v.value === "true" || v.value === "false")\n -\t\t\t\t\t\t\tobj[t.value] = v.value === "true";\n -\t\t\t\t\t\telse\n -\t\t\t\t\t\t\terror("Bad option value.", v);\n -\t\t\t\t\t}\n -\t\t\t\t} else if (t.value === "quotmark" && (o === "/*jshint")) {\n -\t\t\t\t\tswitch (v.value) {\n -\t\t\t\t\tcase "true":\n -\t\t\t\t\t\tobj.quotmark = true;\n +e.option.latedef = true;\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tcase "false":\n -\t\t\t\t\t\tobj.quotmark = false;\n +\t\t\t\t\t\tstate.option.latedef = false;\n \t\t\t\t\t\tbreak;\n -\t\t\t\t\tcase "double":\n -\t\t\t\t\tcase "single":\n -\t\t\t\t\t\tobj.quotmark = v.value;\n +\t\t\t\t\tcase "nofunc":\n +\t\t\t\t\t\tstate.option.latedef = "nofunc";\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tdefault:\n -\t\t\t\t\t\terror("Bad option value.", v);\n -\t\t\t\t\t}\n -\t\t\t\t} else if (v.value === "true" || v.value === "false") {\n -\t\t\t\t\tif (o === "/*jslint") {\n -\t\t\t\t\t\ttn = renamedOptions[t.value] || t.value;\n -\t\t\t\t\t\tobj[tn] = v.value === "true";\n -\t\t\t\t\t\tif (invertedOptions[tn] !== undefined) {\n -\t\t\t\t\t\t\tobj[tn] = !obj[tn];\n -\t\t\t\t\t\t}\n -\t\t\t\t\t} else {\n -\t\t\t\t\t\tobj[t.value] = v.value === "true";\n +\t\t\t\t\t\terror("E002", nt);\n \t\t\t\t\t}\n -\n -\t\t\t\t\tif (t.value === "newcap")\n -\t\t\t\t\t\tobj["(explicitNewcap)"] = true;\n -\t\t\t\t} else {\n -\t\t\t\t\terror("Bad option value.", v);\n -\t\t\t\t}\n -\t\t\t\tt = lex.token();\n -\t\t\t} else {\n -\t\t\t\tif (o === "/*jshint" || o === "/*jslint") {\n -\t\t\t\t\terror("Missing option value.", t);\n +\t\t\t\t\treturn;\n \t\t\t\t}\n \n -\t\t\t\tobj[t.value] = false;\n -\n -\t\t\t\tif (o === "/*global" && minus === true) {\n -\t\t\t\t\tJSHINT.blacklist[t.value] = t.value;\n -\t\t\t\t\tupdatePredefined();\n +\t\t\t\tvar match = /^([+-])(W\\d{3})$/g.exec(key);\n +\t\t\t\tif (match) {\n +\t\t\t\t\tstate.ignored[match[2]] = (match[1] === "-");\n +\t\t\t\t\treturn;\n \t\t\t\t}\n \n -\t\t\t\tt = v;\n -\t\t\t}\n -\t\t}\n +\t\t\t\tvar tn;\n +\t\t\t\tif (val === "true" || val === "false") {\n +\t\t\t\t\tif (nt.type === "jslint") {\n +\t\t\t\t\t\ttn = renamedOptions[key] || key;\n +\t\t\t\t\t\tstate.option[tn] = (val === "true");\n \n -\t\tif (o === "/*members") {\n -\t\t\toption.quotmark = quotmarkValue;\n -\t\t}\n +\t\t\t\t\t\tif (invertedOptions[tn] !== undefined) {\n +\t\t\t\t\t\t\tstate.option[tn] = !state.option[tn];\n +\t\t\t\t\t\t}\n +\t\t\t\t\t} else {\n +\t\t\t\t\t\tstate.option[key] = (val === "true");\n +\t\t\t\t\t}\n \n -\t\tcombine(predefined, predef);\n +\t\t\t\t\tif (key === "newcap") {\n +\t\t\t\t\t\tstate.option["(explicitNewcap)"] = true;\n +\t\t\t\t\t}\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n \n -\t\tfor (var key in predef) {\n -\t\t\tif (is_own(predef, key)) {\n -\t\t\t\tdeclared[key] = nt;\n -\t\t\t}\n -\t\t}\n +\t\t\t\terror("E002", nt);\n +\t\t\t});\n \n -\t\tif (filter) {\n \t\t\tassume();\n \t\t}\n \t}\n @@ -3906,139 +4573,175 @@ klass:\n \t}\n \n \tfunction advance(id, t) {\n -\t\tswitch (token.id) {\n +\t\tswitch (state.tokens.curr.id) {\n \t\tcase "(number)":\n -\t\t\tif (nexttoken.id === ".") {\n -\t\t\t\twarning("A dot following a number can be confused with a decimal point.", token);\n +\t\t\tif (state.tokens.next.id === ".") {\n +\t\t\t\twarning("W005", state.tokens.curr);\n \t\t\t}\n \t\t\tbreak;\n \t\tcase "-":\n -\t\t\tif (nexttoken.id === "-" || nexttoken.id === "--") {\n -\t\t\t\twarning("Confusing minusses.");\n +\t\t\tif (state.tokens.next.id === "-" || state.tokens.next.id === "--") {\n +\t\t\t\twarning("W006");\n \t\t\t}\n \t\t\tbreak;\n \t\tcase "+":\n -\t\t\tif (nexttoken.id === "+" || nexttoken.id === "++") {\n -\t\t\t\twarning("Confusing plusses.");\n +\t\t\tif (state.tokens.next.id === "+" || state.tokens.next.id === "++") {\n +\t\t\t\twarning("W007");\n \t\t\t}\n \t\t\tbreak;\n \t\t}\n \n -\t\tif (token.type === "(string)" || token.identifier) {\n -\t\t\tanonname = token.value;\n +\t\tif (state.tokens.curr.type === "(string)" || state.tokens.curr.identifier) {\n +\t\t\tanonname = state.tokens.curr.value;\n \t\t}\n \n -\t\tif (id && nexttoken.id !== id) {\n +\t\tif (id && state.tokens.next.id !== id) {\n \t\t\tif (t) {\n -\t\t\t\tif (nexttoken.id === "(end)") {\n -\t\t\t\t\twarning("Unmatched \'{a}\'.", t, t.id);\n +\t\t\t\tif (state.tokens.next.id === "(end)") {\n +\t\t\t\t\terror("E019", t, t.id);\n \t\t\t\t} else {\n -\t\t\t\t\twarning("Expected \'{a}\' to match \'{b}\' from line {c} and instead saw \'{d}\'.",\n -\t\t\t\t\t\t\tnexttoken, id, t.id, t.line, nexttoken.value);\n +\t\t\t\t\terror("E020", state.tokens.next, id, t.id, t.line, state.tokens.next.value);\n \t\t\t\t}\n -\t\t\t} else if (nexttoken.type !== "(identifier)" ||\n -\t\t\t\t\t\t\tnexttoken.value !== id) {\n -\t\t\t\twarning("Expected \'{a}\' and instead saw \'{b}\'.",\n -\t\t\t\t\t\tnexttoken, id, nexttoken.value);\n +\t\t\t} else if (state.tokens.next.type !== "(identifier)" || state.tokens.next.value !== id) {\n +\t\t\t\twarning("W116", state.tokens.next, id, state.tokens.next.value);\n \t\t\t}\n \t\t}\n \n -\t\tprevtoken = token;\n -\t\ttoken = nexttoken;\n +\t\tstate.tokens.prev = state.tokens.curr;\n +\t\tstate.tokens.curr = state.tokens.next;\n \t\tfor (;;) {\n -\t\t\tnexttoken = lookahead.shift() || lex.token();\n -\t\t\tif (nexttoken.id === "(end)" || nexttoken.id === "(error)") {\n +\t\t\tstate.tokens.next = lookahead.shift() || lex.token();\n +\n +\t\t\tif (!state.tokens.next) { // No more tokens left, give up\n +\t\t\t\tquit("E041", state.tokens.curr.line);\n +\t\t\t}\n +\n +\t\t\tif (state.tokens.next.id === "(end)" || state.tokens.next.id === "(error)") {\n \t\t\t\treturn;\n \t\t\t}\n -\t\t\tif (nexttoken.type === "special") {\n +\n +\t\t\tif (state.tokens.next.check) {\n +\t\t\t\tstate.tokens.next.check();\n +\t\t\t}\n +\n +\t\t\tif (state.tokens.next.isSpecial) {\n \t\t\t\tdoOption();\n \t\t\t} else {\n -\t\t\t\tif (nexttoken.id !== "(endline)") {\n +\t\t\t\tif (state.tokens.next.id !== "(endline)") {\n \t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t}\n \t\t}\n \t}\n \n +\tfunction isInfix(token) {\n +\t\treturn token.infix || (!token.identifier && !!token.led);\n +\t}\n +\n +\tfunction isEndOfExpr() {\n +\t\tvar curr = state.tokens.curr;\n +\t\tvar next = state.tokens.next;\n +\t\tif (next.id === ";" || next.id === "}" || next.id === ":") {\n +\t\t\treturn true;\n +\t\t}\n +\t\tif (isInfix(next) === isInfix(curr) || (curr.id === "yield" && state.option.inMoz(true))) {\n +\t\t\treturn curr.line !== next.line;\n +\t\t}\n +\t\treturn false;\n +\t}\n +\n \tfunction expression(rbp, initial) {\n -\t\tvar left, isArray = false, isObject = false;\n +\t\tvar left, isArray = false, isObject = false, isLetExpr = false;\n +\t\tif (!initial && state.tokens.next.value === "let" && peek(0).value === "(") {\n +\t\t\tif (!state.option.inMoz(true)) {\n +\t\t\t\twarning("W118", state.tokens.next, "let expressions");\n +\t\t\t}\n +\t\t\tisLetExpr = true;\n +\t\t\tfunct["(blockscope)"].stack();\n +\t\t\tadvance("let");\n +\t\t\tadvance("(");\n +\t\t\tstate.syntax["let"].fud.call(state.syntax["let"].fud, false);\n +\t\t\tadvance(")");\n +\t\t}\n \n -\t\tif (nexttoken.id === "(end)")\n -\t\t\terror("Unexpected early end of program.", token);\n +\t\tif (state.tokens.next.id === "(end)")\n +\t\t\terror("E006", state.tokens.curr);\n \n \t\tadvance();\n +\n \t\tif (initial) {\n \t\t\tanonname = "anonymous";\n -\t\t\tfunct["(verb)"] = token.value;\n +\t\t\tfunct["(verb)"] = state.tokens.curr.value;\n \t\t}\n -\t\tif (initial === true && token.fud) {\n -\t\t\tleft = token.fud();\n +\n +\t\tif (initial === true && state.tokens.curr.fud) {\n +\t\t\tleft = state.tokens.curr.fud();\n \t\t} else {\n -\t\t\tif (token.nud) {\n -\t\t\t\tleft = token.nud();\n +\t\t\tif (state.tokens.curr.nud) {\n +\t\t\t\tleft = state.tokens.curr.nud();\n \t\t\t} else {\n -\t\t\t\tif (nexttoken.type === "(number)" && token.id === ".") {\n -\t\t\t\t\twarning("A leading decimal point can be confused with a dot: \'.{a}\'.",\n -\t\t\t\t\t\t\ttoken, nexttoken.value);\n -\t\t\t\t\tadvance();\n -\t\t\t\t\treturn token;\n -\t\t\t\t} else {\n -\t\t\t\t\terror("Expected an identifier and instead saw \'{a}\'.",\n -\t\t\t\t\t\t\ttoken, token.id);\n -\t\t\t\t}\n +\t\t\t\terror("E030", state.tokens.curr, state.tokens.curr.id);\n \t\t\t}\n -\t\t\twhile (rbp < nexttoken.lbp) {\n -\t\t\t\tisArray = token.value === "Array";\n -\t\t\t\tisObject = token.value === "Object";\n +\n +\t\t\twhile (rbp < state.tokens.next.lbp && !isEndOfExpr()) {\n +\t\t\t\tisArray = state.tokens.curr.value === "Array";\n +\t\t\t\tisObject = state.tokens.curr.value === "Object";\n \t\t\t\tif (left && (left.value || (left.first && left.first.value))) {\n \t\t\t\t\tif (left.value !== "new" ||\n \t\t\t\t\t (left.first && left.first.value && left.first.value === ".")) {\n \t\t\t\t\t\tisArray = false;\n -\t\t\t\t\t\tif (left.value !== token.value) {\n +\t\t\t\t\t\tif (left.value !== state.tokens.curr.value) {\n \t\t\t\t\t\t\tisObject = false;\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \n \t\t\t\tadvance();\n -\t\t\t\tif (isArray && token.id === "(" && nexttoken.id === ")")\n -\t\t\t\t\twarning("Use the array literal notation [].", token);\n -\t\t\t\tif (isObject && token.id === "(" && nexttoken.id === ")")\n -\t\t\t\t\twarning("Use the object literal notation {}.", token);\n -\t\t\t\tif (token.led) {\n -\t\t\t\t\tleft = token.led(left);\n +\n +\t\t\t\tif (isArray && state.tokens.curr.id === "(" && state.tokens.next.id === ")") {\n +\t\t\t\t\twarning("W009", state.tokens.curr);\n +\t\t\t\t}\n +\n +\t\t\t\tif (isObject && state.tokens.curr.id === "(" && state.tokens.next.id === ")") {\n +\t\t\t\t\twarning("W010", state.tokens.curr);\n +\t\t\t\t}\n +\n +\t\t\t\tif (left && state.tokens.curr.led) {\n +\t\t\t\t\tleft = state.tokens.curr.led(left);\n \t\t\t\t} else {\n -\t\t\t\t\terror("Expected an operator and instead saw \'{a}\'.",\n -\t\t\t\t\t\ttoken, token.id);\n +\t\t\t\t\terror("E033", state.tokens.curr, state.tokens.curr.id);\n \t\t\t\t}\n \t\t\t}\n \t\t}\n +\t\tif (isLetExpr) {\n +\t\t\tfunct["(blockscope)"].unstack();\n +\t\t}\n \t\treturn left;\n \t}\n \n \tfunction adjacent(left, right) {\n -\t\tleft = left || token;\n -\t\tright = right || nexttoken;\n -\t\tif (option.white) {\n +\t\tleft = left || state.tokens.curr;\n +\t\tright = right || state.tokens.next;\n +\t\tif (state.option.white) {\n \t\t\tif (left.character !== right.from && left.line === right.line) {\n \t\t\t\tleft.from += (left.character - left.from);\n -\t\t\t\twarning("Unexpected space after \'{a}\'.", left, left.value);\n +\t\t\t\twarning("W011", left, left.value);\n \t\t\t}\n \t\t}\n \t}\n \n \tfunction nobreak(left, right) {\n -\t\tleft = left || token;\n -\t\tright = right || nexttoken;\n -\t\tif (option.white && (left.character !== right.from || left.line !== right.line)) {\n -\t\t\twarning("Unexpected space before \'{a}\'.", right, right.value);\n +\t\tleft = left || state.tokens.curr;\n +\t\tright = right || state.tokens.next;\n +\t\tif (state.option.white && (left.character !== right.from || left.line !== right.line)) {\n +\t\t\twarning("W012", right, right.value);\n \t\t}\n \t}\n \n \tfunction nospace(left, right) {\n -\t\tleft = left || token;\n -\t\tright = right || nexttoken;\n -\t\tif (option.white && !left.comment) {\n +\t\tleft = left || state.tokens.curr;\n +\t\tright = right || state.tokens.next;\n +\t\tif (state.option.white && !left.comment) {\n \t\t\tif (left.line === right.line) {\n \t\t\t\tadjacent(left, right);\n \t\t\t}\n @@ -4046,77 +4749,134 @@ klass:\n \t}\n \n \tfunction nonadjacent(left, right) {\n -\t\tif (option.white) {\n -\t\t\tleft = left || token;\n -\t\t\tright = right || nexttoken;\n +\t\tif (state.option.white) {\n +\t\t\tleft = left || state.tokens.curr;\n +\t\t\tright = right || state.tokens.next;\n +\n \t\t\tif (left.value === ";" && right.value === ";") {\n \t\t\t\treturn;\n \t\t\t}\n +\n \t\t\tif (left.line === right.line && left.character === right.from) {\n \t\t\t\tleft.from += (left.character - left.from);\n -\t\t\t\twarning("Missing space after \'{a}\'.",\n -\t\t\t\t\t\tleft, left.value);\n +\t\t\t\twarning("W013", left, left.value);\n \t\t\t}\n \t\t}\n \t}\n \n \tfunction nobreaknonadjacent(left, right) {\n -\t\tleft = left || token;\n -\t\tright = right || nexttoken;\n -\t\tif (!option.laxbreak && left.line !== right.line) {\n -\t\t\twarning("Bad line breaking before \'{a}\'.", right, right.id);\n -\t\t} else if (option.white) {\n -\t\t\tleft = left || token;\n -\t\t\tright = right || nexttoken;\n +\t\tleft = left || state.tokens.curr;\n +\t\tright = right || state.tokens.next;\n +\t\tif (!state.option.laxbreak && left.line !== right.line) {\n +\t\t\twarning("W014", right, right.value);\n +\t\t} else if (state.option.white) {\n +\t\t\tleft = left || state.tokens.curr;\n +\t\t\tright = right || state.tokens.next;\n \t\t\tif (left.character === right.from) {\n \t\t\t\tleft.from += (left.character - left.from);\n -\t\t\t\twarning("Missing space after \'{a}\'.",\n -\t\t\t\t\t\tleft, left.value);\n +\t\t\t\twarning("W013", left, left.value);\n \t\t\t}\n \t\t}\n \t}\n \n \tfunction indentation(bias) {\n -\t\tvar i;\n -\t\tif (option.white && nexttoken.id !== "(end)") {\n -\t\t\ti = indent + (bias || 0);\n -\t\t\tif (nexttoken.from !== i) {\n -\t\t\t\twarning(\n -"Expected \'{a}\' to have an indentation at {b} instead at {c}.",\n -\t\t\t\t\t\tnexttoken, nexttoken.value, i, nexttoken.from);\n -\t\t\t}\n +\t\tif (!state.option.white && !state.option["(explicitIndent)"]) {\n +\t\t\treturn;\n +\t\t}\n +\n +\t\tif (state.tokens.next.id === "(end)") {\n +\t\t\treturn;\n +\t\t}\n +\n +\t\tvar i = indent + (bias || 0);\n +\t\tif (state.tokens.next.from !== i) {\n +\t\t\twarning("W015", state.tokens.next, state.tokens.next.value, i, state.tokens.next.from);\n \t\t}\n \t}\n \n \tfunction nolinebreak(t) {\n -\t\tt = t || token;\n -\t\tif (t.line !== nexttoken.line) {\n -\t\t\twarning("Line breaking error \'{a}\'.", t, t.value);\n +\t\tt = t || state.tokens.curr;\n +\t\tif (t.line !== state.tokens.next.line) {\n +\t\t\twarning("E022", t, t.value);\n \t\t}\n \t}\n \n -\n -\tfunction comma() {\n -\t\tif (token.line !== nexttoken.line) {\n -\t\t\tif (!option.laxcomma) {\n +\tfunction nobreakcomma(left, right) {\n +\t\tif (left.line !== right.line) {\n +\t\t\tif (!state.option.laxcomma) {\n \t\t\t\tif (comma.first) {\n -\t\t\t\t\twarning("Comma warnings can be turned off with \'laxcomma\'");\n +\t\t\t\t\twarning("I001");\n \t\t\t\t\tcomma.first = false;\n \t\t\t\t}\n -\t\t\t\twarning("Bad line breaking before \'{a}\'.", token, nexttoken.id);\n +\t\t\t\twarning("W014", left, right.value);\n +\t\t\t}\n +\t\t} else if (!left.comment && left.character !== right.from && state.option.white) {\n +\t\t\tleft.from += (left.character - left.from);\n +\t\t\twarning("W011", left, left.value);\n +\t\t}\n +\t}\n +\n +\tfunction comma(opts) {\n +\t\topts = opts || {};\n +\n +\t\tif (!opts.peek) {\n +\t\t\tnobreakcomma(state.tokens.curr, state.tokens.next);\n +\t\t\tadvance(",");\n +\t\t} else {\n +\t\t\tnobreakcomma(state.tokens.prev, state.tokens.curr);\n +\t\t}\n +\n +\t\tif (state.tokens.next.value !== "]" && state.tokens.next.value !== "}") {\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t}\n +\n +\t\tif (state.tokens.next.identifier && !(opts.property && state.option.inES5())) {\n +\t\t\tswitch (state.tokens.next.value) {\n +\t\t\tcase "break":\n +\t\t\tcase "case":\n +\t\t\tcase "catch":\n +\t\t\tcase "continue":\n +\t\t\tcase "default":\n +\t\t\tcase "do":\n +\t\t\tcase "else":\n +\t\t\tcase "finally":\n +\t\t\tcase "for":\n +\t\t\tcase "if":\n +\t\t\tcase "in":\n +\t\t\tcase "instanceof":\n +\t\t\tcase "return":\n +\t\t\tcase "switch":\n +\t\t\tcase "throw":\n +\t\t\tcase "try":\n +\t\t\tcase "var":\n +\t\t\tcase "let":\n +\t\t\tcase "while":\n +\t\t\tcase "with":\n +\t\t\t\terror("E024", state.tokens.next, state.tokens.next.value);\n +\t\t\t\treturn false;\n +\t\t\t}\n +\t\t}\n +\n +\t\tif (state.tokens.next.type === "(punctuator)") {\n +\t\t\tswitch (state.tokens.next.value) {\n +\t\t\tcase "}":\n +\t\t\tcase "]":\n +\t\t\tcase ",":\n +\t\t\t\tif (opts.allowTrailing) {\n +\t\t\t\t\treturn true;\n +\t\t\t\t}\n +\t\t\tcase ")":\n +\t\t\t\terror("E024", state.tokens.next, state.tokens.next.value);\n +\t\t\t\treturn false;\n \t\t\t}\n -\t\t} else if (!token.comment && token.character !== nexttoken.from && option.white) {\n -\t\t\ttoken.from += (token.character - token.from);\n -\t\t\twarning("Unexpected space after \'{a}\'.", token, token.value);\n \t\t}\n -\t\tadvance(",");\n -\t\tnonadjacent(token, nexttoken);\n +\t\treturn true;\n \t}\n \n \tfunction symbol(s, p) {\n -\t\tvar x = syntax[s];\n +\t\tvar x = state.syntax[s];\n \t\tif (!x || typeof x !== "object") {\n -\t\t\tsyntax[s] = x = {\n +\t\t\tstate.syntax[s] = x = {\n \t\t\t\tid: s,\n \t\t\t\tlbp: p,\n \t\t\t\tvalue: s\n @@ -4125,12 +4885,10 @@ klass:\n \t\treturn x;\n \t}\n \n -\n \tfunction delim(s) {\n \t\treturn symbol(s, 0);\n \t}\n \n -\n \tfunction stmt(s, f) {\n \t\tvar x = delim(s);\n \t\tx.identifier = x.reserved = true;\n @@ -4138,14 +4896,12 @@ klass:\n \t\treturn x;\n \t}\n \n -\n \tfunction blockstmt(s, f) {\n \t\tvar x = stmt(s, f);\n \t\tx.block = true;\n \t\treturn x;\n \t}\n \n -\n \tfunction reserveName(x) {\n \t\tvar c = x.id.charAt(0);\n \t\tif ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) {\n @@ -4154,7 +4910,6 @@ klass:\n \t\treturn x;\n \t}\n \n -\n \tfunction prefix(s, f) {\n \t\tvar x = symbol(s, 150);\n \t\treserveName(x);\n @@ -4162,11 +4917,11 @@ klass:\n \t\t\tthis.right = expression(150);\n \t\t\tthis.arity = "unary";\n \t\t\tif (this.id === "++" || this.id === "--") {\n -\t\t\t\tif (option.plusplus) {\n -\t\t\t\t\twarning("Unexpected use of \'{a}\'.", this, this.id);\n -\t\t\t\t} else if ((!this.right.identifier || this.right.reserved) &&\n +\t\t\t\tif (state.option.plusplus) {\n +\t\t\t\t\twarning("W016", this, this.id);\n +\t\t\t\t} else if ((!this.right.identifier || isReserved(this.right)) &&\n \t\t\t\t\t\tthis.right.id !== "." && this.right.id !== "[") {\n -\t\t\t\t\twarning("Bad operand.", this);\n +\t\t\t\t\twarning("W017", this);\n \t\t\t\t}\n \t\t\t}\n \t\t\treturn this;\n @@ -4174,7 +4929,6 @@ klass:\n \t\treturn x;\n \t}\n \n -\n \tfunction type(s, f) {\n \t\tvar x = delim(s);\n \t\tx.type = s;\n @@ -4182,13 +4936,28 @@ klass:\n \t\treturn x;\n \t}\n \n -\n -\tfunction reserve(s, f) {\n -\t\tvar x = type(s, f);\n -\t\tx.identifier = x.reserved = true;\n +\tfunction reserve(name, func) {\n +\t\tvar x = type(name, func);\n +\t\tx.identifier = true;\n +\t\tx.reserved = true;\n \t\treturn x;\n \t}\n \n +\tfunction FutureReservedWord(name, meta) {\n +\t\tvar x = type(name, (meta && meta.nud) || function () {\n +\t\t\treturn this;\n +\t\t});\n +\n +\t\tmeta = meta || {};\n +\t\tmeta.isFutureReservedWord = true;\n +\n +\t\tx.value = name;\n +\t\tx.identifier = true;\n +\t\tx.reserved = true;\n +\t\tx.meta = meta;\n +\n +\t\treturn x;\n +\t}\n \n \tfunction reservevar(s, v) {\n \t\treturn reserve(s, function () {\n @@ -4199,17 +4968,17 @@ klass:\n \t\t});\n \t}\n \n -\n \tfunction infix(s, f, p, w) {\n \t\tvar x = symbol(s, p);\n \t\treserveName(x);\n +\t\tx.infix = true;\n \t\tx.led = function (left) {\n \t\t\tif (!w) {\n -\t\t\t\tnobreaknonadjacent(prevtoken, token);\n -\t\t\t\tnonadjacent(token, nexttoken);\n +\t\t\t\tnobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t\t}\n \t\t\tif (s === "in" && left.id === "!") {\n -\t\t\t\twarning("Confusing use of \'{a}\'.", left, "!");\n +\t\t\t\twarning("W018", left, "!");\n \t\t\t}\n \t\t\tif (typeof f === "function") {\n \t\t\t\treturn f(left, this);\n @@ -4223,24 +4992,50 @@ klass:\n \t}\n \n \n +\tfunction application(s) {\n +\t\tvar x = symbol(s, 42);\n +\n +\t\tx.led = function (left) {\n +\t\t\tif (!state.option.inESNext()) {\n +\t\t\t\twarning("W104", state.tokens.curr, "arrow function syntax (=>)");\n +\t\t\t}\n +\n +\t\t\tnobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\n +\t\t\tthis.left = left;\n +\t\t\tthis.right = doFunction(undefined, undefined, false, left);\n +\t\t\treturn this;\n +\t\t};\n +\t\treturn x;\n +\t}\n +\n \tfunction relation(s, f) {\n \t\tvar x = symbol(s, 100);\n +\n \t\tx.led = function (left) {\n -\t\t\tnobreaknonadjacent(prevtoken, token);\n -\t\t\tnonadjacent(token, nexttoken);\n +\t\t\tnobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t\tvar right = expression(100);\n \n \t\t\tif (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) {\n -\t\t\t\twarning("Use the isNaN function to compare with NaN.", this);\n +\t\t\t\twarning("W019", this);\n \t\t\t} else if (f) {\n \t\t\t\tf.apply(this, [left, right]);\n \t\t\t}\n +\n +\t\t\tif (!left || !right) {\n +\t\t\t\tquit("E041", state.tokens.curr.line);\n +\t\t\t}\n +\n \t\t\tif (left.id === "!") {\n -\t\t\t\twarning("Confusing use of \'{a}\'.", left, "!");\n +\t\t\t\twarning("W018", left, "!");\n \t\t\t}\n +\n \t\t\tif (right.id === "!") {\n -\t\t\t\twarning("Confusing use of \'{a}\'.", right, "!");\n +\t\t\t\twarning("W018", right, "!");\n \t\t\t}\n +\n \t\t\tthis.left = left;\n \t\t\tthis.right = right;\n \t\t\treturn this;\n @@ -4248,59 +5043,74 @@ klass:\n \t\treturn x;\n \t}\n \n -\n \tfunction isPoorRelation(node) {\n \t\treturn node &&\n \t\t\t ((node.type === "(number)" && +node.value === 0) ||\n \t\t\t (node.type === "(string)" && node.value === "") ||\n -\t\t\t (node.type === "null" && !option.eqnull) ||\n +\t\t\t (node.type === "null" && !state.option.eqnull) ||\n \t\t\t\tnode.type === "true" ||\n \t\t\t\tnode.type === "false" ||\n \t\t\t\tnode.type === "undefined");\n \t}\n \n -\n -\tfunction assignop(s) {\n -\t\tsymbol(s, 20).exps = true;\n -\n -\t\treturn infix(s, function (left, that) {\n +\tfunction assignop(s, f, p) {\n +\t\tvar x = infix(s, typeof f === "function" ? f : function (left, that) {\n \t\t\tthat.left = left;\n \n -\t\t\tif (predefined[left.value] === false &&\n -\t\t\t\t\tscope[left.value]["(global)"] === true) {\n -\t\t\t\twarning("Read only.", left);\n -\t\t\t} else if (left["function"]) {\n -\t\t\t\twarning("\'{a}\' is a function.", left, left.value);\n -\t\t\t}\n -\n \t\t\tif (left) {\n -\t\t\t\tif (option.esnext && funct[left.value] === "const") {\n -\t\t\t\t\twarning("Attempting to override \'{a}\' which is a constant", left, left.value);\n +\t\t\t\tif (predefined[left.value] === false &&\n +\t\t\t\t\t\tscope[left.value]["(global)"] === true) {\n +\t\t\t\t\twarning("W020", left);\n +\t\t\t\t} else if (left["function"]) {\n +\t\t\t\t\twarning("W021", left, left.value);\n \t\t\t\t}\n \n -\t\t\t\tif (left.id === "." || left.id === "[") {\n -\t\t\t\t\tif (!left.left || left.left.value === "arguments") {\n -\t\t\t\t\t\twarning("Bad assignment.", that);\n +\t\t\t\tif (funct[left.value] === "const") {\n +\t\t\t\t\terror("E013", left, left.value);\n +\t\t\t\t}\n +\n +\t\t\t\tif (left.id === ".") {\n +\t\t\t\t\tif (!left.left) {\n +\t\t\t\t\t\twarning("E031", that);\n +\t\t\t\t\t} else if (left.left.value === "arguments" && !state.directive["use strict"]) {\n +\t\t\t\t\t\twarning("E031", that);\n +\t\t\t\t\t}\n +\n +\t\t\t\t\tthat.right = expression(10);\n +\t\t\t\t\treturn that;\n +\t\t\t\t} else if (left.id === "[") {\n +\t\t\t\t\tif (state.tokens.curr.left.first) {\n +\t\t\t\t\t\tstate.tokens.curr.left.first.forEach(function (t) {\n +\t\t\t\t\t\t\tif (funct[t.value] === "const") {\n +\t\t\t\t\t\t\t\terror("E013", t, t.value);\n +\t\t\t\t\t\t\t}\n +\t\t\t\t\t\t});\n +\t\t\t\t\t} else if (!left.left) {\n +\t\t\t\t\t\twarning("E031", that);\n +\t\t\t\t\t} else if (left.left.value === "arguments" && !state.directive["use strict"]) {\n +\t\t\t\t\t\twarning("E031", that);\n \t\t\t\t\t}\n -\t\t\t\t\tthat.right = expression(19);\n +\t\t\t\t\tthat.right = expression(10);\n \t\t\t\t\treturn that;\n -\t\t\t\t} else if (left.identifier && !left.reserved) {\n +\t\t\t\t} else if (left.identifier && !isReserved(left)) {\n \t\t\t\t\tif (funct[left.value] === "exception") {\n -\t\t\t\t\t\twarning("Do not assign to the exception parameter.", left);\n +\t\t\t\t\t\twarning("W022", left);\n \t\t\t\t\t}\n -\t\t\t\t\tthat.right = expression(19);\n +\t\t\t\t\tthat.right = expression(10);\n \t\t\t\t\treturn that;\n \t\t\t\t}\n \n -\t\t\t\tif (left === syntax["function"]) {\n -\t\t\t\t\twarning(\n -"Expected an identifier in an assignment and instead saw a function invocation.",\n -\t\t\t\t\t\t\t\ttoken);\n +\t\t\t\tif (left === state.syntax["function"]) {\n +\t\t\t\t\twarning("W023", state.tokens.curr);\n \t\t\t\t}\n \t\t\t}\n \n -\t\t\terror("Bad assignment.", that);\n -\t\t}, 20);\n +\t\t\terror("E031", that);\n +\t\t}, p);\n +\n +\t\tx.exps = true;\n +\t\tx.assign = true;\n +\t\treturn x;\n \t}\n \n \n @@ -4308,8 +5118,8 @@ klass:\n \t\tvar x = symbol(s, p);\n \t\treserveName(x);\n \t\tx.led = (typeof f === "function") ? f : function (left) {\n -\t\t\tif (option.bitwise) {\n -\t\t\t\twarning("Unexpected use of \'{a}\'.", this, this.id);\n +\t\t\tif (state.option.bitwise) {\n +\t\t\t\twarning("W016", this, this.id);\n \t\t\t}\n \t\t\tthis.left = left;\n \t\t\tthis.right = expression(p);\n @@ -4320,74 +5130,91 @@ klass:\n \n \n \tfunction bitwiseassignop(s) {\n -\t\tsymbol(s, 20).exps = true;\n -\t\treturn infix(s, function (left, that) {\n -\t\t\tif (option.bitwise) {\n -\t\t\t\twarning("Unexpected use of \'{a}\'.", that, that.id);\n +\t\treturn assignop(s, function (left, that) {\n +\t\t\tif (state.option.bitwise) {\n +\t\t\t\twarning("W016", that, that.id);\n \t\t\t}\n -\t\t\tnonadjacent(prevtoken, token);\n -\t\t\tnonadjacent(token, nexttoken);\n +\t\t\tnonadjacent(state.tokens.prev, state.tokens.curr);\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t\tif (left) {\n \t\t\t\tif (left.id === "." || left.id === "[" ||\n -\t\t\t\t\t\t(left.identifier && !left.reserved)) {\n -\t\t\t\t\texpression(19);\n +\t\t\t\t\t\t(left.identifier && !isReserved(left))) {\n +\t\t\t\t\texpression(10);\n \t\t\t\t\treturn that;\n \t\t\t\t}\n -\t\t\t\tif (left === syntax["function"]) {\n -\t\t\t\t\twarning(\n -"Expected an identifier in an assignment, and instead saw a function invocation.",\n -\t\t\t\t\t\t\t\ttoken);\n +\t\t\t\tif (left === state.syntax["function"]) {\n +\t\t\t\t\twarning("W023", state.tokens.curr);\n \t\t\t\t}\n \t\t\t\treturn that;\n \t\t\t}\n -\t\t\terror("Bad assignment.", that);\n +\t\t\terror("E031", that);\n \t\t}, 20);\n \t}\n \n \n \tfunction suffix(s) {\n \t\tvar x = symbol(s, 150);\n +\n \t\tx.led = function (left) {\n -\t\t\tif (option.plusplus) {\n -\t\t\t\twarning("Unexpected use of \'{a}\'.", this, this.id);\n -\t\t\t} else if ((!left.identifier || left.reserved) &&\n -\t\t\t\t\tleft.id !== "." && left.id !== "[") {\n -\t\t\t\twarning("Bad operand.", this);\n +\t\t\tif (state.option.plusplus) {\n +\t\t\t\twarning("W016", this, this.id);\n +\t\t\t} else if ((!left.identifier || isReserved(left)) && left.id !== "." && left.id !== "[") {\n +\t\t\t\twarning("W017", this);\n \t\t\t}\n +\n \t\t\tthis.left = left;\n \t\t\treturn this;\n \t\t};\n \t\treturn x;\n \t}\n -\tfunction optionalidentifier(fnparam) {\n -\t\tif (nexttoken.identifier) {\n -\t\t\tadvance();\n -\t\t\tif (token.reserved && !option.es5) {\n -\t\t\t\tif (!fnparam || token.value !== "undefined") {\n -\t\t\t\t\twarning("Expected an identifier and instead saw \'{a}\' (a reserved word).",\n -\t\t\t\t\t\t\ttoken, token.id);\n -\t\t\t\t}\n +\n +\tfunction optionalidentifier(fnparam, prop) {\n +\t\tif (!state.tokens.next.identifier) {\n +\t\t\treturn;\n +\t\t}\n +\n +\t\tadvance();\n +\n +\t\tvar curr = state.tokens.curr;\n +\t\tvar val = state.tokens.curr.value;\n +\n +\t\tif (!isReserved(curr)) {\n +\t\t\treturn val;\n +\t\t}\n +\n +\t\tif (prop) {\n +\t\t\tif (state.option.inES5()) {\n +\t\t\t\treturn val;\n \t\t\t}\n -\t\t\treturn token.value;\n \t\t}\n +\n +\t\tif (fnparam && val === "undefined") {\n +\t\t\treturn val;\n +\t\t}\n +\t\tif (prop && !api.getCache("displayed:I002")) {\n +\t\t\tapi.setCache("displayed:I002", true);\n +\t\t\twarning("I002");\n +\t\t}\n +\n +\t\twarning("W024", state.tokens.curr, state.tokens.curr.id);\n +\t\treturn val;\n \t}\n -\tfunction identifier(fnparam) {\n -\t\tvar i = optionalidentifier(fnparam);\n +\tfunction identifier(fnparam, prop) {\n +\t\tvar i = optionalidentifier(fnparam, prop);\n \t\tif (i) {\n \t\t\treturn i;\n \t\t}\n -\t\tif (token.id === "function" && nexttoken.id === "(") {\n -\t\t\twarning("Missing name in function declaration.");\n +\t\tif (state.tokens.curr.id === "function" && state.tokens.next.id === "(") {\n +\t\t\twarning("W025");\n \t\t} else {\n -\t\t\terror("Expected an identifier and instead saw \'{a}\'.",\n -\t\t\t\t\tnexttoken, nexttoken.value);\n +\t\t\terror("E030", state.tokens.next, state.tokens.next.value);\n \t\t}\n \t}\n \n \n \tfunction reachable(s) {\n \t\tvar i = 0, t;\n -\t\tif (nexttoken.id !== ";" || noreach) {\n +\t\tif (state.tokens.next.id !== ";" || noreach) {\n \t\t\treturn;\n \t\t}\n \t\tfor (;;) {\n @@ -4397,14 +5224,15 @@ klass:\n \t\t\t}\n \t\t\tif (t.id !== "(endline)") {\n \t\t\t\tif (t.id === "function") {\n -\t\t\t\t\tif (!option.latedef) {\n +\t\t\t\t\tif (!state.option.latedef) {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n -\t\t\t\t\twarning(\n -"Inner functions should be listed at the top of the outer function.", t);\n +\n +\t\t\t\t\twarning("W026", t);\n \t\t\t\t\tbreak;\n \t\t\t\t}\n -\t\t\t\twarning("Unreachable \'{a}\' after \'{b}\'.", t, t.value, s);\n +\n +\t\t\t\twarning("W027", t, t.value, s);\n \t\t\t\tbreak;\n \t\t\t}\n \t\t\ti += 1;\n @@ -4413,29 +5241,46 @@ klass:\n \n \n \tfunction statement(noindent) {\n -\t\tvar i = indent, r, s = scope, t = nexttoken;\n +\t\tvar values;\n +\t\tvar i = indent, r, s = scope, t = state.tokens.next;\n \n \t\tif (t.id === ";") {\n \t\t\tadvance(";");\n \t\t\treturn;\n \t\t}\n +\t\tvar res = isReserved(t);\n \n -\t\tif (t.identifier && !t.reserved && peek().id === ":") {\n +\t\tif (res && t.meta && t.meta.isFutureReservedWord && peek().id === ":") {\n +\t\t\twarning("W024", t, t.id);\n +\t\t\tres = false;\n +\t\t}\n +\t\tif (_.has(["[", "{"], t.value)) {\n +\t\t\tif (lookupBlockType().isDestAssign) {\n +\t\t\t\tif (!state.option.inESNext()) {\n +\t\t\t\t\twarning("W104", state.tokens.curr, "destructuring expression");\n +\t\t\t\t}\n +\t\t\t\tvalues = destructuringExpression();\n +\t\t\t\tvalues.forEach(function (tok) {\n +\t\t\t\t\tisundef(funct, "W117", tok.token, tok.id);\n +\t\t\t\t});\n +\t\t\t\tadvance("=");\n +\t\t\t\tdestructuringExpressionMatch(values, expression(10, true));\n +\t\t\t\tadvance(";");\n +\t\t\t\treturn;\n +\t\t\t}\n +\t\t}\n +\t\tif (t.identifier && !res && peek().id === ":") {\n \t\t\tadvance();\n \t\t\tadvance(":");\n \t\t\tscope = Object.create(s);\n \t\t\taddlabel(t.value, "label");\n \n -\t\t\tif (!nexttoken.labelled && nexttoken.value !== "{") {\n -\t\t\t\twarning("Label \'{a}\' on {b} statement.", nexttoken, t.value, nexttoken.value);\n -\t\t\t}\n -\n -\t\t\tif (jx.test(t.value + ":")) {\n -\t\t\t\twarning("Label \'{a}\' looks like a javascript url.", t, t.value);\n +\t\t\tif (!state.tokens.next.labelled && state.tokens.next.value !== "{") {\n +\t\t\t\twarning("W028", state.tokens.next, t.value, state.tokens.next.value);\n \t\t\t}\n \n -\t\t\tnexttoken.label = t.value;\n -\t\t\tt = nexttoken;\n +\t\t\tstate.tokens.next.label = t.value;\n +\t\t\tt = state.tokens.next;\n \t\t}\n \n \t\tif (t.id === "{") {\n @@ -4449,28 +5294,23 @@ klass:\n \t\tr = expression(0, true);\n \n \t\tif (!t.block) {\n -\t\t\tif (!option.expr && (!r || !r.exps)) {\n -\t\t\t\twarning("Expected an assignment or function call and instead saw an expression.",\n -\t\t\t\t\ttoken);\n -\t\t\t} else if (option.nonew && r.id === "(" && r.left.id === "new") {\n -\t\t\t\twarning("Do not use \'new\' for side effects.", t);\n +\t\t\tif (!state.option.expr && (!r || !r.exps)) {\n +\t\t\t\twarning("W030", state.tokens.curr);\n +\t\t\t} else if (state.option.nonew && r && r.left && r.id === "(" && r.left.id === "new") {\n +\t\t\t\twarning("W031", t);\n \t\t\t}\n \n -\t\t\tif (nexttoken.id === ",") {\n -\t\t\t\treturn comma();\n -\t\t\t}\n -\n -\t\t\tif (nexttoken.id !== ";") {\n -\t\t\t\tif (!option.asi) {\n -\t\t\t\t\tif (!option.lastsemic || nexttoken.id !== "}" ||\n -\t\t\t\t\t\t\tnexttoken.line !== token.line) {\n -\t\t\t\t\t\twarningAt("Missing semicolon.", token.line, token.character);\n +\t\t\tif (state.tokens.next.id !== ";") {\n +\t\t\t\tif (!state.option.asi) {\n +\t\t\t\t\tif (!state.option.lastsemic || state.tokens.next.id !== "}" ||\n +\t\t\t\t\t\tstate.tokens.next.line !== state.tokens.curr.line) {\n +\t\t\t\t\t\twarningAt("W033", state.tokens.curr.line, state.tokens.curr.character);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t} else {\n -\t\t\t\tadjacent(token, nexttoken);\n +\t\t\t\tadjacent(state.tokens.curr, state.tokens.next);\n \t\t\t\tadvance(";");\n -\t\t\t\tnonadjacent(token, nexttoken);\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t\t}\n \t\t}\n \n @@ -4483,15 +5323,17 @@ klass:\n \tfunction statements(startLine) {\n \t\tvar a = [], p;\n \n -\t\twhile (!nexttoken.reach && nexttoken.id !== "(end)") {\n -\t\t\tif (nexttoken.id === ";") {\n +\t\twhile (!state.tokens.next.reach && state.tokens.next.id !== "(end)") {\n +\t\t\tif (state.tokens.next.id === ";") {\n \t\t\t\tp = peek();\n -\t\t\t\tif (!p || p.id !== "(") {\n -\t\t\t\t\twarning("Unnecessary semicolon.");\n +\n +\t\t\t\tif (!p || (p.id !== "(" && p.id !== "[")) {\n +\t\t\t\t\twarning("W032");\n \t\t\t\t}\n +\n \t\t\t\tadvance(";");\n \t\t\t} else {\n -\t\t\t\ta.push(statement(startLine === nexttoken.line));\n +\t\t\t\ta.push(statement(startLine === state.tokens.next.line));\n \t\t\t}\n \t\t}\n \t\treturn a;\n @@ -4500,7 +5342,7 @@ klass:\n \t\tvar i, p, pn;\n \n \t\tfor (;;) {\n -\t\t\tif (nexttoken.id === "(string)") {\n +\t\t\tif (state.tokens.next.id === "(string)") {\n \t\t\t\tp = peek(0);\n \t\t\t\tif (p.id === "(endline)") {\n \t\t\t\t\ti = 1;\n @@ -4515,28 +5357,28 @@ klass:\n \t\t\t\t\t\t\tpn.id !== "}") {\n \t\t\t\t\t\t\tbreak;\n \t\t\t\t\t\t}\n -\t\t\t\t\t\twarning("Missing semicolon.", nexttoken);\n +\t\t\t\t\t\twarning("W033", state.tokens.next);\n \t\t\t\t\t} else {\n \t\t\t\t\t\tp = pn;\n \t\t\t\t\t}\n \t\t\t\t} else if (p.id === "}") {\n -\t\t\t\t\twarning("Missing semicolon.", p);\n +\t\t\t\t\twarning("W033", p);\n \t\t\t\t} else if (p.id !== ";") {\n \t\t\t\t\tbreak;\n \t\t\t\t}\n \n \t\t\t\tindentation();\n \t\t\t\tadvance();\n -\t\t\t\tif (directive[token.value]) {\n -\t\t\t\t\twarning("Unnecessary directive \\"{a}\\".", token, token.value);\n +\t\t\t\tif (state.directive[state.tokens.curr.value]) {\n +\t\t\t\t\twarning("W034", state.tokens.curr, state.tokens.curr.value);\n \t\t\t\t}\n \n -\t\t\t\tif (token.value === "use strict") {\n -\t\t\t\t\tif (!option["(explicitNewcap)"])\n -\t\t\t\t\t\toption.newcap = true;\n -\t\t\t\t\toption.undef = true;\n +\t\t\t\tif (state.tokens.curr.value === "use strict") {\n +\t\t\t\t\tif (!state.option["(explicitNewcap)"])\n +\t\t\t\t\t\tstate.option.newcap = true;\n +\t\t\t\t\tstate.option.undef = true;\n \t\t\t\t}\n -\t\t\t\tdirective[token.value] = true;\n +\t\t\t\tstate.directive[state.tokens.curr.value] = true;\n \n \t\t\t\tif (p.id === ";") {\n \t\t\t\t\tadvance(";");\n @@ -4546,7 +5388,7 @@ klass:\n \t\t\tbreak;\n \t\t}\n \t}\n -\tfunction block(ordinary, stmt, isfunc) {\n +\tfunction block(ordinary, stmt, isfunc, isfatarrow) {\n \t\tvar a,\n \t\t\tb = inblock,\n \t\t\told_indent = indent,\n @@ -4558,37 +5400,39 @@ klass:\n \n \t\tinblock = ordinary;\n \n -\t\tif (!ordinary || !option.funcscope)\n +\t\tif (!ordinary || !state.option.funcscope)\n \t\t\tscope = Object.create(scope);\n \n -\t\tnonadjacent(token, nexttoken);\n -\t\tt = nexttoken;\n +\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\tt = state.tokens.next;\n \n \t\tvar metrics = funct["(metrics)"];\n \t\tmetrics.nestedBlockDepth += 1;\n \t\tmetrics.verifyMaxNestedBlockDepthPerFunction();\n \n -\t\tif (nexttoken.id === "{") {\n +\t\tif (state.tokens.next.id === "{") {\n \t\t\tadvance("{");\n -\t\t\tline = token.line;\n -\t\t\tif (nexttoken.id !== "}") {\n -\t\t\t\tindent += option.indent;\n -\t\t\t\twhile (!ordinary && nexttoken.from > indent) {\n -\t\t\t\t\tindent += option.indent;\n +\t\t\tfunct["(blockscope)"].stack();\n +\n +\t\t\tline = state.tokens.curr.line;\n +\t\t\tif (state.tokens.next.id !== "}") {\n +\t\t\t\tindent += state.option.indent;\n +\t\t\t\twhile (!ordinary && state.tokens.next.from > indent) {\n +\t\t\t\t\tindent += state.option.indent;\n \t\t\t\t}\n \n \t\t\t\tif (isfunc) {\n \t\t\t\t\tm = {};\n -\t\t\t\t\tfor (d in directive) {\n -\t\t\t\t\t\tif (is_own(directive, d)) {\n -\t\t\t\t\t\t\tm[d] = directive[d];\n +\t\t\t\t\tfor (d in state.directive) {\n +\t\t\t\t\t\tif (_.has(state.directive, d)) {\n +\t\t\t\t\t\t\tm[d] = state.directive[d];\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t\tdirectives();\n \n -\t\t\t\t\tif (option.strict && funct["(context)"]["(global)"]) {\n -\t\t\t\t\t\tif (!m["use strict"] && !directive["use strict"]) {\n -\t\t\t\t\t\t\twarning("Missing \\"use strict\\" statement.");\n +\t\t\t\t\tif (state.option.strict && funct["(context)"]["(global)"]) {\n +\t\t\t\t\t\tif (!m["use strict"] && !state.directive["use strict"]) {\n +\t\t\t\t\t\t\twarning("E007");\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n @@ -4598,37 +5442,65 @@ klass:\n \t\t\t\tmetrics.statementCount += a.length;\n \n \t\t\t\tif (isfunc) {\n -\t\t\t\t\tdirective = m;\n +\t\t\t\t\tstate.directive = m;\n \t\t\t\t}\n \n -\t\t\t\tindent -= option.indent;\n -\t\t\t\tif (line !== nexttoken.line) {\n +\t\t\t\tindent -= state.option.indent;\n +\t\t\t\tif (line !== state.tokens.next.line) {\n \t\t\t\t\tindentation();\n \t\t\t\t}\n -\t\t\t} else if (line !== nexttoken.line) {\n +\t\t\t} else if (line !== state.tokens.next.line) {\n \t\t\t\tindentation();\n \t\t\t}\n \t\t\tadvance("}", t);\n +\n +\t\t\tfunct["(blockscope)"].unstack();\n +\n \t\t\tindent = old_indent;\n \t\t} else if (!ordinary) {\n -\t\t\terror("Expected \'{a}\' and instead saw \'{b}\'.",\n -\t\t\t\t nexttoken, "{", nexttoken.value);\n +\t\t\tif (isfunc) {\n +\t\t\t\tm = {};\n +\t\t\t\tif (stmt && !isfatarrow && !state.option.inMoz(true)) {\n +\t\t\t\t\terror("W118", state.tokens.curr, "function closure expressions");\n +\t\t\t\t}\n +\n +\t\t\t\tif (!stmt) {\n +\t\t\t\t\tfor (d in state.directive) {\n +\t\t\t\t\t\tif (_.has(state.directive, d)) {\n +\t\t\t\t\t\t\tm[d] = state.directive[d];\n +\t\t\t\t\t\t}\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\t\t\t\texpression(10);\n +\n +\t\t\t\tif (state.option.strict && funct["(context)"]["(global)"]) {\n +\t\t\t\t\tif (!m["use strict"] && !state.directive["use strict"]) {\n +\t\t\t\t\t\twarning("E007");\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\t\t\t} else {\n +\t\t\t\terror("E021", state.tokens.next, "{", state.tokens.next.value);\n +\t\t\t}\n \t\t} else {\n -\t\t\tif (!stmt || option.curly)\n -\t\t\t\twarning("Expected \'{a}\' and instead saw \'{b}\'.",\n -\t\t\t\t\t\tnexttoken, "{", nexttoken.value);\n +\t\t\tfunct["(nolet)"] = true;\n +\n +\t\t\tif (!stmt || state.option.curly) {\n +\t\t\t\twarning("W116", state.tokens.next, "{", state.tokens.next.value);\n +\t\t\t}\n \n \t\t\tnoreach = true;\n -\t\t\tindent += option.indent;\n -\t\t\ta = [statement(nexttoken.line === token.line)];\n -\t\t\tindent -= option.indent;\n +\t\t\tindent += state.option.indent;\n +\t\t\ta = [statement(state.tokens.next.line === state.tokens.curr.line)];\n +\t\t\tindent -= state.option.indent;\n \t\t\tnoreach = false;\n +\n +\t\t\tdelete funct["(nolet)"];\n \t\t}\n \t\tfunct["(verb)"] = null;\n -\t\tif (!ordinary || !option.funcscope) scope = s;\n +\t\tif (!ordinary || !state.option.funcscope) scope = s;\n \t\tinblock = b;\n -\t\tif (ordinary && option.noempty && (!a || a.length === 0)) {\n -\t\t\twarning("Empty block.");\n +\t\tif (ordinary && state.option.noempty && (!a || a.length === 0)) {\n +\t\t\twarning("W035");\n \t\t}\n \t\tmetrics.nestedBlockDepth -= 1;\n \t\treturn a;\n @@ -4637,7 +5509,7 @@ klass:\n \n \tfunction countMember(m) {\n \t\tif (membersOnly && typeof membersOnly[m] !== "boolean") {\n -\t\t\twarning("Unexpected /*member \'{a}\'.", token, m);\n +\t\t\twarning("W036", state.tokens.curr, m);\n \t\t}\n \t\tif (typeof member[m] === "number") {\n \t\t\tmember[m] += 1;\n @@ -4647,8 +5519,8 @@ klass:\n \t}\n \n \n -\tfunction note_implied(token) {\n -\t\tvar name = token.value, line = token.line, a = implied[name];\n +\tfunction note_implied(tkn) {\n +\t\tvar name = tkn.value, line = tkn.line, a = implied[name];\n \t\tif (typeof a === "function") {\n \t\t\ta = false;\n \t\t}\n @@ -4669,7 +5541,7 @@ klass:\n \t\treturn this;\n \t});\n \n -\tsyntax["(identifier)"] = {\n +\tstate.syntax["(identifier)"] = {\n \t\ttype: "(identifier)",\n \t\tlbp: 0,\n \t\tidentifier: true,\n @@ -4687,33 +5559,42 @@ klass:\n \t\t\t\ts = funct;\n \t\t\t\tfunct = f;\n \t\t\t}\n -\t\t\tif (funct === s) {\n -\t\t\t\tswitch (funct[v]) {\n +\t\t\tvar block;\n +\t\t\tif (_.has(funct, "(blockscope)")) {\n +\t\t\t\tblock = funct["(blockscope)"].getlabel(v);\n +\t\t\t}\n +\t\t\tif (funct === s || block) {\n +\t\t\t\tswitch (block ? block[v]["(type)"] : funct[v]) {\n \t\t\t\tcase "unused":\n -\t\t\t\t\tfunct[v] = "var";\n +\t\t\t\t\tif (block) block[v]["(type)"] = "var";\n +\t\t\t\t\telse funct[v] = "var";\n \t\t\t\t\tbreak;\n \t\t\t\tcase "unction":\n -\t\t\t\t\tfunct[v] = "function";\n +\t\t\t\t\tif (block) block[v]["(type)"] = "function";\n +\t\t\t\t\telse funct[v] = "function";\n \t\t\t\t\tthis["function"] = true;\n \t\t\t\t\tbreak;\n \t\t\t\tcase "function":\n \t\t\t\t\tthis["function"] = true;\n \t\t\t\t\tbreak;\n \t\t\t\tcase "label":\n -\t\t\t\t\twarning("\'{a}\' is a statement label.", token, v);\n +\t\t\t\t\twarning("W037", state.tokens.curr, v);\n \t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t} else if (funct["(global)"]) {\n \n -\t\t\t\tif (option.undef && typeof predefined[v] !== "boolean") {\n +\t\t\t\tif (typeof predefined[v] !== "boolean") {\n \t\t\t\t\tif (!(anonname === "typeof" || anonname === "delete") ||\n -\t\t\t\t\t\t(nexttoken && (nexttoken.value === "." || nexttoken.value === "["))) {\n +\t\t\t\t\t\t(state.tokens.next && (state.tokens.next.value === "." ||\n +\t\t\t\t\t\t\tstate.tokens.next.value === "["))) {\n \n -\t\t\t\t\t\tisundef(funct, "\'{a}\' is not defined.", token, v);\n +\t\t\t\t\t\tif (!funct["(comparray)"].check(v)) {\n +\t\t\t\t\t\t\tisundef(funct, "W117", state.tokens.curr, v);\n +\t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \n -\t\t\t\tnote_implied(token);\n +\t\t\t\tnote_implied(state.tokens.curr);\n \t\t\t} else {\n \n \t\t\t\tswitch (funct[v]) {\n @@ -4721,10 +5602,10 @@ klass:\n \t\t\t\tcase "function":\n \t\t\t\tcase "var":\n \t\t\t\tcase "unused":\n -\t\t\t\t\twarning("\'{a}\' used out of scope.", token, v);\n +\t\t\t\t\twarning("W038", state.tokens.curr, v);\n \t\t\t\t\tbreak;\n \t\t\t\tcase "label":\n -\t\t\t\t\twarning("\'{a}\' is a statement label.", token, v);\n +\t\t\t\t\twarning("W037", state.tokens.curr, v);\n \t\t\t\t\tbreak;\n \t\t\t\tcase "outer":\n \t\t\t\tcase "global":\n @@ -4733,19 +5614,17 @@ klass:\n \t\t\t\t\tif (s === true) {\n \t\t\t\t\t\tfunct[v] = true;\n \t\t\t\t\t} else if (s === null) {\n -\t\t\t\t\t\twarning("\'{a}\' is not allowed.", token, v);\n -\t\t\t\t\t\tnote_implied(token);\n +\t\t\t\t\t\twarning("W039", state.tokens.curr, v);\n +\t\t\t\t\t\tnote_implied(state.tokens.curr);\n \t\t\t\t\t} else if (typeof s !== "object") {\n -\t\t\t\t\t\tif (option.undef) {\n -\t\t\t\t\t\t\tif (!(anonname === "typeof" || anonname === "delete") ||\n -\t\t\t\t\t\t\t\t(nexttoken &&\n -\t\t\t\t\t\t\t\t\t(nexttoken.value === "." || nexttoken.value === "["))) {\n +\t\t\t\t\t\tif (!(anonname === "typeof" || anonname === "delete") ||\n +\t\t\t\t\t\t\t(state.tokens.next &&\n +\t\t\t\t\t\t\t\t(state.tokens.next.value === "." || state.tokens.next.value === "["))) {\n \n -\t\t\t\t\t\t\t\tisundef(funct, "\'{a}\' is not defined.", token, v);\n -\t\t\t\t\t\t\t}\n +\t\t\t\t\t\t\tisundef(funct, "W117", state.tokens.curr, v);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tfunct[v] = true;\n -\t\t\t\t\t\tnote_implied(token);\n +\t\t\t\t\t\tnote_implied(state.tokens.curr);\n \t\t\t\t\t} else {\n \t\t\t\t\t\tswitch (s[v]) {\n \t\t\t\t\t\tcase "function":\n @@ -4763,7 +5642,7 @@ klass:\n \t\t\t\t\t\t\tfunct[v] = s["(global)"] ? "global" : "outer";\n \t\t\t\t\t\t\tbreak;\n \t\t\t\t\t\tcase "label":\n -\t\t\t\t\t\t\twarning("\'{a}\' is a statement label.", token, v);\n +\t\t\t\t\t\t\twarning("W037", state.tokens.curr, v);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n @@ -4771,8 +5650,7 @@ klass:\n \t\t\treturn this;\n \t\t},\n \t\tled: function () {\n -\t\t\terror("Expected an operator and instead saw \'{a}\'.",\n -\t\t\t\tnexttoken, nexttoken.value);\n +\t\t\terror("E033", state.tokens.next, state.tokens.next.value);\n \t\t}\n \t};\n \n @@ -4783,10 +5661,6 @@ klass:\n \tdelim("(endline)");\n \tdelim("(begin)");\n \tdelim("(end)").reach = true;\n -\tdelim("</").reach = true;\n -\tdelim("<!");\n -\tdelim("<!--");\n -\tdelim("-->");\n \tdelim("(error)").reach = true;\n \tdelim("}").reach = true;\n \tdelim(")");\n @@ -4795,17 +5669,16 @@ klass:\n \tdelim("\'").reach = true;\n \tdelim(";");\n \tdelim(":").reach = true;\n -\tdelim(",");\n \tdelim("#");\n -\tdelim("@");\n +\n \treserve("else");\n \treserve("case").reach = true;\n \treserve("catch");\n \treserve("default").reach = true;\n \treserve("finally");\n \treservevar("arguments", function (x) {\n -\t\tif (directive["use strict"] && funct["(global)"]) {\n -\t\t\twarning("Strict violation.", x);\n +\t\tif (state.directive["use strict"] && funct["(global)"]) {\n +\t\t\twarning("E008", x);\n \t\t}\n \t});\n \treservevar("eval");\n @@ -4813,28 +5686,49 @@ klass:\n \treservevar("Infinity");\n \treservevar("null");\n \treservevar("this", function (x) {\n -\t\tif (directive["use strict"] && !option.validthis && ((funct["(statement)"] &&\n +\t\tif (state.directive["use strict"] && !state.option.validthis && ((funct["(statement)"] &&\n \t\t\t\tfunct["(name)"].charAt(0) > "Z") || funct["(global)"])) {\n -\t\t\twarning("Possible strict violation.", x);\n +\t\t\twarning("W040", x);\n \t\t}\n \t});\n \treservevar("true");\n \treservevar("undefined");\n +\n \tassignop("=", "assign", 20);\n \tassignop("+=", "assignadd", 20);\n \tassignop("-=", "assignsub", 20);\n \tassignop("*=", "assignmult", 20);\n \tassignop("/=", "assigndiv", 20).nud = function () {\n -\t\terror("A regular expression literal can be confused with \'/=\'.");\n +\t\terror("E014");\n \t};\n \tassignop("%=", "assignmod", 20);\n +\n \tbitwiseassignop("&=", "assignbitand", 20);\n \tbitwiseassignop("|=", "assignbitor", 20);\n \tbitwiseassignop("^=", "assignbitxor", 20);\n \tbitwiseassignop("<<=", "assignshiftleft", 20);\n \tbitwiseassignop(">>=", "assignshiftright", 20);\n \tbitwiseassignop(">>>=", "assignshiftrightunsigned", 20);\n +\tinfix(",", function (left, that) {\n +\t\tvar expr;\n +\t\tthat.exprs = [left];\n +\t\tif (!comma({peek: true})) {\n +\t\t\treturn that;\n +\t\t}\n +\t\twhile (true) {\n +\t\t\tif (!(expr = expression(10))) {\n +\t\t\t\tbreak;\n +\t\t\t}\n +\t\t\tthat.exprs.push(expr);\n +\t\t\tif (state.tokens.next.value !== "," || !comma()) {\n +\t\t\t\tbreak;\n +\t\t\t}\n +\t\t}\n +\t\treturn that;\n +\t}, 10, true);\n +\n \tinfix("?", function (left, that) {\n +\t\tincreaseComplexityCount();\n \t\tthat.left = left;\n \t\tthat.right = expression(10);\n \t\tadvance(":");\n @@ -4842,37 +5736,40 @@ klass:\n \t\treturn that;\n \t}, 30);\n \n -\tinfix("||", "or", 40);\n +\tvar orPrecendence = 40;\n +\tinfix("||", function (left, that) {\n +\t\tincreaseComplexityCount();\n +\t\tthat.left = left;\n +\t\tthat.right = expression(orPrecendence);\n +\t\treturn that;\n +\t}, orPrecendence);\n \tinfix("&&", "and", 50);\n \tbitwise("|", "bitor", 70);\n \tbitwise("^", "bitxor", 80);\n \tbitwise("&", "bitand", 90);\n \trelation("==", function (left, right) {\n -\t\tvar eqnull = option.eqnull && (left.value === "null" || right.value === "null");\n +\t\tvar eqnull = state.option.eqnull && (left.value === "null" || right.value === "null");\n \n -\t\tif (!eqnull && option.eqeqeq)\n -\t\t\twarning("Expected \'{a}\' and instead saw \'{b}\'.", this, "===", "==");\n +\t\tif (!eqnull && state.option.eqeqeq)\n +\t\t\twarning("W116", this, "===", "==");\n \t\telse if (isPoorRelation(left))\n -\t\t\twarning("Use \'{a}\' to compare with \'{b}\'.", this, "===", left.value);\n +\t\t\twarning("W041", this, "===", left.value);\n \t\telse if (isPoorRelation(right))\n -\t\t\twarning("Use \'{a}\' to compare with \'{b}\'.", this, "===", right.value);\n +\t\t\twarning("W041", this, "===", right.value);\n \n \t\treturn this;\n \t});\n \trelation("===");\n \trelation("!=", function (left, right) {\n -\t\tvar eqnull = option.eqnull &&\n +\t\tvar eqnull = state.option.eqnull &&\n \t\t\t\t(left.value === "null" || right.value === "null");\n \n -\t\tif (!eqnull && option.eqeqeq) {\n -\t\t\twarning("Expected \'{a}\' and instead saw \'{b}\'.",\n -\t\t\t\t\tthis, "!==", "!=");\n +\t\tif (!eqnull && state.option.eqeqeq) {\n +\t\t\twarning("W116", this, "!==", "!=");\n \t\t} else if (isPoorRelation(left)) {\n -\t\t\twarning("Use \'{a}\' to compare with \'{b}\'.",\n -\t\t\t\t\tthis, "!==", left.value);\n +\t\t\twarning("W041", this, "!==", left.value);\n \t\t} else if (isPoorRelation(right)) {\n -\t\t\twarning("Use \'{a}\' to compare with \'{b}\'.",\n -\t\t\t\t\tthis, "!==", right.value);\n +\t\t\twarning("W041", this, "!==", right.value);\n \t\t}\n \t\treturn this;\n \t});\n @@ -4891,8 +5788,8 @@ klass:\n \t\tif (left && right && left.id === "(string)" && right.id === "(string)") {\n \t\t\tleft.value += right.value;\n \t\t\tleft.character = right.character;\n -\t\t\tif (!option.scripturl && jx.test(left.value)) {\n -\t\t\t\twarning("JavaScript URL.", left);\n +\t\t\tif (!state.option.scripturl && reg.javascriptURL.test(left.value)) {\n +\t\t\t\twarning("W050", left);\n \t\t\t}\n \t\t\treturn left;\n \t\t}\n @@ -4902,13 +5799,13 @@ klass:\n \t}, 130);\n \tprefix("+", "num");\n \tprefix("+++", function () {\n -\t\twarning("Confusing pluses.");\n +\t\twarning("W007");\n \t\tthis.right = expression(150);\n \t\tthis.arity = "unary";\n \t\treturn this;\n \t});\n \tinfix("+++", function (left) {\n -\t\twarning("Confusing pluses.");\n +\t\twarning("W007");\n \t\tthis.left = left;\n \t\tthis.right = expression(130);\n \t\treturn this;\n @@ -4916,13 +5813,13 @@ klass:\n \tinfix("-", "sub", 130);\n \tprefix("-", "neg");\n \tprefix("---", function () {\n -\t\twarning("Confusing minuses.");\n +\t\twarning("W006");\n \t\tthis.right = expression(150);\n \t\tthis.arity = "unary";\n \t\treturn this;\n \t});\n \tinfix("---", function (left) {\n -\t\twarning("Confusing minuses.");\n +\t\twarning("W006");\n \t\tthis.left = left;\n \t\tthis.right = expression(130);\n \t\treturn this;\n @@ -4933,23 +5830,34 @@ klass:\n \n \tsuffix("++", "postinc");\n \tprefix("++", "preinc");\n -\tsyntax["++"].exps = true;\n +\tstate.syntax["++"].exps = true;\n \n \tsuffix("--", "postdec");\n \tprefix("--", "predec");\n -\tsyntax["--"].exps = true;\n +\tstate.syntax["--"].exps = true;\n \tprefix("delete", function () {\n -\t\tvar p = expression(0);\n +\t\tvar p = expression(10);\n \t\tif (!p || (p.id !== "." && p.id !== "[")) {\n -\t\t\twarning("Variables should not be deleted.");\n +\t\t\twarning("W051");\n \t\t}\n \t\tthis.first = p;\n \t\treturn this;\n \t}).exps = true;\n \n \tprefix("~", function () {\n -\t\tif (option.bitwise) {\n -\t\t\twarning("Unexpected \'{a}\'.", this, "~");\n +\t\tif (state.option.bitwise) {\n +\t\t\twarning("W052", this, "~");\n +\t\t}\n +\t\texpression(150);\n +\t\treturn this;\n +\t});\n +\n +\tprefix("...", function () {\n +\t\tif (!state.option.inESNext()) {\n +\t\t\twarning("W104", this, "spread/rest operator");\n +\t\t}\n +\t\tif (!state.tokens.next.identifier) {\n +\t\t\terror("E030", state.tokens.next, state.tokens.next.value);\n \t\t}\n \t\texpression(150);\n \t\treturn this;\n @@ -4958,11 +5866,17 @@ klass:\n \tprefix("!", function () {\n \t\tthis.right = expression(150);\n \t\tthis.arity = "unary";\n +\n +\t\tif (!this.right) { // \'!\' followed by nothing? Give up.\n +\t\t\tquit("E041", this.line || 0);\n +\t\t}\n +\n \t\tif (bang[this.right.id] === true) {\n -\t\t\twarning("Confusing use of \'{a}\'.", this, "!");\n +\t\t\twarning("W018", this, "!");\n \t\t}\n \t\treturn this;\n \t});\n +\n \tprefix("typeof", "typeof");\n \tprefix("new", function () {\n \t\tvar c = expression(155), i;\n @@ -4975,11 +5889,11 @@ klass:\n \t\t\t\tcase "Boolean":\n \t\t\t\tcase "Math":\n \t\t\t\tcase "JSON":\n -\t\t\t\t\twarning("Do not use {a} as a constructor.", prevtoken, c.value);\n +\t\t\t\t\twarning("W053", state.tokens.prev, c.value);\n \t\t\t\t\tbreak;\n \t\t\t\tcase "Function":\n -\t\t\t\t\tif (!option.evil) {\n -\t\t\t\t\t\twarning("The Function constructor is eval.");\n +\t\t\t\t\tif (!state.option.evil) {\n +\t\t\t\t\t\twarning("W054");\n \t\t\t\t\t}\n \t\t\t\t\tbreak;\n \t\t\t\tcase "Date":\n @@ -4988,102 +5902,113 @@ klass:\n \t\t\t\tdefault:\n \t\t\t\t\tif (c.id !== "function") {\n \t\t\t\t\t\ti = c.value.substr(0, 1);\n -\t\t\t\t\t\tif (option.newcap && (i < "A" || i > "Z") && !is_own(global, c.value)) {\n -\t\t\t\t\t\t\twarning("A constructor name should start with an uppercase letter.",\n -\t\t\t\t\t\t\t\ttoken);\n +\t\t\t\t\t\tif (state.option.newcap && (i < "A" || i > "Z") && !_.has(global, c.value)) {\n +\t\t\t\t\t\t\twarning("W055", state.tokens.curr);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t} else {\n \t\t\t\tif (c.id !== "." && c.id !== "[" && c.id !== "(") {\n -\t\t\t\t\twarning("Bad constructor.", token);\n +\t\t\t\t\twarning("W056", state.tokens.curr);\n \t\t\t\t}\n \t\t\t}\n \t\t} else {\n -\t\t\tif (!option.supernew)\n -\t\t\t\twarning("Weird construction. Delete \'new\'.", this);\n +\t\t\tif (!state.option.supernew)\n +\t\t\t\twarning("W057", this);\n \t\t}\n -\t\tadjacent(token, nexttoken);\n -\t\tif (nexttoken.id !== "(" && !option.supernew) {\n -\t\t\twarning("Missing \'()\' invoking a constructor.",\n -\t\t\t\ttoken, token.value);\n +\t\tadjacent(state.tokens.curr, state.tokens.next);\n +\t\tif (state.tokens.next.id !== "(" && !state.option.supernew) {\n +\t\t\twarning("W058", state.tokens.curr, state.tokens.curr.value);\n \t\t}\n \t\tthis.first = c;\n \t\treturn this;\n \t});\n -\tsyntax["new"].exps = true;\n +\tstate.syntax["new"].exps = true;\n \n \tprefix("void").exps = true;\n \n \tinfix(".", function (left, that) {\n -\t\tadjacent(prevtoken, token);\n +\t\tadjacent(state.tokens.prev, state.tokens.curr);\n \t\tnobreak();\n -\t\tvar m = identifier();\n +\t\tvar m = identifier(false, true);\n +\n \t\tif (typeof m === "string") {\n \t\t\tcountMember(m);\n \t\t}\n +\n \t\tthat.left = left;\n \t\tthat.right = m;\n +\n +\t\tif (m && m === "hasOwnProperty" && state.tokens.next.value === "=") {\n +\t\t\twarning("W001");\n +\t\t}\n +\n \t\tif (left && left.value === "arguments" && (m === "callee" || m === "caller")) {\n -\t\t\tif (option.noarg)\n -\t\t\t\twarning("Avoid arguments.{a}.", left, m);\n -\t\t\telse if (directive["use strict"])\n -\t\t\t\terror("Strict violation.");\n -\t\t} else if (!option.evil && left && left.value === "document" &&\n +\t\t\tif (state.option.noarg)\n +\t\t\t\twarning("W059", left, m);\n +\t\t\telse if (state.directive["use strict"])\n +\t\t\t\terror("E008");\n +\t\t} else if (!state.option.evil && left && left.value === "document" &&\n \t\t\t\t(m === "write" || m === "writeln")) {\n -\t\t\twarning("document.write can be a form of eval.", left);\n +\t\t\twarning("W060", left);\n \t\t}\n -\t\tif (!option.evil && (m === "eval" || m === "execScript")) {\n -\t\t\twarning("eval is evil.");\n +\n +\t\tif (!state.option.evil && (m === "eval" || m === "execScript")) {\n +\t\t\twarning("W061");\n \t\t}\n +\n \t\treturn that;\n \t}, 160, true);\n \n \tinfix("(", function (left, that) {\n -\t\tif (prevtoken.id !== "}" && prevtoken.id !== ")") {\n -\t\t\tnobreak(prevtoken, token);\n +\t\tif (state.tokens.prev.id !== "}" && state.tokens.prev.id !== ")") {\n +\t\t\tnobreak(state.tokens.prev, state.tokens.curr);\n \t\t}\n +\n \t\tnospace();\n -\t\tif (option.immed && !left.immed && left.id === "function") {\n -\t\t\twarning("Wrap an immediate function invocation in parentheses " +\n -\t\t\t\t"to assist the reader in understanding that the expression " +\n -\t\t\t\t"is the result of a function, and not the function itself.");\n +\t\tif (state.option.immed && left && !left.immed && left.id === "function") {\n +\t\t\twarning("W062");\n \t\t}\n -\t\tvar n = 0,\n -\t\t\tp = [];\n +\n +\t\tvar n = 0;\n +\t\tvar p = [];\n +\n \t\tif (left) {\n \t\t\tif (left.type === "(identifier)") {\n \t\t\t\tif (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {\n \t\t\t\t\tif ("Number String Boolean Date Object".indexOf(left.value) === -1) {\n \t\t\t\t\t\tif (left.value === "Math") {\n -\t\t\t\t\t\t\twarning("Math is not a function.", left);\n -\t\t\t\t\t\t} else if (option.newcap) {\n -\t\t\t\t\t\t\twarning("Missing \'new\' prefix when invoking a constructor.", left);\n +\t\t\t\t\t\t\twarning("W063", left);\n +\t\t\t\t\t\t} else if (state.option.newcap) {\n +\t\t\t\t\t\t\twarning("W064", left);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n -\t\tif (nexttoken.id !== ")") {\n +\n +\t\tif (state.tokens.next.id !== ")") {\n \t\t\tfor (;;) {\n \t\t\t\tp[p.length] = expression(10);\n \t\t\t\tn += 1;\n -\t\t\t\tif (nexttoken.id !== ",") {\n +\t\t\t\tif (state.tokens.next.id !== ",") {\n \t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t\tcomma();\n \t\t\t}\n \t\t}\n +\n \t\tadvance(")");\n -\t\tnospace(prevtoken, token);\n +\t\tnospace(state.tokens.prev, state.tokens.curr);\n +\n \t\tif (typeof left === "object") {\n \t\t\tif (left.value === "parseInt" && n === 1) {\n -\t\t\t\twarning("Missing radix parameter.", token);\n +\t\t\t\twarning("W065", state.tokens.curr);\n \t\t\t}\n -\t\t\tif (!option.evil) {\n +\t\t\tif (!state.option.evil) {\n \t\t\t\tif (left.value === "eval" || left.value === "Function" ||\n \t\t\t\t\t\tleft.value === "execScript") {\n -\t\t\t\t\twarning("eval is evil.", left);\n +\t\t\t\t\twarning("W061", left);\n \n \t\t\t\t\tif (p[0] && [0].id === "(string)") {\n \t\t\t\t\t\taddInternalSrc(left, p[0].value);\n @@ -5091,99 +6016,188 @@ klass:\n \t\t\t\t} else if (p[0] && p[0].id === "(string)" &&\n \t\t\t\t\t (left.value === "setTimeout" ||\n \t\t\t\t\t\tleft.value === "setInterval")) {\n -\t\t\t\t\twarning(\n -\t"Implied eval is evil. Pass a function instead of a string.", left);\n +\t\t\t\t\twarning("W066", left);\n \t\t\t\t\taddInternalSrc(left, p[0].value);\n \t\t\t\t} else if (p[0] && p[0].id === "(string)" &&\n \t\t\t\t\t left.value === "." &&\n \t\t\t\t\t left.left.value === "window" &&\n \t\t\t\t\t (left.right === "setTimeout" ||\n \t\t\t\t\t\tleft.right === "setInterval")) {\n -\t\t\t\t\twarning(\n -\t"Implied eval is evil. Pass a function instead of a string.", left);\n +\t\t\t\t\twarning("W066", left);\n \t\t\t\t\taddInternalSrc(left, p[0].value);\n \t\t\t\t}\n \t\t\t}\n \t\t\tif (!left.identifier && left.id !== "." && left.id !== "[" &&\n \t\t\t\t\tleft.id !== "(" && left.id !== "&&" && left.id !== "||" &&\n \t\t\t\t\tleft.id !== "?") {\n -\t\t\t\twarning("Bad invocation.", left);\n +\t\t\t\twarning("W067", left);\n \t\t\t}\n \t\t}\n +\n \t\tthat.left = left;\n \t\treturn that;\n \t}, 155, true).exps = true;\n \n \tprefix("(", function () {\n \t\tnospace();\n -\t\tif (nexttoken.id === "function") {\n -\t\t\tnexttoken.immed = true;\n +\t\tvar bracket, brackets = [];\n +\t\tvar pn, pn1, i = 0;\n +\t\tvar ret;\n +\n +\t\tdo {\n +\t\t\tpn = peek(i);\n +\t\t\ti += 1;\n +\t\t\tpn1 = peek(i);\n +\t\t\ti += 1;\n +\t\t} while (pn.value !== ")" && pn1.value !== "=>" && pn1.value !== ";" && pn1.type !== "(end)");\n +\n +\t\tif (state.tokens.next.id === "function") {\n +\t\t\tstate.tokens.next.immed = true;\n +\t\t}\n +\n +\t\tvar exprs = [];\n +\n +\t\tif (state.tokens.next.id !== ")") {\n +\t\t\tfor (;;) {\n +\t\t\t\tif (pn1.value === "=>" && state.tokens.next.value === "{") {\n +\t\t\t\t\tbracket = state.tokens.next;\n +\t\t\t\t\tbracket.left = destructuringExpression();\n +\t\t\t\t\tbrackets.push(bracket);\n +\t\t\t\t\tfor (var t in bracket.left) {\n +\t\t\t\t\t\texprs.push(bracket.left[t].token);\n +\t\t\t\t\t}\n +\t\t\t\t} else {\n +\t\t\t\t\texprs.push(expression(10));\n +\t\t\t\t}\n +\t\t\t\tif (state.tokens.next.id !== ",") {\n +\t\t\t\t\tbreak;\n +\t\t\t\t}\n +\t\t\t\tcomma();\n +\t\t\t}\n \t\t}\n -\t\tvar v = expression(0);\n +\n \t\tadvance(")", this);\n -\t\tnospace(prevtoken, token);\n -\t\tif (option.immed && v.id === "function") {\n -\t\t\tif (nexttoken.id !== "(" &&\n -\t\t\t (nexttoken.id !== "." || (peek().value !== "call" && peek().value !== "apply"))) {\n -\t\t\t\twarning(\n -"Do not wrap function literals in parens unless they are to be immediately invoked.",\n -\t\t\t\t\t\tthis);\n +\t\tnospace(state.tokens.prev, state.tokens.curr);\n +\t\tif (state.option.immed && exprs[0] && exprs[0].id === "function") {\n +\t\t\tif (state.tokens.next.id !== "(" &&\n +\t\t\t (state.tokens.next.id !== "." || (peek().value !== "call" && peek().value !== "apply"))) {\n +\t\t\t\twarning("W068", this);\n \t\t\t}\n \t\t}\n \n -\t\treturn v;\n +\t\tif (state.tokens.next.value === "=>") {\n +\t\t\treturn exprs;\n +\t\t}\n +\t\tif (!exprs.length) {\n +\t\t\treturn;\n +\t\t}\n +\t\tif (exprs.length > 1) {\n +\t\t\tret = Object.create(state.syntax[","]);\n +\t\t\tret.exprs = exprs;\n +\t\t} else {\n +\t\t\tret = exprs[0];\n +\t\t}\n +\t\tif (ret) {\n +\t\t\tret.paren = true;\n +\t\t}\n +\t\treturn ret;\n \t});\n \n +\tapplication("=>");\n +\n \tinfix("[", function (left, that) {\n -\t\tnobreak(prevtoken, token);\n +\t\tnobreak(state.tokens.prev, state.tokens.curr);\n \t\tnospace();\n -\t\tvar e = expression(0), s;\n +\t\tvar e = expression(10), s;\n \t\tif (e && e.type === "(string)") {\n -\t\t\tif (!option.evil && (e.value === "eval" || e.value === "execScript")) {\n -\t\t\t\twarning("eval is evil.", that);\n +\t\t\tif (!state.option.evil && (e.value === "eval" || e.value === "execScript")) {\n +\t\t\t\twarning("W061", that);\n \t\t\t}\n +\n \t\t\tcountMember(e.value);\n -\t\t\tif (!option.sub && ix.test(e.value)) {\n -\t\t\t\ts = syntax[e.value];\n -\t\t\t\tif (!s || !s.reserved) {\n -\t\t\t\t\twarning("[\'{a}\'] is better written in dot notation.",\n -\t\t\t\t\t\t\tprevtoken, e.value);\n +\t\t\tif (!state.option.sub && reg.identifier.test(e.value)) {\n +\t\t\t\ts = state.syntax[e.value];\n +\t\t\t\tif (!s || !isReserved(s)) {\n +\t\t\t\t\twarning("W069", state.tokens.prev, e.value);\n \t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tadvance("]", that);\n -\t\tnospace(prevtoken, token);\n +\n +\t\tif (e && e.value === "hasOwnProperty" && state.tokens.next.value === "=") {\n +\t\t\twarning("W001");\n +\t\t}\n +\n +\t\tnospace(state.tokens.prev, state.tokens.curr);\n \t\tthat.left = left;\n \t\tthat.right = e;\n \t\treturn that;\n \t}, 160, true);\n \n +\tfunction comprehensiveArrayExpression() {\n +\t\tvar res = {};\n +\t\tres.exps = true;\n +\t\tfunct["(comparray)"].stack();\n +\n +\t\tres.right = expression(10);\n +\t\tadvance("for");\n +\t\tif (state.tokens.next.value === "each") {\n +\t\t\tadvance("each");\n +\t\t\tif (!state.option.inMoz(true)) {\n +\t\t\t\twarning("W118", state.tokens.curr, "for each");\n +\t\t\t}\n +\t\t}\n +\t\tadvance("(");\n +\t\tfunct["(comparray)"].setState("define");\n +\t\tres.left = expression(10);\n +\t\tadvance(")");\n +\t\tif (state.tokens.next.value === "if") {\n +\t\t\tadvance("if");\n +\t\t\tadvance("(");\n +\t\t\tfunct["(comparray)"].setState("filter");\n +\t\t\tres.filter = expression(10);\n +\t\t\tadvance(")");\n +\t\t}\n +\t\tadvance("]");\n +\t\tfunct["(comparray)"].unstack();\n +\t\treturn res;\n +\t}\n +\n \tprefix("[", function () {\n -\t\tvar b = token.line !== nexttoken.line;\n +\t\tvar blocktype = lookupBlockType(true);\n +\t\tif (blocktype.isCompArray) {\n +\t\t\tif (!state.option.inMoz(true)) {\n +\t\t\t\twarning("W118", state.tokens.curr, "array comprehension");\n +\t\t\t}\n +\t\t\treturn comprehensiveArrayExpression();\n +\t\t} else if (blocktype.isDestAssign && !state.option.inESNext()) {\n +\t\t\twarning("W104", state.tokens.curr, "destructuring assignment");\n +\t\t}\n +\t\tvar b = state.tokens.curr.line !== state.tokens.next.line;\n \t\tthis.first = [];\n \t\tif (b) {\n -\t\t\tindent += option.indent;\n -\t\t\tif (nexttoken.from === indent + option.indent) {\n -\t\t\t\tindent += option.indent;\n +\t\t\tindent += state.option.indent;\n +\t\t\tif (state.tokens.next.from === indent + state.option.indent) {\n +\t\t\t\tindent += state.option.indent;\n \t\t\t}\n \t\t}\n -\t\twhile (nexttoken.id !== "(end)") {\n -\t\t\twhile (nexttoken.id === ",") {\n -\t\t\t\tif (!option.es5)\n -\t\t\t\t\twarning("Extra comma.");\n +\t\twhile (state.tokens.next.id !== "(end)") {\n +\t\t\twhile (state.tokens.next.id === ",") {\n +\t\t\t\tif (!state.option.inES5())\n +\t\t\t\t\twarning("W070");\n \t\t\t\tadvance(",");\n \t\t\t}\n -\t\t\tif (nexttoken.id === "]") {\n +\t\t\tif (state.tokens.next.id === "]") {\n \t\t\t\tbreak;\n \t\t\t}\n -\t\t\tif (b && token.line !== nexttoken.line) {\n +\t\t\tif (b && state.tokens.curr.line !== state.tokens.next.line) {\n \t\t\t\tindentation();\n \t\t\t}\n \t\t\tthis.first.push(expression(10));\n -\t\t\tif (nexttoken.id === ",") {\n -\t\t\t\tcomma();\n -\t\t\t\tif (nexttoken.id === "]" && !option.es5) {\n -\t\t\t\t\twarning("Extra comma.", token);\n +\t\t\tif (state.tokens.next.id === ",") {\n +\t\t\t\tcomma({ allowTrailing: true });\n +\t\t\t\tif (state.tokens.next.id === "]" && !state.option.inES5(true)) {\n +\t\t\t\t\twarning("W070", state.tokens.curr);\n \t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t} else {\n @@ -5191,7 +6205,7 @@ klass:\n \t\t\t}\n \t\t}\n \t\tif (b) {\n -\t\t\tindent -= option.indent;\n +\t\t\tindent -= state.option.indent;\n \t\t\tindentation();\n \t\t}\n \t\tadvance("]", this);\n @@ -5200,71 +6214,153 @@ klass:\n \n \n \tfunction property_name() {\n -\t\tvar id = optionalidentifier(true);\n +\t\tvar id = optionalidentifier(false, true);\n +\n \t\tif (!id) {\n -\t\t\tif (nexttoken.id === "(string)") {\n -\t\t\t\tid = nexttoken.value;\n +\t\t\tif (state.tokens.next.id === "(string)") {\n +\t\t\t\tid = state.tokens.next.value;\n \t\t\t\tadvance();\n -\t\t\t} else if (nexttoken.id === "(number)") {\n -\t\t\t\tid = nexttoken.value.toString();\n +\t\t\t} else if (state.tokens.next.id === "(number)") {\n +\t\t\t\tid = state.tokens.next.value.toString();\n \t\t\t\tadvance();\n \t\t\t}\n \t\t}\n +\n +\t\tif (id === "hasOwnProperty") {\n +\t\t\twarning("W001");\n +\t\t}\n +\n \t\treturn id;\n \t}\n \n \n -\tfunction functionparams() {\n -\t\tvar next = nexttoken;\n +\tfunction functionparams(parsed) {\n +\t\tvar curr, next;\n \t\tvar params = [];\n \t\tvar ident;\n +\t\tvar tokens = [];\n +\t\tvar t;\n +\t\tvar pastDefault = false;\n +\n +\t\tif (parsed) {\n +\t\t\tif (parsed instanceof Array) {\n +\t\t\t\tfor (var i in parsed) {\n +\t\t\t\t\tcurr = parsed[i];\n +\t\t\t\t\tif (_.contains(["{", "["], curr.id)) {\n +\t\t\t\t\t\tfor (t in curr.left) {\n +\t\t\t\t\t\t\tt = tokens[t];\n +\t\t\t\t\t\t\tif (t.id) {\n +\t\t\t\t\t\t\t\tparams.push(t.id);\n +\t\t\t\t\t\t\t\taddlabel(t.id, "unused", t.token);\n +\t\t\t\t\t\t\t}\n +\t\t\t\t\t\t}\n +\t\t\t\t\t} else if (curr.value === "...") {\n +\t\t\t\t\t\tif (!state.option.inESNext()) {\n +\t\t\t\t\t\t\twarning("W104", curr, "spread/rest operator");\n +\t\t\t\t\t\t}\n +\t\t\t\t\t\tcontinue;\n +\t\t\t\t\t} else {\n +\t\t\t\t\t\taddlabel(curr.value, "unused", curr);\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\t\t\t\treturn params;\n +\t\t\t} else {\n +\t\t\t\tif (parsed.identifier === true) {\n +\t\t\t\t\taddlabel(parsed.value, "unused", parsed);\n +\t\t\t\t\treturn [parsed];\n +\t\t\t\t}\n +\t\t\t}\n +\t\t}\n +\n +\t\tnext = state.tokens.next;\n \n \t\tadvance("(");\n \t\tnospace();\n \n -\t\tif (nexttoken.id === ")") {\n +\t\tif (state.tokens.next.id === ")") {\n \t\t\tadvance(")");\n \t\t\treturn;\n \t\t}\n \n \t\tfor (;;) {\n -\t\t\tident = identifier(true);\n -\t\t\tparams.push(ident);\n -\t\t\taddlabel(ident, "unused", token);\n -\t\t\tif (nexttoken.id === ",") {\n +\t\t\tif (_.contains(["{", "["], state.tokens.next.id)) {\n +\t\t\t\ttokens = destructuringExpression();\n +\t\t\t\tfor (t in tokens) {\n +\t\t\t\t\tt = tokens[t];\n +\t\t\t\t\tif (t.id) {\n +\t\t\t\t\t\tparams.push(t.id);\n +\t\t\t\t\t\taddlabel(t.id, "unused", t.token);\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\t\t\t} else if (state.tokens.next.value === "...") {\n +\t\t\t\tif (!state.option.inESNext()) {\n +\t\t\t\t\twarning("W104", state.tokens.next, "spread/rest operator");\n +\t\t\t\t}\n +\t\t\t\tadvance("...");\n +\t\t\t\tnospace();\n +\t\t\t\tident = identifier(true);\n +\t\t\t\tparams.push(ident);\n +\t\t\t\taddlabel(ident, "unused", state.tokens.curr);\n +\t\t\t} else {\n +\t\t\t\tident = identifier(true);\n +\t\t\t\tparams.push(ident);\n +\t\t\t\taddlabel(ident, "unused", state.tokens.curr);\n +\t\t\t}\n +\t\t\tif (pastDefault) {\n +\t\t\t\tif (state.tokens.next.id !== "=") {\n +\t\t\t\t\terror("E051", state.tokens.current);\n +\t\t\t\t}\n +\t\t\t}\n +\t\t\tif (state.tokens.next.id === "=") {\n +\t\t\t\tif (!state.option.inESNext()) {\n +\t\t\t\t\twarning("W119", state.tokens.next, "default parameters");\n +\t\t\t\t}\n +\t\t\t\tadvance("=");\n +\t\t\t\tpastDefault = true;\n +\t\t\t\texpression(10);\n +\t\t\t}\n +\t\t\tif (state.tokens.next.id === ",") {\n \t\t\t\tcomma();\n \t\t\t} else {\n \t\t\t\tadvance(")", next);\n -\t\t\t\tnospace(prevtoken, token);\n +\t\t\t\tnospace(state.tokens.prev, state.tokens.curr);\n \t\t\t\treturn params;\n \t\t\t}\n \t\t}\n \t}\n \n \n -\tfunction doFunction(name, statement) {\n +\tfunction doFunction(name, statement, generator, fatarrowparams) {\n \t\tvar f;\n -\t\tvar oldOption = option;\n +\t\tvar oldOption = state.option;\n +\t\tvar oldIgnored = state.ignored;\n \t\tvar oldScope = scope;\n \n -\t\toption = Object.create(option);\n +\t\tstate.option = Object.create(state.option);\n +\t\tstate.ignored = Object.create(state.ignored);\n \t\tscope = Object.create(scope);\n \n \t\tfunct = {\n -\t\t\t"(name)"\t : name || "\\"" + anonname + "\\"",\n -\t\t\t"(line)"\t : nexttoken.line,\n -\t\t\t"(character)": nexttoken.character,\n -\t\t\t"(context)" : funct,\n -\t\t\t"(breakage)" : 0,\n -\t\t\t"(loopage)" : 0,\n -\t\t\t"(metrics)" : createMetrics(nexttoken),\n -\t\t\t"(scope)"\t : scope,\n -\t\t\t"(statement)": statement,\n -\t\t\t"(tokens)"\t : {}\n +\t\t\t"(name)" : name || "\\"" + anonname + "\\"",\n +\t\t\t"(line)" : state.tokens.next.line,\n +\t\t\t"(character)" : state.tokens.next.character,\n +\t\t\t"(context)" : funct,\n +\t\t\t"(breakage)" : 0,\n +\t\t\t"(loopage)" : 0,\n +\t\t\t"(metrics)" : createMetrics(state.tokens.next),\n +\t\t\t"(scope)" : scope,\n +\t\t\t"(statement)" : statement,\n +\t\t\t"(tokens)" : {},\n +\t\t\t"(blockscope)": funct["(blockscope)"],\n +\t\t\t"(comparray)" : funct["(comparray)"]\n \t\t};\n \n +\t\tif (generator) {\n +\t\t\tfunct["(generator)"] = true;\n +\t\t}\n +\n \t\tf = funct;\n -\t\ttoken.funct = funct;\n +\t\tstate.tokens.curr.funct = funct;\n \n \t\tfunctions.push(funct);\n \n @@ -5272,18 +6368,25 @@ klass:\n \t\t\taddlabel(name, "function");\n \t\t}\n \n -\t\tfunct["(params)"] = functionparams();\n +\t\tfunct["(params)"] = functionparams(fatarrowparams);\n +\n \t\tfunct["(metrics)"].verifyMaxParametersPerFunction(funct["(params)"]);\n \n -\t\tblock(false, false, true);\n +\t\tblock(false, true, true, fatarrowparams ? true:false);\n +\n +\t\tif (generator && funct["(generator)"] !== "yielded") {\n +\t\t\terror("E047", state.tokens.curr);\n +\t\t}\n \n \t\tfunct["(metrics)"].verifyMaxStatementsPerFunction();\n \t\tfunct["(metrics)"].verifyMaxComplexityPerFunction();\n +\t\tfunct["(unusedOption)"] = state.option.unused;\n \n \t\tscope = oldScope;\n -\t\toption = oldOption;\n -\t\tfunct["(last)"] = token.line;\n -\t\tfunct["(lastcharacter)"] = token.character;\n +\t\tstate.option = oldOption;\n +\t\tstate.ignored = oldIgnored;\n +\t\tfunct["(last)"] = state.tokens.curr.line;\n +\t\tfunct["(lastcharacter)"] = state.tokens.curr.character;\n \t\tfunct = funct["(context)"];\n \n \t\treturn f;\n @@ -5295,37 +6398,33 @@ klass:\n \t\t\tnestedBlockDepth: -1,\n \t\t\tComplexityCount: 1,\n \t\t\tverifyMaxStatementsPerFunction: function () {\n -\t\t\t\tif (option.maxstatements &&\n -\t\t\t\t\tthis.statementCount > option.maxstatements) {\n -\t\t\t\t\tvar message = "Too many statements per function (" + this.statementCount + ").";\n -\t\t\t\t\twarning(message, functionStartToken);\n +\t\t\t\tif (state.option.maxstatements &&\n +\t\t\t\t\tthis.statementCount > state.option.maxstatements) {\n +\t\t\t\t\twarning("W071", functionStartToken, this.statementCount);\n \t\t\t\t}\n \t\t\t},\n \n \t\t\tverifyMaxParametersPerFunction: function (params) {\n \t\t\t\tparams = params || [];\n \n -\t\t\t\tif (option.maxparams && params.length > option.maxparams) {\n -\t\t\t\t\tvar message = "Too many parameters per function (" + params.length + ").";\n -\t\t\t\t\twarning(message, functionStartToken);\n +\t\t\t\tif (state.option.maxparams && params.length > state.option.maxparams) {\n +\t\t\t\t\twarning("W072", functionStartToken, params.length);\n \t\t\t\t}\n \t\t\t},\n \n \t\t\tverifyMaxNestedBlockDepthPerFunction: function () {\n -\t\t\t\tif (option.maxdepth &&\n +\t\t\t\tif (state.option.maxdepth &&\n \t\t\t\t\tthis.nestedBlockDepth > 0 &&\n -\t\t\t\t\tthis.nestedBlockDepth === option.maxdepth + 1) {\n -\t\t\t\t\tvar message = "Blocks are nested too deeply (" + this.nestedBlockDepth + ").";\n -\t\t\t\t\twarning(message);\n +\t\t\t\t\tthis.nestedBlockDepth === state.option.maxdepth + 1) {\n +\t\t\t\t\twarning("W073", null, this.nestedBlockDepth);\n \t\t\t\t}\n \t\t\t},\n \n \t\t\tverifyMaxComplexityPerFunction: function () {\n -\t\t\t\tvar max = option.maxcomplexity;\n +\t\t\t\tvar max = state.option.maxcomplexity;\n \t\t\t\tvar cc = this.ComplexityCount;\n \t\t\t\tif (max && cc > max) {\n -\t\t\t\t\tvar message = "Cyclomatic complexity is too high per function (" + cc + ").";\n -\t\t\t\t\twarning(message, functionStartToken);\n +\t\t\t\t\twarning("W074", functionStartToken, cc);\n \t\t\t\t}\n \t\t\t}\n \t\t};\n @@ -5335,300 +6434,597 @@ klass:\n \t\tfunct["(metrics)"].ComplexityCount += 1;\n \t}\n \n +\tfunction checkCondAssignment(expr) {\n +\t\tvar id, paren;\n +\t\tif (expr) {\n +\t\t\tid = expr.id;\n +\t\t\tparen = expr.paren;\n +\t\t\tif (id === "," && (expr = expr.exprs[expr.exprs.length - 1])) {\n +\t\t\t\tid = expr.id;\n +\t\t\t\tparen = paren || expr.paren;\n +\t\t\t}\n +\t\t}\n +\t\tswitch (id) {\n +\t\tcase "=":\n +\t\tcase "+=":\n +\t\tcase "-=":\n +\t\tcase "*=":\n +\t\tcase "%=":\n +\t\tcase "&=":\n +\t\tcase "|=":\n +\t\tcase "^=":\n +\t\tcase "/=":\n +\t\t\tif (!paren && !state.option.boss) {\n +\t\t\t\twarning("W084");\n +\t\t\t}\n +\t\t}\n +\t}\n +\n \n \t(function (x) {\n -\t\tx.nud = function () {\n -\t\t\tvar b, f, i, p, t;\n +\t\tx.nud = function (isclassdef) {\n +\t\t\tvar b, f, i, p, t, g;\n \t\t\tvar props = {}; // All properties, including accessors\n +\t\t\tvar tag = "";\n \n -\t\t\tfunction saveProperty(name, token) {\n -\t\t\t\tif (props[name] && is_own(props, name))\n -\t\t\t\t\twarning("Duplicate member \'{a}\'.", nexttoken, i);\n +\t\t\tfunction saveProperty(name, tkn) {\n +\t\t\t\tif (props[name] && _.has(props, name))\n +\t\t\t\t\twarning("W075", state.tokens.next, i);\n \t\t\t\telse\n \t\t\t\t\tprops[name] = {};\n \n \t\t\t\tprops[name].basic = true;\n -\t\t\t\tprops[name].basicToken = token;\n +\t\t\t\tprops[name].basictkn = tkn;\n \t\t\t}\n \n -\t\t\tfunction saveSetter(name, token) {\n -\t\t\t\tif (props[name] && is_own(props, name)) {\n +\t\t\tfunction saveSetter(name, tkn) {\n +\t\t\t\tif (props[name] && _.has(props, name)) {\n \t\t\t\t\tif (props[name].basic || props[name].setter)\n -\t\t\t\t\t\twarning("Duplicate member \'{a}\'.", nexttoken, i);\n +\t\t\t\t\t\twarning("W075", state.tokens.next, i);\n \t\t\t\t} else {\n \t\t\t\t\tprops[name] = {};\n \t\t\t\t}\n \n \t\t\t\tprops[name].setter = true;\n -\t\t\t\tprops[name].setterToken = token;\n +\t\t\t\tprops[name].setterToken = tkn;\n \t\t\t}\n \n \t\t\tfunction saveGetter(name) {\n -\t\t\t\tif (props[name] && is_own(props, name)) {\n +\t\t\t\tif (props[name] && _.has(props, name)) {\n \t\t\t\t\tif (props[name].basic || props[name].getter)\n -\t\t\t\t\t\twarning("Duplicate member \'{a}\'.", nexttoken, i);\n +\t\t\t\t\t\twarning("W075", state.tokens.next, i);\n \t\t\t\t} else {\n \t\t\t\t\tprops[name] = {};\n \t\t\t\t}\n \n \t\t\t\tprops[name].getter = true;\n -\t\t\t\tprops[name].getterToken = token;\n +\t\t\t\tprops[name].getterToken = state.tokens.curr;\n \t\t\t}\n \n -\t\t\tb = token.line !== nexttoken.line;\n +\t\t\tb = state.tokens.curr.line !== state.tokens.next.line;\n \t\t\tif (b) {\n -\t\t\t\tindent += option.indent;\n -\t\t\t\tif (nexttoken.from === indent + option.indent) {\n -\t\t\t\t\tindent += option.indent;\n +\t\t\t\tindent += state.option.indent;\n +\t\t\t\tif (state.tokens.next.from === indent + state.option.indent) {\n +\t\t\t\t\tindent += state.option.indent;\n \t\t\t\t}\n \t\t\t}\n +\n \t\t\tfor (;;) {\n -\t\t\t\tif (nexttoken.id === "}") {\n +\t\t\t\tif (state.tokens.next.id === "}") {\n \t\t\t\t\tbreak;\n \t\t\t\t}\n +\n \t\t\t\tif (b) {\n \t\t\t\t\tindentation();\n \t\t\t\t}\n -\t\t\t\tif (nexttoken.value === "get" && peek().id !== ":") {\n +\n +\t\t\t\tif (isclassdef && state.tokens.next.value === "static") {\n +\t\t\t\t\tadvance("static");\n +\t\t\t\t\ttag = "static ";\n +\t\t\t\t}\n +\n +\t\t\t\tif (state.tokens.next.value === "get" && peek().id !== ":") {\n \t\t\t\t\tadvance("get");\n -\t\t\t\t\tif (!option.es5) {\n -\t\t\t\t\t\terror("get/set are ES5 features.");\n +\n +\t\t\t\t\tif (!state.option.inES5(!isclassdef)) {\n +\t\t\t\t\t\terror("E034");\n \t\t\t\t\t}\n +\n \t\t\t\t\ti = property_name();\n \t\t\t\t\tif (!i) {\n -\t\t\t\t\t\terror("Missing property name.");\n +\t\t\t\t\t\terror("E035");\n \t\t\t\t\t}\n -\t\t\t\t\tsaveGetter(i);\n -\t\t\t\t\tt = nexttoken;\n -\t\t\t\t\tadjacent(token, nexttoken);\n +\t\t\t\t\tif (isclassdef && i === "constructor") {\n +\t\t\t\t\t\terror("E049", state.tokens.next, "class getter method", i);\n +\t\t\t\t\t}\n +\n +\t\t\t\t\tsaveGetter(tag + i);\n +\t\t\t\t\tt = state.tokens.next;\n +\t\t\t\t\tadjacent(state.tokens.curr, state.tokens.next);\n \t\t\t\t\tf = doFunction();\n \t\t\t\t\tp = f["(params)"];\n +\n \t\t\t\t\tif (p) {\n -\t\t\t\t\t\twarning("Unexpected parameter \'{a}\' in get {b} function.", t, p[0], i);\n +\t\t\t\t\t\twarning("W076", t, p[0], i);\n \t\t\t\t\t}\n -\t\t\t\t\tadjacent(token, nexttoken);\n -\t\t\t\t} else if (nexttoken.value === "set" && peek().id !== ":") {\n +\n +\t\t\t\t\tadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\t\t} else if (state.tokens.next.value === "set" && peek().id !== ":") {\n \t\t\t\t\tadvance("set");\n -\t\t\t\t\tif (!option.es5) {\n -\t\t\t\t\t\terror("get/set are ES5 features.");\n +\n +\t\t\t\t\tif (!state.option.inES5(!isclassdef)) {\n +\t\t\t\t\t\terror("E034");\n \t\t\t\t\t}\n +\n \t\t\t\t\ti = property_name();\n \t\t\t\t\tif (!i) {\n -\t\t\t\t\t\terror("Missing property name.");\n +\t\t\t\t\t\terror("E035");\n \t\t\t\t\t}\n -\t\t\t\t\tsaveSetter(i, nexttoken);\n -\t\t\t\t\tt = nexttoken;\n -\t\t\t\t\tadjacent(token, nexttoken);\n +\t\t\t\t\tif (isclassdef && i === "constructor") {\n +\t\t\t\t\t\terror("E049", state.tokens.next, "class setter method", i);\n +\t\t\t\t\t}\n +\n +\t\t\t\t\tsaveSetter(tag + i, state.tokens.next);\n +\t\t\t\t\tt = state.tokens.next;\n +\t\t\t\t\tadjacent(state.tokens.curr, state.tokens.next);\n \t\t\t\t\tf = doFunction();\n \t\t\t\t\tp = f["(params)"];\n +\n \t\t\t\t\tif (!p || p.length !== 1) {\n -\t\t\t\t\t\twarning("Expected a single parameter in set {a} function.", t, i);\n +\t\t\t\t\t\twarning("W077", t, i);\n \t\t\t\t\t}\n \t\t\t\t} else {\n +\t\t\t\t\tg = false;\n +\t\t\t\t\tif (state.tokens.next.value === "*" && state.tokens.next.type === "(punctuator)") {\n +\t\t\t\t\t\tif (!state.option.inESNext()) {\n +\t\t\t\t\t\t\twarning("W104", state.tokens.next, "generator functions");\n +\t\t\t\t\t\t}\n +\t\t\t\t\t\tadvance("*");\n +\t\t\t\t\t\tg = true;\n +\t\t\t\t\t}\n \t\t\t\t\ti = property_name();\n -\t\t\t\t\tsaveProperty(i, nexttoken);\n +\t\t\t\t\tsaveProperty(tag + i, state.tokens.next);\n +\n \t\t\t\t\tif (typeof i !== "string") {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n -\t\t\t\t\tadvance(":");\n -\t\t\t\t\tnonadjacent(token, nexttoken);\n -\t\t\t\t\texpression(10);\n +\n +\t\t\t\t\tif (state.tokens.next.value === "(") {\n +\t\t\t\t\t\tif (!state.option.inESNext()) {\n +\t\t\t\t\t\t\twarning("W104", state.tokens.curr, "concise methods");\n +\t\t\t\t\t\t}\n +\t\t\t\t\t\tdoFunction(i, undefined, g);\n +\t\t\t\t\t} else if (!isclassdef) {\n +\t\t\t\t\t\tadvance(":");\n +\t\t\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\t\t\t\texpression(10);\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\t\t\t\tif (isclassdef && i === "prototype") {\n +\t\t\t\t\terror("E049", state.tokens.next, "class method", i);\n \t\t\t\t}\n \n \t\t\t\tcountMember(i);\n -\t\t\t\tif (nexttoken.id === ",") {\n -\t\t\t\t\tcomma();\n -\t\t\t\t\tif (nexttoken.id === ",") {\n -\t\t\t\t\t\twarning("Extra comma.", token);\n -\t\t\t\t\t} else if (nexttoken.id === "}" && !option.es5) {\n -\t\t\t\t\t\twarning("Extra comma.", token);\n +\t\t\t\tif (isclassdef) {\n +\t\t\t\t\ttag = "";\n +\t\t\t\t\tcontinue;\n +\t\t\t\t}\n +\t\t\t\tif (state.tokens.next.id === ",") {\n +\t\t\t\t\tcomma({ allowTrailing: true, property: true });\n +\t\t\t\t\tif (state.tokens.next.id === ",") {\n +\t\t\t\t\t\twarning("W070", state.tokens.curr);\n +\t\t\t\t\t} else if (state.tokens.next.id === "}" && !state.option.inES5(true)) {\n +\t\t\t\t\t\twarning("W070", state.tokens.curr);\n \t\t\t\t\t}\n \t\t\t\t} else {\n \t\t\t\t\tbreak;\n \t\t\t\t}\n \t\t\t}\n \t\t\tif (b) {\n -\t\t\t\tindent -= option.indent;\n +\t\t\t\tindent -= state.option.indent;\n \t\t\t\tindentation();\n \t\t\t}\n \t\t\tadvance("}", this);\n -\t\t\tif (option.es5) {\n +\t\t\tif (state.option.inES5()) {\n \t\t\t\tfor (var name in props) {\n -\t\t\t\t\tif (is_own(props, name) && props[name].setter && !props[name].getter) {\n -\t\t\t\t\t\twarning("Setter is defined without getter.", props[name].setterToken);\n +\t\t\t\t\tif (_.has(props, name) && props[name].setter && !props[name].getter) {\n +\t\t\t\t\t\twarning("W078", props[name].setterToken);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t\treturn this;\n \t\t};\n \t\tx.fud = function () {\n -\t\t\terror("Expected to see a statement and instead saw a block.", token);\n +\t\t\terror("E036", state.tokens.curr);\n \t\t};\n \t}(delim("{")));\n \n -\tuseESNextSyntax = function () {\n -\t\tvar conststatement = stmt("const", function (prefix) {\n -\t\t\tvar id, name, value;\n -\n -\t\t\tthis.first = [];\n -\t\t\tfor (;;) {\n -\t\t\t\tnonadjacent(token, nexttoken);\n -\t\t\t\tid = identifier();\n -\t\t\t\tif (funct[id] === "const") {\n -\t\t\t\t\twarning("const \'" + id + "\' has already been declared");\n -\t\t\t\t}\n -\t\t\t\tif (funct["(global)"] && predefined[id] === false) {\n -\t\t\t\t\twarning("Redefinition of \'{a}\'.", token, id);\n -\t\t\t\t}\n -\t\t\t\taddlabel(id, "const");\n -\t\t\t\tif (prefix) {\n -\t\t\t\t\tbreak;\n -\t\t\t\t}\n -\t\t\t\tname = token;\n -\t\t\t\tthis.first.push(token);\n -\n -\t\t\t\tif (nexttoken.id !== "=") {\n -\t\t\t\t\twarning("const " +\n -\t\t\t\t\t "\'{a}\' is initialized to \'undefined\'.", token, id);\n -\t\t\t\t}\n -\n -\t\t\t\tif (nexttoken.id === "=") {\n -\t\t\t\t\tnonadjacent(token, nexttoken);\n -\t\t\t\t\tadvance("=");\n -\t\t\t\t\tnonadjacent(token, nexttoken);\n -\t\t\t\t\tif (nexttoken.id === "undefined") {\n -\t\t\t\t\t\twarning("It is not necessary to initialize " +\n -\t\t\t\t\t\t "\'{a}\' to \'undefined\'.", token, id);\n -\t\t\t\t\t}\n -\t\t\t\t\tif (peek(0).id === "=" && nexttoken.identifier) {\n -\t\t\t\t\t\terror("Constant {a} was not declared correctly.",\n -\t\t\t\t\t\t\t\tnexttoken, nexttoken.value);\n -\t\t\t\t\t}\n -\t\t\t\t\tvalue = expression(0);\n -\t\t\t\t\tname.first = value;\n -\t\t\t\t}\n -\n -\t\t\t\tif (nexttoken.id !== ",") {\n -\t\t\t\t\tbreak;\n +\tfunction destructuringExpression() {\n +\t\tvar id, ids;\n +\t\tvar identifiers = [];\n +\t\tif (!state.option.inESNext()) {\n +\t\t\twarning("W104", state.tokens.curr, "destructuring expression");\n +\t\t}\n +\t\tvar nextInnerDE = function () {\n +\t\t\tvar ident;\n +\t\t\tif (_.contains(["[", "{"], state.tokens.next.value)) {\n +\t\t\t\tids = destructuringExpression();\n +\t\t\t\tfor (var id in ids) {\n +\t\t\t\t\tid = ids[id];\n +\t\t\t\t\tidentifiers.push({ id: id.id, token: id.token });\n +\t\t\t\t}\n +\t\t\t} else if (state.tokens.next.value === ",") {\n +\t\t\t\tidentifiers.push({ id: null, token: state.tokens.curr });\n +\t\t\t} else {\n +\t\t\t\tident = identifier();\n +\t\t\t\tif (ident)\n +\t\t\t\t\tidentifiers.push({ id: ident, token: state.tokens.curr });\n +\t\t\t}\n +\t\t};\n +\t\tif (state.tokens.next.value === "[") {\n +\t\t\tadvance("[");\n +\t\t\tnextInnerDE();\n +\t\t\twhile (state.tokens.next.value !== "]") {\n +\t\t\t\tadvance(",");\n +\t\t\t\tnextInnerDE();\n +\t\t\t}\n +\t\t\tadvance("]");\n +\t\t} else if (state.tokens.next.value === "{") {\n +\t\t\tadvance("{");\n +\t\t\tid = identifier();\n +\t\t\tif (state.tokens.next.value === ":") {\n +\t\t\t\tadvance(":");\n +\t\t\t\tnextInnerDE();\n +\t\t\t} else {\n +\t\t\t\tidentifiers.push({ id: id, token: state.tokens.curr });\n +\t\t\t}\n +\t\t\twhile (state.tokens.next.value !== "}") {\n +\t\t\t\tadvance(",");\n +\t\t\t\tid = identifier();\n +\t\t\t\tif (state.tokens.next.value === ":") {\n +\t\t\t\t\tadvance(":");\n +\t\t\t\t\tnextInnerDE();\n +\t\t\t\t} else {\n +\t\t\t\t\tidentifiers.push({ id: id, token: state.tokens.curr });\n +\t\t\t\t}\n +\t\t\t}\n +\t\t\tadvance("}");\n +\t\t}\n +\t\treturn identifiers;\n +\t}\n +\tfunction destructuringExpressionMatch(tokens, value) {\n +\t\tif (value.first) {\n +\t\t\t_.zip(tokens, value.first).forEach(function (val) {\n +\t\t\t\tvar token = val[0];\n +\t\t\t\tvar value = val[1];\n +\t\t\t\tif (token && value) {\n +\t\t\t\t\ttoken.first = value;\n +\t\t\t\t} else if (token && token.first && !value) {\n +\t\t\t\t\twarning("W080", token.first, token.first.value);\n +\t\t\t\t} /* else {\n +\t\t\t\t\tXXX value is discarded: wouldn\'t it need a warning ?\n +\t\t\t\t} */\n +\t\t\t});\n +\t\t}\n +\t}\n +\n +\tvar conststatement = stmt("const", function (prefix) {\n +\t\tvar tokens, value;\n +\t\tvar lone;\n +\n +\t\tif (!state.option.inESNext()) {\n +\t\t\twarning("W104", state.tokens.curr, "const");\n +\t\t}\n +\n +\t\tthis.first = [];\n +\t\tfor (;;) {\n +\t\t\tvar names = [];\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\tif (_.contains(["{", "["], state.tokens.next.value)) {\n +\t\t\t\ttokens = destructuringExpression();\n +\t\t\t\tlone = false;\n +\t\t\t} else {\n +\t\t\t\ttokens = [ { id: identifier(), token: state.tokens.curr } ];\n +\t\t\t\tlone = true;\n +\t\t\t}\n +\t\t\tfor (var t in tokens) {\n +\t\t\t\tt = tokens[t];\n +\t\t\t\tif (funct[t.id] === "const") {\n +\t\t\t\t\twarning("E011", null, t.id);\n +\t\t\t\t}\n +\t\t\t\tif (funct["(global)"] && predefined[t.id] === false) {\n +\t\t\t\t\twarning("W079", t.token, t.id);\n +\t\t\t\t}\n +\t\t\t\tif (t.id) {\n +\t\t\t\t\taddlabel(t.id, "const");\n +\t\t\t\t\tnames.push(t.token);\n +\t\t\t\t}\n +\t\t\t}\n +\t\t\tif (prefix) {\n +\t\t\t\tbreak;\n +\t\t\t}\n +\n +\t\t\tthis.first = this.first.concat(names);\n +\n +\t\t\tif (state.tokens.next.id !== "=") {\n +\t\t\t\twarning("E012", state.tokens.curr, state.tokens.curr.value);\n +\t\t\t}\n +\n +\t\t\tif (state.tokens.next.id === "=") {\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\t\tadvance("=");\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\t\tif (state.tokens.next.id === "undefined") {\n +\t\t\t\t\twarning("W080", state.tokens.prev, state.tokens.prev.value);\n +\t\t\t\t}\n +\t\t\t\tif (peek(0).id === "=" && state.tokens.next.identifier) {\n +\t\t\t\t\twarning("W120", state.tokens.next, state.tokens.next.value);\n +\t\t\t\t}\n +\t\t\t\tvalue = expression(10);\n +\t\t\t\tif (lone) {\n +\t\t\t\t\ttokens[0].first = value;\n +\t\t\t\t} else {\n +\t\t\t\t\tdestructuringExpressionMatch(names, value);\n \t\t\t\t}\n -\t\t\t\tcomma();\n \t\t\t}\n -\t\t\treturn this;\n -\t\t});\n -\t\tconststatement.exps = true;\n -\t};\n \n +\t\t\tif (state.tokens.next.id !== ",") {\n +\t\t\t\tbreak;\n +\t\t\t}\n +\t\t\tcomma();\n +\t\t}\n +\t\treturn this;\n +\t});\n +\tconststatement.exps = true;\n \tvar varstatement = stmt("var", function (prefix) {\n -\t\tvar id, name, value;\n +\t\tvar tokens, lone, value;\n \n -\t\tif (funct["(onevar)"] && option.onevar) {\n -\t\t\twarning("Too many var statements.");\n +\t\tif (funct["(onevar)"] && state.option.onevar) {\n +\t\t\twarning("W081");\n \t\t} else if (!funct["(global)"]) {\n \t\t\tfunct["(onevar)"] = true;\n \t\t}\n \n \t\tthis.first = [];\n -\n \t\tfor (;;) {\n -\t\t\tnonadjacent(token, nexttoken);\n -\t\t\tid = identifier();\n +\t\t\tvar names = [];\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\tif (_.contains(["{", "["], state.tokens.next.value)) {\n +\t\t\t\ttokens = destructuringExpression();\n +\t\t\t\tlone = false;\n +\t\t\t} else {\n +\t\t\t\ttokens = [ { id: identifier(), token: state.tokens.curr } ];\n +\t\t\t\tlone = true;\n +\t\t\t}\n +\t\t\tfor (var t in tokens) {\n +\t\t\t\tt = tokens[t];\n +\t\t\t\tif (state.option.inESNext() && funct[t.id] === "const") {\n +\t\t\t\t\twarning("E011", null, t.id);\n +\t\t\t\t}\n +\t\t\t\tif (funct["(global)"] && predefined[t.id] === false) {\n +\t\t\t\t\twarning("W079", t.token, t.id);\n +\t\t\t\t}\n +\t\t\t\tif (t.id) {\n +\t\t\t\t\taddlabel(t.id, "unused", t.token);\n +\t\t\t\t\tnames.push(t.token);\n +\t\t\t\t}\n +\t\t\t}\n +\t\t\tif (prefix) {\n +\t\t\t\tbreak;\n +\t\t\t}\n +\n +\t\t\tthis.first = this.first.concat(names);\n +\n +\t\t\tif (state.tokens.next.id === "=") {\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\t\tadvance("=");\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\t\tif (state.tokens.next.id === "undefined") {\n +\t\t\t\t\twarning("W080", state.tokens.prev, state.tokens.prev.value);\n +\t\t\t\t}\n +\t\t\t\tif (peek(0).id === "=" && state.tokens.next.identifier) {\n +\t\t\t\t\twarning("W120", state.tokens.next, state.tokens.next.value);\n +\t\t\t\t}\n +\t\t\t\tvalue = expression(10);\n +\t\t\t\tif (lone) {\n +\t\t\t\t\ttokens[0].first = value;\n +\t\t\t\t} else {\n +\t\t\t\t\tdestructuringExpressionMatch(names, value);\n +\t\t\t\t}\n +\t\t\t}\n \n -\t\t\tif (option.esnext && funct[id] === "const") {\n -\t\t\t\twarning("const \'" + id + "\' has already been declared");\n +\t\t\tif (state.tokens.next.id !== ",") {\n +\t\t\t\tbreak;\n \t\t\t}\n +\t\t\tcomma();\n +\t\t}\n +\t\treturn this;\n +\t});\n +\tvarstatement.exps = true;\n +\tvar letstatement = stmt("let", function (prefix) {\n +\t\tvar tokens, lone, value, letblock;\n +\n +\t\tif (!state.option.inESNext()) {\n +\t\t\twarning("W104", state.tokens.curr, "let");\n +\t\t}\n \n -\t\t\tif (funct["(global)"] && predefined[id] === false) {\n -\t\t\t\twarning("Redefinition of \'{a}\'.", token, id);\n +\t\tif (state.tokens.next.value === "(") {\n +\t\t\tif (!state.option.inMoz(true)) {\n +\t\t\t\twarning("W118", state.tokens.next, "let block");\n \t\t\t}\n +\t\t\tadvance("(");\n +\t\t\tfunct["(blockscope)"].stack();\n +\t\t\tletblock = true;\n +\t\t} else if (funct["(nolet)"]) {\n +\t\t\terror("E048", state.tokens.curr);\n +\t\t}\n \n -\t\t\taddlabel(id, "unused", token);\n +\t\tif (funct["(onevar)"] && state.option.onevar) {\n +\t\t\twarning("W081");\n +\t\t} else if (!funct["(global)"]) {\n +\t\t\tfunct["(onevar)"] = true;\n +\t\t}\n \n +\t\tthis.first = [];\n +\t\tfor (;;) {\n +\t\t\tvar names = [];\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\tif (_.contains(["{", "["], state.tokens.next.value)) {\n +\t\t\t\ttokens = destructuringExpression();\n +\t\t\t\tlone = false;\n +\t\t\t} else {\n +\t\t\t\ttokens = [ { id: identifier(), token: state.tokens.curr.value } ];\n +\t\t\t\tlone = true;\n +\t\t\t}\n +\t\t\tfor (var t in tokens) {\n +\t\t\t\tt = tokens[t];\n +\t\t\t\tif (state.option.inESNext() && funct[t.id] === "const") {\n +\t\t\t\t\twarning("E011", null, t.id);\n +\t\t\t\t}\n +\t\t\t\tif (funct["(global)"] && predefined[t.id] === false) {\n +\t\t\t\t\twarning("W079", t.token, t.id);\n +\t\t\t\t}\n +\t\t\t\tif (t.id && !funct["(nolet)"]) {\n +\t\t\t\t\taddlabel(t.id, "unused", t.token, true);\n +\t\t\t\t\tnames.push(t.token);\n +\t\t\t\t}\n +\t\t\t}\n \t\t\tif (prefix) {\n \t\t\t\tbreak;\n \t\t\t}\n \n -\t\t\tname = token;\n -\t\t\tthis.first.push(token);\n +\t\t\tthis.first = this.first.concat(names);\n \n -\t\t\tif (nexttoken.id === "=") {\n -\t\t\t\tnonadjacent(token, nexttoken);\n +\t\t\tif (state.tokens.next.id === "=") {\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t\t\tadvance("=");\n -\t\t\t\tnonadjacent(token, nexttoken);\n -\t\t\t\tif (nexttoken.id === "undefined") {\n -\t\t\t\t\twarning("It is not necessary to initialize \'{a}\' to \'undefined\'.", token, id);\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\t\tif (state.tokens.next.id === "undefined") {\n +\t\t\t\t\twarning("W080", state.tokens.prev, state.tokens.prev.value);\n \t\t\t\t}\n -\t\t\t\tif (peek(0).id === "=" && nexttoken.identifier) {\n -\t\t\t\t\terror("Variable {a} was not declared correctly.",\n -\t\t\t\t\t\t\tnexttoken, nexttoken.value);\n +\t\t\t\tif (peek(0).id === "=" && state.tokens.next.identifier) {\n +\t\t\t\t\twarning("W120", state.tokens.next, state.tokens.next.value);\n +\t\t\t\t}\n +\t\t\t\tvalue = expression(10);\n +\t\t\t\tif (lone) {\n +\t\t\t\t\ttokens[0].first = value;\n +\t\t\t\t} else {\n +\t\t\t\t\tdestructuringExpressionMatch(names, value);\n \t\t\t\t}\n -\t\t\t\tvalue = expression(0);\n -\t\t\t\tname.first = value;\n \t\t\t}\n -\t\t\tif (nexttoken.id !== ",") {\n +\n +\t\t\tif (state.tokens.next.id !== ",") {\n \t\t\t\tbreak;\n \t\t\t}\n \t\t\tcomma();\n \t\t}\n +\t\tif (letblock) {\n +\t\t\tadvance(")");\n +\t\t\tblock(true, true);\n +\t\t\tthis.block = true;\n +\t\t\tfunct["(blockscope)"].unstack();\n +\t\t}\n +\n \t\treturn this;\n \t});\n -\tvarstatement.exps = true;\n +\tletstatement.exps = true;\n +\n +\tblockstmt("class", function () {\n +\t\treturn classdef.call(this, true);\n +\t});\n +\n +\tfunction classdef(stmt) {\n +\t\tif (!state.option.inESNext()) {\n +\t\t\twarning("W104", state.tokens.curr, "class");\n +\t\t}\n +\t\tif (stmt) {\n +\t\t\tthis.name = identifier();\n +\t\t\taddlabel(this.name, "unused", state.tokens.curr);\n +\t\t} else if (state.tokens.next.identifier && state.tokens.next.value !== "extends") {\n +\t\t\tthis.name = identifier();\n +\t\t}\n +\t\tclasstail(this);\n +\t\treturn this;\n +\t}\n +\n +\tfunction classtail(c) {\n +\t\tvar strictness = state.directive["use strict"];\n +\t\tif (state.tokens.next.value === "extends") {\n +\t\t\tadvance("extends");\n +\t\t\tc.heritage = expression(10);\n +\t\t}\n +\t\tstate.directive["use strict"] = true;\n +\t\tadvance("{");\n +\t\tc.body = state.syntax["{"].nud(true);\n +\t\tstate.directive["use strict"] = strictness;\n +\t}\n \n \tblockstmt("function", function () {\n +\t\tvar generator = false;\n +\t\tif (state.tokens.next.value === "*") {\n +\t\t\tadvance("*");\n +\t\t\tif (state.option.inESNext(true)) {\n +\t\t\t\tgenerator = true;\n +\t\t\t} else {\n +\t\t\t\twarning("W119", state.tokens.curr, "function*");\n +\t\t\t}\n +\t\t}\n \t\tif (inblock) {\n -\t\t\twarning("Function declarations should not be placed in blocks. " +\n -\t\t\t\t"Use a function expression or move the statement to the top of " +\n -\t\t\t\t"the outer function.", token);\n +\t\t\twarning("W082", state.tokens.curr);\n \n \t\t}\n \t\tvar i = identifier();\n -\t\tif (option.esnext && funct[i] === "const") {\n -\t\t\twarning("const \'" + i + "\' has already been declared");\n +\t\tif (funct[i] === "const") {\n +\t\t\twarning("E011", null, i);\n \t\t}\n -\t\tadjacent(token, nexttoken);\n -\t\taddlabel(i, "unction", token);\n +\t\tadjacent(state.tokens.curr, state.tokens.next);\n +\t\taddlabel(i, "unction", state.tokens.curr);\n \n -\t\tdoFunction(i, { statement: true });\n -\t\tif (nexttoken.id === "(" && nexttoken.line === token.line) {\n -\t\t\terror(\n -"Function declarations are not invocable. Wrap the whole function invocation in parens.");\n +\t\tdoFunction(i, { statement: true }, generator);\n +\t\tif (state.tokens.next.id === "(" && state.tokens.next.line === state.tokens.curr.line) {\n +\t\t\terror("E039");\n \t\t}\n \t\treturn this;\n \t});\n \n \tprefix("function", function () {\n +\t\tvar generator = false;\n +\t\tif (state.tokens.next.value === "*") {\n +\t\t\tif (!state.option.inESNext()) {\n +\t\t\t\twarning("W119", state.tokens.curr, "function*");\n +\t\t\t}\n +\t\t\tadvance("*");\n +\t\t\tgenerator = true;\n +\t\t}\n \t\tvar i = optionalidentifier();\n -\t\tif (i) {\n -\t\t\tadjacent(token, nexttoken);\n +\t\tif (i || state.option.gcl) {\n +\t\t\tadjacent(state.tokens.curr, state.tokens.next);\n \t\t} else {\n -\t\t\tnonadjacent(token, nexttoken);\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t}\n -\t\tdoFunction(i);\n -\t\tif (!option.loopfunc && funct["(loopage)"]) {\n -\t\t\twarning("Don\'t make functions within a loop.");\n +\t\tdoFunction(i, undefined, generator);\n +\t\tif (!state.option.loopfunc && funct["(loopage)"]) {\n +\t\t\twarning("W083");\n \t\t}\n \t\treturn this;\n \t});\n \n \tblockstmt("if", function () {\n -\t\tvar t = nexttoken;\n +\t\tvar t = state.tokens.next;\n \t\tincreaseComplexityCount();\n +\t\tstate.condition = true;\n \t\tadvance("(");\n \t\tnonadjacent(this, t);\n \t\tnospace();\n -\t\texpression(20);\n -\t\tif (nexttoken.id === "=") {\n -\t\t\tif (!option.boss)\n -\t\t\t\twarning("Assignment in conditional expression");\n -\t\t\tadvance("=");\n -\t\t\texpression(20);\n -\t\t}\n +\t\tcheckCondAssignment(expression(0));\n \t\tadvance(")", t);\n -\t\tnospace(prevtoken, token);\n +\t\tstate.condition = false;\n +\t\tnospace(state.tokens.prev, state.tokens.curr);\n \t\tblock(true, true);\n -\t\tif (nexttoken.id === "else") {\n -\t\t\tnonadjacent(token, nexttoken);\n +\t\tif (state.tokens.next.id === "else") {\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t\tadvance("else");\n -\t\t\tif (nexttoken.id === "if" || nexttoken.id === "switch") {\n +\t\t\tif (state.tokens.next.id === "if" || state.tokens.next.id === "switch") {\n \t\t\t\tstatement(true);\n \t\t\t} else {\n \t\t\t\tblock(true, true);\n @@ -5645,87 +7041,96 @@ klass:\n \t\t\tvar e;\n \n \t\t\tadvance("catch");\n -\t\t\tnonadjacent(token, nexttoken);\n +\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t\tadvance("(");\n \n \t\t\tscope = Object.create(oldScope);\n \n -\t\t\te = nexttoken.value;\n -\t\t\tif (nexttoken.type !== "(identifier)") {\n +\t\t\te = state.tokens.next.value;\n +\t\t\tif (state.tokens.next.type !== "(identifier)") {\n \t\t\t\te = null;\n -\t\t\t\twarning("Expected an identifier and instead saw \'{a}\'.", nexttoken, e);\n +\t\t\t\twarning("E030", state.tokens.next, e);\n \t\t\t}\n \n \t\t\tadvance();\n -\t\t\tadvance(")");\n \n \t\t\tfunct = {\n -\t\t\t\t"(name)"\t : "(catch)",\n -\t\t\t\t"(line)"\t : nexttoken.line,\n -\t\t\t\t"(character)": nexttoken.character,\n +\t\t\t\t"(name)" : "(catch)",\n +\t\t\t\t"(line)" : state.tokens.next.line,\n +\t\t\t\t"(character)": state.tokens.next.character,\n \t\t\t\t"(context)" : funct,\n \t\t\t\t"(breakage)" : funct["(breakage)"],\n \t\t\t\t"(loopage)" : funct["(loopage)"],\n -\t\t\t\t"(scope)"\t : scope,\n +\t\t\t\t"(scope)" : scope,\n \t\t\t\t"(statement)": false,\n -\t\t\t\t"(metrics)" : createMetrics(nexttoken),\n -\t\t\t\t"(catch)"\t : true,\n -\t\t\t\t"(tokens)"\t : {}\n +\t\t\t\t"(metrics)" : createMetrics(state.tokens.next),\n +\t\t\t\t"(catch)" : true,\n +\t\t\t\t"(tokens)" : {},\n +\t\t\t\t"(blockscope)": funct["(blockscope)"],\n +\t\t\t\t"(comparray)": funct["(comparray)"]\n \t\t\t};\n \n \t\t\tif (e) {\n \t\t\t\taddlabel(e, "exception");\n \t\t\t}\n \n -\t\t\ttoken.funct = funct;\n +\t\t\tif (state.tokens.next.value === "if") {\n +\t\t\t\tif (!state.option.inMoz(true)) {\n +\t\t\t\t\twarning("W118", state.tokens.curr, "catch filter");\n +\t\t\t\t}\n +\t\t\t\tadvance("if");\n +\t\t\t\texpression(0);\n +\t\t\t}\n +\n +\t\t\tadvance(")");\n +\n +\t\t\tstate.tokens.curr.funct = funct;\n \t\t\tfunctions.push(funct);\n \n \t\t\tblock(false);\n \n \t\t\tscope = oldScope;\n \n -\t\t\tfunct["(last)"] = token.line;\n -\t\t\tfunct["(lastcharacter)"] = token.character;\n +\t\t\tfunct["(last)"] = state.tokens.curr.line;\n +\t\t\tfunct["(lastcharacter)"] = state.tokens.curr.character;\n \t\t\tfunct = funct["(context)"];\n \t\t}\n \n \t\tblock(false);\n \n -\t\tif (nexttoken.id === "catch") {\n +\t\twhile (state.tokens.next.id === "catch") {\n \t\t\tincreaseComplexityCount();\n +\t\t\tif (b && (!state.option.inMoz(true))) {\n +\t\t\t\twarning("W118", state.tokens.next, "multiple catch blocks");\n +\t\t\t}\n \t\t\tdoCatch();\n \t\t\tb = true;\n \t\t}\n \n -\t\tif (nexttoken.id === "finally") {\n +\t\tif (state.tokens.next.id === "finally") {\n \t\t\tadvance("finally");\n \t\t\tblock(false);\n \t\t\treturn;\n -\t\t} else if (!b) {\n -\t\t\terror("Expected \'{a}\' and instead saw \'{b}\'.",\n -\t\t\t\t\tnexttoken, "catch", nexttoken.value);\n +\t\t}\n +\n +\t\tif (!b) {\n +\t\t\terror("E021", state.tokens.next, "catch", state.tokens.next.value);\n \t\t}\n \n \t\treturn this;\n \t});\n \n \tblockstmt("while", function () {\n -\t\tvar t = nexttoken;\n +\t\tvar t = state.tokens.next;\n \t\tfunct["(breakage)"] += 1;\n \t\tfunct["(loopage)"] += 1;\n \t\tincreaseComplexityCount();\n \t\tadvance("(");\n \t\tnonadjacent(this, t);\n \t\tnospace();\n -\t\texpression(20);\n -\t\tif (nexttoken.id === "=") {\n -\t\t\tif (!option.boss)\n -\t\t\t\twarning("Assignment in conditional expression");\n -\t\t\tadvance("=");\n -\t\t\texpression(20);\n -\t\t}\n +\t\tcheckCondAssignment(expression(0));\n \t\tadvance(")", t);\n -\t\tnospace(prevtoken, token);\n +\t\tnospace(state.tokens.prev, state.tokens.curr);\n \t\tblock(true, true);\n \t\tfunct["(breakage)"] -= 1;\n \t\tfunct["(loopage)"] -= 1;\n @@ -5733,11 +7138,11 @@ klass:\n \t}).labelled = true;\n \n \tblockstmt("with", function () {\n -\t\tvar t = nexttoken;\n -\t\tif (directive["use strict"]) {\n -\t\t\terror("\'with\' is not allowed in strict mode.", token);\n -\t\t} else if (!option.withstmt) {\n -\t\t\twarning("Don\'t use \'with\'.", token);\n +\t\tvar t = state.tokens.next;\n +\t\tif (state.directive["use strict"]) {\n +\t\t\terror("E010", state.tokens.curr);\n +\t\t} else if (!state.option.withstmt) {\n +\t\t\twarning("W085", state.tokens.curr);\n \t\t}\n \n \t\tadvance("(");\n @@ -5745,32 +7150,34 @@ klass:\n \t\tnospace();\n \t\texpression(0);\n \t\tadvance(")", t);\n -\t\tnospace(prevtoken, token);\n +\t\tnospace(state.tokens.prev, state.tokens.curr);\n \t\tblock(true, true);\n \n \t\treturn this;\n \t});\n \n \tblockstmt("switch", function () {\n -\t\tvar t = nexttoken,\n +\t\tvar t = state.tokens.next,\n \t\t\tg = false;\n \t\tfunct["(breakage)"] += 1;\n \t\tadvance("(");\n \t\tnonadjacent(this, t);\n \t\tnospace();\n -\t\tthis.condition = expression(20);\n +\t\tcheckCondAssignment(expression(0));\n \t\tadvance(")", t);\n -\t\tnospace(prevtoken, token);\n -\t\tnonadjacent(token, nexttoken);\n -\t\tt = nexttoken;\n +\t\tnospace(state.tokens.prev, state.tokens.curr);\n +\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\tt = state.tokens.next;\n \t\tadvance("{");\n -\t\tnonadjacent(token, nexttoken);\n -\t\tindent += option.indent;\n +\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n +\t\tindent += state.option.indent;\n \t\tthis.cases = [];\n +\n \t\tfor (;;) {\n -\t\t\tswitch (nexttoken.id) {\n +\t\t\tswitch (state.tokens.next.id) {\n \t\t\tcase "case":\n \t\t\t\tswitch (funct["(verb)"]) {\n +\t\t\t\tcase "yield":\n \t\t\t\tcase "break":\n \t\t\t\tcase "case":\n \t\t\t\tcase "continue":\n @@ -5779,13 +7186,11 @@ klass:\n \t\t\t\tcase "throw":\n \t\t\t\t\tbreak;\n \t\t\t\tdefault:\n -\t\t\t\t\tif (!ft.test(lines[nexttoken.line - 2])) {\n -\t\t\t\t\t\twarning(\n -\t\t\t\t\t\t\t"Expected a \'break\' statement before \'case\'.",\n -\t\t\t\t\t\t\ttoken);\n +\t\t\t\t\tif (!reg.fallsThrough.test(state.lines[state.tokens.next.line - 2])) {\n +\t\t\t\t\t\twarning("W086", state.tokens.curr, "case");\n \t\t\t\t\t}\n \t\t\t\t}\n -\t\t\t\tindentation(-option.indent);\n +\t\t\t\tindentation(-state.option.indent);\n \t\t\t\tadvance("case");\n \t\t\t\tthis.cases.push(expression(20));\n \t\t\t\tincreaseComplexityCount();\n @@ -5795,60 +7200,55 @@ klass:\n \t\t\t\tbreak;\n \t\t\tcase "default":\n \t\t\t\tswitch (funct["(verb)"]) {\n +\t\t\t\tcase "yield":\n \t\t\t\tcase "break":\n \t\t\t\tcase "continue":\n \t\t\t\tcase "return":\n \t\t\t\tcase "throw":\n \t\t\t\t\tbreak;\n \t\t\t\tdefault:\n -\t\t\t\t\tif (!ft.test(lines[nexttoken.line - 2])) {\n -\t\t\t\t\t\twarning(\n -\t\t\t\t\t\t\t"Expected a \'break\' statement before \'default\'.",\n -\t\t\t\t\t\t\ttoken);\n +\t\t\t\t\tif (this.cases.length) {\n +\t\t\t\t\t\tif (!reg.fallsThrough.test(state.lines[state.tokens.next.line - 2])) {\n +\t\t\t\t\t\t\twarning("W086", state.tokens.curr, "default");\n +\t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n -\t\t\t\tindentation(-option.indent);\n +\t\t\t\tindentation(-state.option.indent);\n \t\t\t\tadvance("default");\n \t\t\t\tg = true;\n \t\t\t\tadvance(":");\n \t\t\t\tbreak;\n \t\t\tcase "}":\n -\t\t\t\tindent -= option.indent;\n +\t\t\t\tindent -= state.option.indent;\n \t\t\t\tindentation();\n \t\t\t\tadvance("}", t);\n -\t\t\t\tif (this.cases.length === 1 || this.condition.id === "true" ||\n -\t\t\t\t\t\tthis.condition.id === "false") {\n -\t\t\t\t\tif (!option.onecase)\n -\t\t\t\t\t\twarning("This \'switch\' should be an \'if\'.", this);\n -\t\t\t\t}\n \t\t\t\tfunct["(breakage)"] -= 1;\n \t\t\t\tfunct["(verb)"] = undefined;\n \t\t\t\treturn;\n \t\t\tcase "(end)":\n -\t\t\t\terror("Missing \'{a}\'.", nexttoken, "}");\n +\t\t\t\terror("E023", state.tokens.next, "}");\n \t\t\t\treturn;\n \t\t\tdefault:\n \t\t\t\tif (g) {\n -\t\t\t\t\tswitch (token.id) {\n +\t\t\t\t\tswitch (state.tokens.curr.id) {\n \t\t\t\t\tcase ",":\n -\t\t\t\t\t\terror("Each value should have its own case label.");\n +\t\t\t\t\t\terror("E040");\n \t\t\t\t\t\treturn;\n \t\t\t\t\tcase ":":\n \t\t\t\t\t\tg = false;\n \t\t\t\t\t\tstatements();\n \t\t\t\t\t\tbreak;\n \t\t\t\t\tdefault:\n -\t\t\t\t\t\terror("Missing \':\' on a case clause.", token);\n +\t\t\t\t\t\terror("E025", state.tokens.curr);\n \t\t\t\t\t\treturn;\n \t\t\t\t\t}\n \t\t\t\t} else {\n -\t\t\t\t\tif (token.id === ":") {\n +\t\t\t\t\tif (state.tokens.curr.id === ":") {\n \t\t\t\t\t\tadvance(":");\n -\t\t\t\t\t\terror("Unexpected \'{a}\'.", token, ":");\n +\t\t\t\t\t\terror("E024", state.tokens.curr, ":");\n \t\t\t\t\t\tstatements();\n \t\t\t\t\t} else {\n -\t\t\t\t\t\terror("Expected \'{a}\' and instead saw \'{b}\'.",\n -\t\t\t\t\t\t\tnexttoken, "case", nexttoken.value);\n +\t\t\t\t\t\terror("E021", state.tokens.next, "case", state.tokens.next.value);\n \t\t\t\t\t\treturn;\n \t\t\t\t\t}\n \t\t\t\t}\n @@ -5857,8 +7257,8 @@ klass:\n \t}).labelled = true;\n \n \tstmt("debugger", function () {\n -\t\tif (!option.debug) {\n -\t\t\twarning("All \'debugger\' statements should be removed.");\n +\t\tif (!state.option.debug) {\n +\t\t\twarning("W087");\n \t\t}\n \t\treturn this;\n \t}).exps = true;\n @@ -5869,21 +7269,15 @@ klass:\n \t\t\tfunct["(loopage)"] += 1;\n \t\t\tincreaseComplexityCount();\n \n -\t\t\tthis.first = block(true);\n +\t\t\tthis.first = block(true, true);\n \t\t\tadvance("while");\n -\t\t\tvar t = nexttoken;\n -\t\t\tnonadjacent(token, t);\n +\t\t\tvar t = state.tokens.next;\n +\t\t\tnonadjacent(state.tokens.curr, t);\n \t\t\tadvance("(");\n \t\t\tnospace();\n -\t\t\texpression(20);\n -\t\t\tif (nexttoken.id === "=") {\n -\t\t\t\tif (!option.boss)\n -\t\t\t\t\twarning("Assignment in conditional expression");\n -\t\t\t\tadvance("=");\n -\t\t\t\texpression(20);\n -\t\t\t}\n +\t\t\tcheckCondAssignment(expression(0));\n \t\t\tadvance(")", t);\n -\t\t\tnospace(prevtoken, token);\n +\t\t\tnospace(state.tokens.prev, state.tokens.curr);\n \t\t\tfunct["(breakage)"] -= 1;\n \t\t\tfunct["(loopage)"] -= 1;\n \t\t\treturn this;\n @@ -5893,110 +7287,163 @@ klass:\n \t}());\n \n \tblockstmt("for", function () {\n -\t\tvar s, t = nexttoken;\n +\t\tvar s, t = state.tokens.next;\n +\t\tvar letscope = false;\n +\t\tvar foreachtok = null;\n +\n +\t\tif (t.value === "each") {\n +\t\t\tforeachtok = t;\n +\t\t\tadvance("each");\n +\t\t\tif (!state.option.inMoz(true)) {\n +\t\t\t\twarning("W118", state.tokens.curr, "for each");\n +\t\t\t}\n +\t\t}\n +\n \t\tfunct["(breakage)"] += 1;\n \t\tfunct["(loopage)"] += 1;\n \t\tincreaseComplexityCount();\n \t\tadvance("(");\n \t\tnonadjacent(this, t);\n \t\tnospace();\n -\t\tif (peek(nexttoken.id === "var" ? 1 : 0).id === "in") {\n -\t\t\tif (nexttoken.id === "var") {\n +\t\tvar nextop; // contains the token of the "in" or "of" operator\n +\t\tvar i = 0;\n +\t\tvar inof = ["in", "of"];\n +\t\tdo {\n +\t\t\tnextop = peek(i);\n +\t\t\t++i;\n +\t\t} while (!_.contains(inof, nextop.value) && nextop.value !== ";" &&\n +\t\t\t\t\tnextop.type !== "(end)");\n +\t\tif (_.contains(inof, nextop.value)) {\n +\t\t\tif (!state.option.inESNext() && nextop.value === "of") {\n +\t\t\t\terror("W104", nextop, "for of");\n +\t\t\t}\n +\t\t\tif (state.tokens.next.id === "var") {\n \t\t\t\tadvance("var");\n -\t\t\t\tvarstatement.fud.call(varstatement, true);\n +\t\t\t\tstate.syntax["var"].fud.call(state.syntax["var"].fud, true);\n +\t\t\t} else if (state.tokens.next. + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +id === "let") {\n +\t\t\t\tadvance("let");\n +\t\t\t\tletscope = true;\n +\t\t\t\tfunct["(blockscope)"].stack();\n +\t\t\t\tstate.syntax["let"].fud.call(state.syntax["let"].fud, true);\n \t\t\t} else {\n -\t\t\t\tswitch (funct[nexttoken.value]) {\n +\t\t\t\tswitch (funct[state.tokens.next.value]) {\n \t\t\t\tcase "unused":\n -\t\t\t\t\tfunct[nexttoken.value] = "var";\n +\t\t\t\t\tfunct[state.tokens.next.value] = "var";\n \t\t\t\t\tbreak;\n \t\t\t\tcase "var":\n \t\t\t\t\tbreak;\n \t\t\t\tdefault:\n -\t\t\t\t\twarning("Bad for in variable \'{a}\'.",\n -\t\t\t\t\t\t\tnexttoken, nexttoken.value);\n +\t\t\t\t\tif (!funct["(blockscope)"].getlabel(state.tokens.next.value))\n +\t\t\t\t\t\twarning("W088", state.tokens.next, state.tokens.next.value);\n \t\t\t\t}\n \t\t\t\tadvance();\n \t\t\t}\n -\t\t\tadvance("in");\n +\t\t\tadvance(nextop.value);\n \t\t\texpression(20);\n \t\t\tadvance(")", t);\n \t\t\ts = block(true, true);\n -\t\t\tif (option.forin && s && (s.length > 1 || typeof s[0] !== "object" ||\n +\t\t\tif (state.option.forin && s && (s.length > 1 || typeof s[0] !== "object" ||\n \t\t\t\t\ts[0].value !== "if")) {\n -\t\t\t\twarning("The body of a for in should be wrapped in an if statement to filter " +\n -\t\t\t\t\t\t"unwanted properties from the prototype.", this);\n +\t\t\t\twarning("W089", this);\n \t\t\t}\n \t\t\tfunct["(breakage)"] -= 1;\n \t\t\tfunct["(loopage)"] -= 1;\n -\t\t\treturn this;\n \t\t} else {\n -\t\t\tif (nexttoken.id !== ";") {\n -\t\t\t\tif (nexttoken.id === "var") {\n +\t\t\tif (foreachtok) {\n +\t\t\t\terror("E045", foreachtok);\n +\t\t\t}\n +\t\t\tif (state.tokens.next.id !== ";") {\n +\t\t\t\tif (state.tokens.next.id === "var") {\n \t\t\t\t\tadvance("var");\n -\t\t\t\t\tvarstatement.fud.call(varstatement);\n +\t\t\t\t\tstate.syntax["var"].fud.call(state.syntax["var"].fud);\n +\t\t\t\t} else if (state.tokens.next.id === "let") {\n +\t\t\t\t\tadvance("let");\n +\t\t\t\t\tletscope = true;\n +\t\t\t\t\tfunct["(blockscope)"].stack();\n +\t\t\t\t\tstate.syntax["let"].fud.call(state.syntax["let"].fud);\n \t\t\t\t} else {\n \t\t\t\t\tfor (;;) {\n \t\t\t\t\t\texpression(0, "for");\n -\t\t\t\t\t\tif (nexttoken.id !== ",") {\n +\t\t\t\t\t\tif (state.tokens.next.id !== ",") {\n \t\t\t\t\t\t\tbreak;\n \t\t\t\t\t\t}\n \t\t\t\t\t\tcomma();\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n -\t\t\tnolinebreak(token);\n +\t\t\tnolinebreak(state.tokens.curr);\n \t\t\tadvance(";");\n -\t\t\tif (nexttoken.id !== ";") {\n -\t\t\t\texpression(20);\n -\t\t\t\tif (nexttoken.id === "=") {\n -\t\t\t\t\tif (!option.boss)\n -\t\t\t\t\t\twarning("Assignment in conditional expression");\n -\t\t\t\t\tadvance("=");\n -\t\t\t\t\texpression(20);\n -\t\t\t\t}\n +\t\t\tif (state.tokens.next.id !== ";") {\n +\t\t\t\tcheckCondAssignment(expression(0));\n \t\t\t}\n -\t\t\tnolinebreak(token);\n +\t\t\tnolinebreak(state.tokens.curr);\n \t\t\tadvance(";");\n -\t\t\tif (nexttoken.id === ";") {\n -\t\t\t\terror("Expected \'{a}\' and instead saw \'{b}\'.",\n -\t\t\t\t\t\tnexttoken, ")", ";");\n +\t\t\tif (state.tokens.next.id === ";") {\n +\t\t\t\terror("E021", state.tokens.next, ")", ";");\n \t\t\t}\n -\t\t\tif (nexttoken.id !== ")") {\n +\t\t\tif (state.tokens.next.id !== ")") {\n \t\t\t\tfor (;;) {\n \t\t\t\t\texpression(0, "for");\n -\t\t\t\t\tif (nexttoken.id !== ",") {\n +\t\t\t\t\tif (state.tokens.next.id !== ",") {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n \t\t\t\t\tcomma();\n \t\t\t\t}\n \t\t\t}\n \t\t\tadvance(")", t);\n -\t\t\tnospace(prevtoken, token);\n +\t\t\tnospace(state.tokens.prev, state.tokens.curr);\n \t\t\tblock(true, true);\n \t\t\tfunct["(breakage)"] -= 1;\n \t\t\tfunct["(loopage)"] -= 1;\n -\t\t\treturn this;\n +\n +\t\t}\n +\t\tif (letscope) {\n +\t\t\tfunct["(blockscope)"].unstack();\n \t\t}\n +\t\treturn this;\n \t}).labelled = true;\n \n \n \tstmt("break", function () {\n -\t\tvar v = nexttoken.value;\n +\t\tvar v = state.tokens.next.value;\n \n \t\tif (funct["(breakage)"] === 0)\n -\t\t\twarning("Unexpected \'{a}\'.", nexttoken, this.value);\n +\t\t\twarning("W052", state.tokens.next, this.value);\n \n -\t\tif (!option.asi)\n +\t\tif (!state.option.asi)\n \t\t\tnolinebreak(this);\n \n -\t\tif (nexttoken.id !== ";") {\n -\t\t\tif (token.line === nexttoken.line) {\n +\t\tif (state.tokens.next.id !== ";" && !state.tokens.next.reach) {\n +\t\t\tif (state.tokens.curr.line === state.tokens.next.line) {\n \t\t\t\tif (funct[v] !== "label") {\n -\t\t\t\t\twarning("\'{a}\' is not a statement label.", nexttoken, v);\n +\t\t\t\t\twarning("W090", state.tokens.next, v);\n \t\t\t\t} else if (scope[v] !== funct) {\n -\t\t\t\t\twarning("\'{a}\' is out of scope.", nexttoken, v);\n +\t\t\t\t\twarning("W091", state.tokens.next, v);\n \t\t\t\t}\n -\t\t\t\tthis.first = nexttoken;\n +\t\t\t\tthis.first = state.tokens.next;\n \t\t\t\tadvance();\n \t\t\t}\n \t\t}\n @@ -6006,26 +7453,26 @@ klass:\n \n \n \tstmt("continue", function () {\n -\t\tvar v = nexttoken.value;\n +\t\tvar v = state.tokens.next.value;\n \n \t\tif (funct["(breakage)"] === 0)\n -\t\t\twarning("Unexpected \'{a}\'.", nexttoken, this.value);\n +\t\t\twarning("W052", state.tokens.next, this.value);\n \n -\t\tif (!option.asi)\n +\t\tif (!state.option.asi)\n \t\t\tnolinebreak(this);\n \n -\t\tif (nexttoken.id !== ";") {\n -\t\t\tif (token.line === nexttoken.line) {\n +\t\tif (state.tokens.next.id !== ";" && !state.tokens.next.reach) {\n +\t\t\tif (state.tokens.curr.line === state.tokens.next.line) {\n \t\t\t\tif (funct[v] !== "label") {\n -\t\t\t\t\twarning("\'{a}\' is not a statement label.", nexttoken, v);\n +\t\t\t\t\twarning("W090", state.tokens.next, v);\n \t\t\t\t} else if (scope[v] !== funct) {\n -\t\t\t\t\twarning("\'{a}\' is out of scope.", nexttoken, v);\n +\t\t\t\t\twarning("W091", state.tokens.next, v);\n \t\t\t\t}\n -\t\t\t\tthis.first = nexttoken;\n +\t\t\t\tthis.first = state.tokens.next;\n \t\t\t\tadvance();\n \t\t\t}\n \t\t} else if (!funct["(loopage)"]) {\n -\t\t\twarning("Unexpected \'{a}\'.", nexttoken, this.value);\n +\t\t\twarning("W052", state.tokens.next, this.value);\n \t\t}\n \t\treachable("continue");\n \t\treturn this;\n @@ -6033,86 +7480,355 @@ klass:\n \n \n \tstmt("return", function () {\n -\t\tif (this.line === nexttoken.line) {\n -\t\t\tif (nexttoken.id === "(regexp)")\n -\t\t\t\twarning("Wrap the /regexp/ literal in parens to disambiguate the slash operator.");\n +\t\tif (this.line === state.tokens.next.line) {\n +\t\t\tif (state.tokens.next.id === "(regexp)")\n +\t\t\t\twarning("W092");\n \n -\t\t\tif (nexttoken.id !== ";" && !nexttoken.reach) {\n -\t\t\t\tnonadjacent(token, nexttoken);\n -\t\t\t\tif (peek().value === "=" && !option.boss) {\n -\t\t\t\t\twarningAt("Did you mean to return a conditional instead of an assignment?",\n -\t\t\t\t\t\t\t token.line, token.character + 1);\n -\t\t\t\t}\n +\t\t\tif (state.tokens.next.id !== ";" && !state.tokens.next.reach) {\n +\t\t\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\t\t\tthis.first = expression(0);\n +\n +\t\t\t\tif (this.first &&\n +\t\t\t\t\t\tthis.first.type === "(punctuator)" && this.first.value === "=" && !state.option.boss) {\n +\t\t\t\t\twarningAt("W093", this.first.line, this.first.character);\n +\t\t\t\t}\n +\t\t\t}\n +\t\t} else {\n +\t\t\tif (state.tokens.next.type === "(punctuator)" &&\n +\t\t\t\t["[", "{", "+", "-"].indexOf(state.tokens.next.value) > -1) {\n +\t\t\t\tnolinebreak(this); // always warn (Line breaking error)\n \t\t\t}\n -\t\t} else if (!option.asi) {\n -\t\t\tnolinebreak(this); // always warn (Line breaking error)\n \t\t}\n \t\treachable("return");\n \t\treturn this;\n \t}).exps = true;\n \n +\t(function (x) {\n +\t\tx.exps = true;\n +\t\tx.lbp = 25;\n +\t}(prefix("yield", function () {\n +\t\tvar prev = state.tokens.prev;\n +\t\tif (state.option.inESNext(true) && !funct["(generator)"]) {\n +\t\t\terror("E046", state.tokens.curr, "yield");\n +\t\t} else if (!state.option.inESNext()) {\n +\t\t\twarning("W104", state.tokens.curr, "yield");\n +\t\t}\n +\t\tfunct["(generator)"] = "yielded";\n +\t\tif (this.line === state.tokens.next.line || !state.option.inMoz(true)) {\n +\t\t\tif (state.tokens.next.id === "(regexp)")\n +\t\t\t\twarning("W092");\n +\n +\t\t\tif (state.tokens.next.id !== ";" && !state.tokens.next.reach && state.tokens.next.nud) {\n +\t\t\t\tnobreaknonadjacent(state.tokens.curr, state.tokens.next);\n +\t\t\t\tthis.first = expression(10);\n +\n +\t\t\t\tif (this.first.type === "(punctuator)" && this.first.value === "=" && !state.option.boss) {\n +\t\t\t\t\twarningAt("W093", this.first.line, this.first.character);\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\tif (state.option.inMoz(true) && state.tokens.next.id !== ")" &&\n +\t\t\t\t\t(prev.lbp > 30 || (!prev.assign && !isEndOfExpr()) || prev.id === "yield")) {\n +\t\t\t\terror("E050", this);\n +\t\t\t}\n +\t\t} else if (!state.option.asi) {\n +\t\t\tnolinebreak(this); // always warn (Line breaking error)\n +\t\t}\n +\t\treturn this;\n +\t})));\n +\n \n \tstmt("throw", function () {\n \t\tnolinebreak(this);\n -\t\tnonadjacent(token, nexttoken);\n +\t\tnonadjacent(state.tokens.curr, state.tokens.next);\n \t\tthis.first = expression(20);\n \t\treachable("throw");\n \t\treturn this;\n \t}).exps = true;\n \n -\treserve("class");\n -\treserve("const");\n -\treserve("enum");\n -\treserve("export");\n -\treserve("extends");\n -\treserve("import");\n -\treserve("super");\n -\n -\treserve("let");\n -\treserve("yield");\n -\treserve("implements");\n -\treserve("interface");\n -\treserve("package");\n -\treserve("private");\n -\treserve("protected");\n -\treserve("public");\n -\treserve("static");\n +\tstmt("import", function () {\n +\t\tif (!state.option.inESNext()) {\n +\t\t\twarning("W119", state.tokens.curr, "import");\n +\t\t}\n +\n +\t\tif (state.tokens.next.identifier) {\n +\t\t\tthis.name = identifier();\n +\t\t\taddlabel(this.name, "unused", state.tokens.curr);\n +\t\t} else {\n +\t\t\tadvance("{");\n +\t\t\tfor (;;) {\n +\t\t\t\tvar importName;\n +\t\t\t\tif (state.tokens.next.type === "default") {\n +\t\t\t\t\timportName = "default";\n +\t\t\t\t\tadvance("default");\n +\t\t\t\t} else {\n +\t\t\t\t\timportName = identifier();\n +\t\t\t\t}\n +\t\t\t\tif (state.tokens.next.value === "as") {\n +\t\t\t\t\tadvance("as");\n +\t\t\t\t\timportName = identifier();\n +\t\t\t\t}\n +\t\t\t\taddlabel(importName, "unused", state.tokens.curr);\n +\n +\t\t\t\tif (state.tokens.next.value === ",") {\n +\t\t\t\t\tadvance(",");\n +\t\t\t\t} else if (state.tokens.next.value === "}") {\n +\t\t\t\t\tadvance("}");\n +\t\t\t\t\tbreak;\n +\t\t\t\t} else {\n +\t\t\t\t\terror("E024", state.tokens.next, state.tokens.next.value);\n +\t\t\t\t\tbreak;\n +\t\t\t\t}\n +\t\t\t}\n +\t\t}\n +\n +\t\tadvance("from");\n +\t\tadvance("(string)");\n +\t\treturn this;\n +\t}).exps = true;\n +\n +\tstmt("export", function () {\n +\t\tif (!state.option.inESNext()) {\n +\t\t\twarning("W119", state.tokens.curr, "export");\n +\t\t}\n +\n +\t\tif (state.tokens.next.type === "default") {\n +\t\t\tadvance("default");\n +\t\t\tif (state.tokens.next.id === "function" || state.tokens.next.id === "class") {\n +\t\t\t\tthis.block = true;\n +\t\t\t}\n +\t\t\tthis.exportee = expression(10);\n +\n +\t\t\treturn this;\n +\t\t}\n +\n +\t\tif (state.tokens.next.value === "{") {\n +\t\t\tadvance("{");\n +\t\t\tfor (;;) {\n +\t\t\t\tidentifier();\n +\n +\t\t\t\tif (state.tokens.next.value === ",") {\n +\t\t\t\t\tadvance(",");\n +\t\t\t\t} else if (state.tokens.next.value === "}") {\n +\t\t\t\t\tadvance("}");\n +\t\t\t\t\tbreak;\n +\t\t\t\t} else {\n +\t\t\t\t\terror("E024", state.tokens.next, state.tokens.next.value);\n +\t\t\t\t\tbreak;\n +\t\t\t\t}\n +\t\t\t}\n +\t\t\treturn this;\n +\t\t}\n +\n +\t\tif (state.tokens.next.id === "var") {\n +\t\t\tadvance("var");\n +\t\t\tstate.syntax["var"].fud.call(state.syntax["var"].fud);\n +\t\t} else if (state.tokens.next.id === "let") {\n +\t\t\tadvance("let");\n +\t\t\tstate.syntax["let"].fud.call(state.syntax["let"].fud);\n +\t\t} else if (state.tokens.next.id === "const") {\n +\t\t\tadvance("const");\n +\t\t\tstate.syntax["const"].fud.call(state.syntax["const"].fud);\n +\t\t} else if (state.tokens.next.id === "function") {\n +\t\t\tthis.block = true;\n +\t\t\tadvance("function");\n +\t\t\tstate.syntax["function"].fud();\n +\t\t} else if (state.tokens.next.id === "class") {\n +\t\t\tthis.block = true;\n +\t\t\tadvance("class");\n +\t\t\tstate.syntax["class"].fud();\n +\t\t} else {\n +\t\t\terror("E024", state.tokens.next, state.tokens.next.value);\n +\t\t}\n +\n +\t\treturn this;\n +\t}).exps = true;\n +\n +\tFutureReservedWord("abstract");\n +\tFutureReservedWord("boolean");\n +\tFutureReservedWord("byte");\n +\tFutureReservedWord("char");\n +\tFutureReservedWord("class", { es5: true, nud: classdef });\n +\tFutureReservedWord("double");\n +\tFutureReservedWord("enum", { es5: true });\n +\tFutureReservedWord("export", { es5: true });\n +\tFutureReservedWord("extends", { es5: true });\n +\tFutureReservedWord("final");\n +\tFutureReservedWord("float");\n +\tFutureReservedWord("goto");\n +\tFutureReservedWord("implements", { es5: true, strictOnly: true });\n +\tFutureReservedWord("import", { es5: true });\n +\tFutureReservedWord("int");\n +\tFutureReservedWord("interface", { es5: true, strictOnly: true });\n +\tFutureReservedWord("long");\n +\tFutureReservedWord("native");\n +\tFutureReservedWord("package", { es5: true, strictOnly: true });\n +\tFutureReservedWord("private", { es5: true, strictOnly: true });\n +\tFutureReservedWord("protected", { es5: true, strictOnly: true });\n +\tFutureReservedWord("public", { es5: true, strictOnly: true });\n +\tFutureReservedWord("short");\n +\tFutureReservedWord("static", { es5: true, strictOnly: true });\n +\tFutureReservedWord("super", { es5: true });\n +\tFutureReservedWord("synchronized");\n +\tFutureReservedWord("throws");\n +\tFutureReservedWord("transient");\n +\tFutureReservedWord("volatile");\n +\n +\tvar lookupBlockType = function () {\n +\t\tvar pn, pn1;\n +\t\tvar i = 0;\n +\t\tvar bracketStack = 0;\n +\t\tvar ret = {};\n +\t\tif (_.contains(["[", "{"], state.tokens.curr.value))\n +\t\t\tbracketStack += 1;\n +\t\tif (_.contains(["[", "{"], state.tokens.next.value))\n +\t\t\tbracketStack += 1;\n +\t\tif (_.contains(["]", "}"], state.tokens.next.value))\n +\t\t\tbracketStack -= 1;\n +\t\tdo {\n +\t\t\tpn = peek(i);\n +\t\t\tpn1 = peek(i + 1);\n +\t\t\ti = i + 1;\n +\t\t\tif (_.contains(["[", "{"], pn.value)) {\n +\t\t\t\tbracketStack += 1;\n +\t\t\t} else if (_.contains(["]", "}"], pn.value)) {\n +\t\t\t\tbracketStack -= 1;\n +\t\t\t}\n +\t\t\tif (pn.identifier && pn.value === "for" && bracketStack === 1) {\n +\t\t\t\tret.isCompArray = true;\n +\t\t\t\tret.notJson = true;\n +\t\t\t\tbreak;\n +\t\t\t}\n +\t\t\tif (_.contains(["}", "]"], pn.value) && pn1.value === "=") {\n +\t\t\t\tret.isDestAssign = true;\n +\t\t\t\tret.notJson = true;\n +\t\t\t\tbreak;\n +\t\t\t}\n +\t\t\tif (pn.value === ";") {\n +\t\t\t\tret.isBlock = true;\n +\t\t\t\tret.notJson = true;\n +\t\t\t}\n +\t\t} while (bracketStack > 0 && pn.id !== "(end)" && i < 15);\n +\t\treturn ret;\n +\t};\n +\tfunction destructuringAssignOrJsonValue() {\n +\n +\t\tvar block = lookupBlockType();\n +\t\tif (block.notJson) {\n +\t\t\tif (!state.option.inESNext() && block.isDestAssign) {\n +\t\t\t\twarning("W104", state.tokens.curr, "destructuring assignment");\n +\t\t\t}\n +\t\t\tstatements();\n +\t\t} else {\n +\t\t\tstate.option.laxbreak = true;\n +\t\t\tstate.jsonMode = true;\n +\t\t\tjsonValue();\n +\t\t}\n +\t}\n +\n +\tvar arrayComprehension = function () {\n +\t\tvar CompArray = function () {\n +\t\t\tthis.mode = "use";\n +\t\t\tthis.variables = [];\n +\t\t};\n +\t\tvar _carrays = [];\n +\t\tvar _current;\n +\t\tfunction declare(v) {\n +\t\t\tvar l = _current.variables.filter(function (elt) {\n +\t\t\t\tif (elt.value === v) {\n +\t\t\t\t\telt.undef = false;\n +\t\t\t\t\treturn v;\n +\t\t\t\t}\n +\t\t\t}).length;\n +\t\t\treturn l !== 0;\n +\t\t}\n +\t\tfunction use(v) {\n +\t\t\tvar l = _current.variables.filter(function (elt) {\n +\t\t\t\tif (elt.value === v && !elt.undef) {\n +\t\t\t\t\tif (elt.unused === true) {\n +\t\t\t\t\t\telt.unused = false;\n +\t\t\t\t\t}\n +\t\t\t\t\treturn v;\n +\t\t\t\t}\n +\t\t\t}).length;\n +\t\t\treturn (l === 0);\n +\t\t}\n +\t\treturn {stack: function () {\n +\t\t\t\t\t_current = new CompArray();\n +\t\t\t\t\t_carrays.push(_current);\n +\t\t\t\t},\n +\t\t\t\tunstack: function () {\n +\t\t\t\t\t_current.variables.filter(function (v) {\n +\t\t\t\t\t\tif (v.unused)\n +\t\t\t\t\t\t\twarning("W098", v.token, v.value);\n +\t\t\t\t\t\tif (v.undef)\n +\t\t\t\t\t\t\tisundef(v.funct, "W117", v.token, v.value);\n +\t\t\t\t\t});\n +\t\t\t\t\t_carrays.splice(_carrays[_carrays.length - 1], 1);\n +\t\t\t\t\t_current = _carrays[_carrays.length - 1];\n +\t\t\t\t},\n +\t\t\t\tsetState: function (s) {\n +\t\t\t\t\tif (_.contains(["use", "define", "filter"], s))\n +\t\t\t\t\t\t_current.mode = s;\n +\t\t\t\t},\n +\t\t\t\tcheck: function (v) {\n +\t\t\t\t\tif (_current && _current.mode === "use") {\n +\t\t\t\t\t\t_current.variables.push({funct: funct,\n +\t\t\t\t\t\t\t\t\t\t\t\t\ttoken: state.tokens.curr,\n +\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: v,\n +\t\t\t\t\t\t\t\t\t\t\t\t\tundef: true,\n +\t\t\t\t\t\t\t\t\t\t\t\t\tunused: false});\n +\t\t\t\t\t\treturn true;\n +\t\t\t\t\t} else if (_current && _current.mode === "define") {\n +\t\t\t\t\t\tif (!declare(v)) {\n +\t\t\t\t\t\t\t_current.variables.push({funct: funct,\n +\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoken: state.tokens.curr,\n +\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: v,\n +\t\t\t\t\t\t\t\t\t\t\t\t\t\tundef: false,\n +\t\t\t\t\t\t\t\t\t\t\t\t\t\tunused: true});\n +\t\t\t\t\t\t}\n +\t\t\t\t\t\treturn true;\n +\t\t\t\t\t} else if (_current && _current.mode === "filter") {\n +\t\t\t\t\t\tif (use(v)) {\n +\t\t\t\t\t\t\tisundef(funct, "W117", state.tokens.curr, v);\n +\t\t\t\t\t\t}\n +\t\t\t\t\t\treturn true;\n +\t\t\t\t\t}\n +\t\t\t\t\treturn false;\n +\t\t\t\t}\n +\t\t\t\t};\n +\t};\n \n \tfunction jsonValue() {\n \n \t\tfunction jsonObject() {\n -\t\t\tvar o = {}, t = nexttoken;\n +\t\t\tvar o = {}, t = state.tokens.next;\n \t\t\tadvance("{");\n -\t\t\tif (nexttoken.id !== "}") {\n +\t\t\tif (state.tokens.next.id !== "}") {\n \t\t\t\tfor (;;) {\n -\t\t\t\t\tif (nexttoken.id === "(end)") {\n -\t\t\t\t\t\terror("Missing \'}\' to match \'{\' from line {a}.",\n -\t\t\t\t\t\t\t\tnexttoken, t.line);\n -\t\t\t\t\t} else if (nexttoken.id === "}") {\n -\t\t\t\t\t\twarning("Unexpected comma.", token);\n +\t\t\t\t\tif (state.tokens.next.id === "(end)") {\n +\t\t\t\t\t\terror("E026", state.tokens.next, t.line);\n +\t\t\t\t\t} else if (state.tokens.next.id === "}") {\n +\t\t\t\t\t\twarning("W094", state.tokens.curr);\n \t\t\t\t\t\tbreak;\n -\t\t\t\t\t} else if (nexttoken.id === ",") {\n -\t\t\t\t\t\terror("Unexpected comma.", nexttoken);\n -\t\t\t\t\t} else if (nexttoken.id !== "(string)") {\n -\t\t\t\t\t\twarning("Expected a string and instead saw {a}.",\n -\t\t\t\t\t\t\t\tnexttoken, nexttoken.value);\n +\t\t\t\t\t} else if (state.tokens.next.id === ",") {\n +\t\t\t\t\t\terror("E028", state.tokens.next);\n +\t\t\t\t\t} else if (state.tokens.next.id !== "(string)") {\n +\t\t\t\t\t\twarning("W095", state.tokens.next, state.tokens.next.value);\n \t\t\t\t\t}\n -\t\t\t\t\tif (o[nexttoken.value] === true) {\n -\t\t\t\t\t\twarning("Duplicate key \'{a}\'.",\n -\t\t\t\t\t\t\t\tnexttoken, nexttoken.value);\n -\t\t\t\t\t} else if ((nexttoken.value === "__proto__" &&\n -\t\t\t\t\t\t!option.proto) || (nexttoken.value === "__iterator__" &&\n -\t\t\t\t\t\t!option.iterator)) {\n -\t\t\t\t\t\twarning("The \'{a}\' key may produce unexpected results.",\n -\t\t\t\t\t\t\tnexttoken, nexttoken.value);\n +\t\t\t\t\tif (o[state.tokens.next.value] === true) {\n +\t\t\t\t\t\twarning("W075", state.tokens.next, state.tokens.next.value);\n +\t\t\t\t\t} else if ((state.tokens.next.value === "__proto__" &&\n +\t\t\t\t\t\t!state.option.proto) || (state.tokens.next.value === "__iterator__" &&\n +\t\t\t\t\t\t!state.option.iterator)) {\n +\t\t\t\t\t\twarning("W096", state.tokens.next, state.tokens.next.value);\n \t\t\t\t\t} else {\n -\t\t\t\t\t\to[nexttoken.value] = true;\n +\t\t\t\t\t\to[state.tokens.next.value] = true;\n \t\t\t\t\t}\n \t\t\t\t\tadvance();\n \t\t\t\t\tadvance(":");\n \t\t\t\t\tjsonValue();\n -\t\t\t\t\tif (nexttoken.id !== ",") {\n +\t\t\t\t\tif (state.tokens.next.id !== ",") {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n \t\t\t\t\tadvance(",");\n @@ -6122,21 +7838,20 @@ klass:\n \t\t}\n \n \t\tfunction jsonArray() {\n -\t\t\tvar t = nexttoken;\n +\t\t\tvar t = state.tokens.next;\n \t\t\tadvance("[");\n -\t\t\tif (nexttoken.id !== "]") {\n +\t\t\tif (state.tokens.next.id !== "]") {\n \t\t\t\tfor (;;) {\n -\t\t\t\t\tif (nexttoken.id === "(end)") {\n -\t\t\t\t\t\terror("Missing \']\' to match \'[\' from line {a}.",\n -\t\t\t\t\t\t\t\tnexttoken, t.line);\n -\t\t\t\t\t} else if (nexttoken.id === "]") {\n -\t\t\t\t\t\twarning("Unexpected comma.", token);\n +\t\t\t\t\tif (state.tokens.next.id === "(end)") {\n +\t\t\t\t\t\terror("E027", state.tokens.next, t.line);\n +\t\t\t\t\t} else if (state.tokens.next.id === "]") {\n +\t\t\t\t\t\twarning("W094", state.tokens.curr);\n \t\t\t\t\t\tbreak;\n -\t\t\t\t\t} else if (nexttoken.id === ",") {\n -\t\t\t\t\t\terror("Unexpected comma.", nexttoken);\n +\t\t\t\t\t} else if (state.tokens.next.id === ",") {\n +\t\t\t\t\t\terror("E028", state.tokens.next);\n \t\t\t\t\t}\n \t\t\t\t\tjsonValue();\n -\t\t\t\t\tif (nexttoken.id !== ",") {\n +\t\t\t\t\tif (state.tokens.next.id !== ",") {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n \t\t\t\t\tadvance(",");\n @@ -6145,7 +7860,7 @@ klass:\n \t\t\tadvance("]");\n \t\t}\n \n -\t\tswitch (nexttoken.id) {\n +\t\tswitch (state.tokens.next.id) {\n \t\tcase "{":\n \t\t\tjsonObject();\n \t\t\tbreak;\n @@ -6161,20 +7876,72 @@ klass:\n \t\t\tbreak;\n \t\tcase "-":\n \t\t\tadvance("-");\n -\t\t\tif (token.character !== nexttoken.from) {\n -\t\t\t\twarning("Unexpected space after \'-\'.", token);\n +\t\t\tif (state.tokens.curr.character !== state.tokens.next.from) {\n +\t\t\t\twarning("W011", state.tokens.curr);\n \t\t\t}\n -\t\t\tadjacent(token, nexttoken);\n +\t\t\tadjacent(state.tokens.curr, state.tokens.next);\n \t\t\tadvance("(number)");\n \t\t\tbreak;\n \t\tdefault:\n -\t\t\terror("Expected a JSON value.", nexttoken);\n +\t\t\terror("E003", state.tokens.next);\n \t\t}\n \t}\n -\tvar itself = function (s, o, g) {\n -\t\tvar a, i, k, x;\n -\t\tvar optionKeys;\n +\n +\tvar blockScope = function () {\n +\t\tvar _current = {};\n +\t\tvar _variables = [_current];\n +\n +\t\tfunction _checkBlockLabels() {\n +\t\t\tfor (var t in _current) {\n +\t\t\t\tif (_current[t]["(type)"] === "unused") {\n +\t\t\t\t\tif (state.option.unused) {\n +\t\t\t\t\t\tvar tkn = _current[t]["(token)"];\n +\t\t\t\t\t\tvar line = tkn.line;\n +\t\t\t\t\t\tvar chr = tkn.character;\n +\t\t\t\t\t\twarningAt("W098", line, chr, t);\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\t\t\t}\n +\t\t}\n +\n +\t\treturn {\n +\t\t\tstack: function () {\n +\t\t\t\t_current = {};\n +\t\t\t\t_variables.push(_current);\n +\t\t\t},\n +\n +\t\t\tunstack: function () {\n +\t\t\t\t_checkBlockLabels();\n +\t\t\t\t_variables.splice(_variables.length - 1, 1);\n +\t\t\t\t_current = _.last(_variables);\n +\t\t\t},\n +\n +\t\t\tgetlabel: function (l) {\n +\t\t\t\tfor (var i = _variables.length - 1 ; i >= 0; --i) {\n +\t\t\t\t\tif (_.has(_variables[i], l)) {\n +\t\t\t\t\t\treturn _variables[i];\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\t\t\t},\n +\n +\t\t\tcurrent: {\n +\t\t\t\thas: function (t) {\n +\t\t\t\t\treturn _.has(_current, t);\n +\t\t\t\t},\n +\t\t\t\tadd: function (t, type, tok) {\n +\t\t\t\t\t_current[t] = { "(type)" : type,\n +\t\t\t\t\t\t\t\t\t"(token)": tok };\n +\t\t\t\t}\n +\t\t\t}\n +\t\t};\n +\t};\n +\tvar itself = function (s, o, g) {\n +\t\tvar i, k, x;\n +\t\tvar optionKeys;\n \t\tvar newOptionObj = {};\n +\t\tvar newIgnoredObj = {};\n +\n +\t\tstate.reset();\n \n \t\tif (o && o.scope) {\n \t\t\tJSHINT.scope = o.scope;\n @@ -6186,48 +7953,67 @@ klass:\n \t\t\tJSHINT.scope = "(main)";\n \t\t}\n \n -\t\tpredefined = Object.create(standard);\n -\t\tdeclared = Object.create(null);\n +\t\tpredefined = Object.create(null);\n +\t\tcombine(predefined, vars.ecmaIdentifiers);\n +\t\tcombine(predefined, vars.reservedVars);\n +\n \t\tcombine(predefined, g || {});\n \n +\t\tdeclared = Object.create(null);\n +\t\texported = Object.create(null);\n +\n +\t\tfunction each(obj, cb) {\n +\t\t\tif (!obj)\n +\t\t\t\treturn;\n +\n +\t\t\tif (!Array.isArray(obj) && typeof obj === "object")\n +\t\t\t\tobj = Object.keys(obj);\n +\n +\t\t\tobj.forEach(cb);\n +\t\t}\n +\n \t\tif (o) {\n -\t\t\ta = o.predef;\n -\t\t\tif (a) {\n -\t\t\t\tif (!Array.isArray(a) && typeof a === "object") {\n -\t\t\t\t\ta = Object.keys(a);\n -\t\t\t\t}\n -\t\t\t\ta.forEach(function (item) {\n -\t\t\t\t\tvar slice;\n -\t\t\t\t\tif (item[0] === "-") {\n -\t\t\t\t\t\tslice = item.slice(1);\n -\t\t\t\t\t\tJSHINT.blacklist[slice] = slice;\n -\t\t\t\t\t} else {\n -\t\t\t\t\t\tpredefined[item] = true;\n -\t\t\t\t\t}\n -\t\t\t\t});\n -\t\t\t}\n +\t\t\teach(o.predef || null, function (item) {\n +\t\t\t\tvar slice, prop;\n +\n +\t\t\t\tif (item[0] === "-") {\n +\t\t\t\t\tslice = item.slice(1);\n +\t\t\t\t\tJSHINT.blacklist[slice] = slice;\n +\t\t\t\t} else {\n +\t\t\t\t\tprop = Object.getOwnPropertyDescriptor(o.predef, item);\n +\t\t\t\t\tpredefined[item] = prop ? prop.value : false;\n +\t\t\t\t}\n +\t\t\t});\n +\n +\t\t\teach(o.exported || null, function (item) {\n +\t\t\t\texported[item] = true;\n +\t\t\t});\n +\n +\t\t\tdelete o.predef;\n +\t\t\tdelete o.exported;\n \n \t\t\toptionKeys = Object.keys(o);\n \t\t\tfor (x = 0; x < optionKeys.length; x++) {\n -\t\t\t\tnewOptionObj[optionKeys[x]] = o[optionKeys[x]];\n +\t\t\t\tif (/^-W\\d{3}$/g.test(optionKeys[x])) {\n +\t\t\t\t\tnewIgnoredObj[optionKeys[x].slice(1)] = true;\n +\t\t\t\t} else {\n +\t\t\t\t\tnewOptionObj[optionKeys[x]] = o[optionKeys[x]];\n \n -\t\t\t\tif (optionKeys[x] === "newcap" && o[optionKeys[x]] === false)\n -\t\t\t\t\tnewOptionObj["(explicitNewcap)"] = true;\n +\t\t\t\t\tif (optionKeys[x] === "newcap" && o[optionKeys[x]] === false)\n +\t\t\t\t\t\tnewOptionObj["(explicitNewcap)"] = true;\n \n -\t\t\t\tif (optionKeys[x] === "indent")\n -\t\t\t\t\tnewOptionObj.white = true;\n +\t\t\t\t\tif (optionKeys[x] === "indent")\n +\t\t\t\t\t\tnewOptionObj["(explicitIndent)"] = o[optionKeys[x]] === false ? false : true;\n +\t\t\t\t}\n \t\t\t}\n \t\t}\n \n -\t\toption = newOptionObj;\n +\t\tstate.option = newOptionObj;\n +\t\tstate.ignored = newIgnoredObj;\n \n -\t\toption.indent = option.indent || 4;\n -\t\toption.maxerr = option.maxerr || 50;\n +\t\tstate.option.indent = state.option.indent || 4;\n +\t\tstate.option.maxerr = state.option.maxerr || 50;\n \n -\t\ttab = "";\n -\t\tfor (i = 0; i < option.indent; i += 1) {\n -\t\t\ttab += " ";\n -\t\t}\n \t\tindent = 1;\n \t\tglobal = Object.create(predefined);\n \t\tscope = global;\n @@ -6238,7 +8024,9 @@ klass:\n \t\t\t"(breakage)": 0,\n \t\t\t"(loopage)": 0,\n \t\t\t"(tokens)": {},\n -\t\t\t"(metrics)": createMetrics(nexttoken)\n +\t\t\t"(metrics)": createMetrics(state.tokens.next),\n +\t\t\t"(blockscope)": blockScope(),\n +\t\t\t"(comparray)": arrayComprehension()\n \t\t};\n \t\tfunctions = [funct];\n \t\turls = [];\n @@ -6248,61 +8036,106 @@ klass:\n \t\timplied = {};\n \t\tinblock = false;\n \t\tlookahead = [];\n -\t\tjsonmode = false;\n \t\twarnings = 0;\n -\t\tlines = [];\n \t\tunuseds = [];\n \n \t\tif (!isString(s) && !Array.isArray(s)) {\n -\t\t\terrorAt("Input is neither a string nor an array of strings.", 0);\n +\t\t\terrorAt("E004", 0);\n \t\t\treturn false;\n \t\t}\n \n -\t\tif (isString(s) && /^\\s*$/g.test(s)) {\n -\t\t\terrorAt("Input is an empty string.", 0);\n -\t\t\treturn false;\n -\t\t}\n +\t\tapi = {\n +\t\t\tget isJSON() {\n +\t\t\t\treturn state.jsonMode;\n +\t\t\t},\n \n -\t\tif (s.length === 0) {\n -\t\t\terrorAt("Input is an empty array.", 0);\n -\t\t\treturn false;\n -\t\t}\n +\t\t\tgetOption: function (name) {\n +\t\t\t\treturn state.option[name] || null;\n +\t\t\t},\n +\n +\t\t\tgetCache: function (name) {\n +\t\t\t\treturn state.cache[name];\n +\t\t\t},\n +\n +\t\t\tsetCache: function (name, value) {\n +\t\t\t\tstate.cache[name] = value;\n +\t\t\t},\n +\n +\t\t\twarn: function (code, data) {\n +\t\t\t\twarningAt.apply(null, [ code, data.line, data.char ].concat(data.data));\n +\t\t\t},\n +\n +\t\t\ton: function (names, listener) {\n +\t\t\t\tnames.split(" ").forEach(function (name) {\n +\t\t\t\t\temitter.on(name, listener);\n +\t\t\t\t}.bind(this));\n +\t\t\t}\n +\t\t};\n +\n +\t\temitter.removeAllListeners();\n +\t\t(extraModules || []).forEach(function (func) {\n +\t\t\tfunc(api);\n +\t\t});\n +\n +\t\tstate.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax["(begin)"];\n +\n +\t\tlex = new Lexer(s);\n \n -\t\tlex.init(s);\n +\t\tlex.on("warning", function (ev) {\n +\t\t\twarningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data));\n +\t\t});\n +\n +\t\tlex.on("error", function (ev) {\n +\t\t\terrorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data));\n +\t\t});\n +\n +\t\tlex.on("fatal", function (ev) {\n +\t\t\tquit("E041", ev.line, ev.from);\n +\t\t});\n +\n +\t\tlex.on("Identifier", function (ev) {\n +\t\t\temitter.emit("Identifier", ev);\n +\t\t});\n +\n +\t\tlex.on("String", function (ev) {\n +\t\t\temitter.emit("String", ev);\n +\t\t});\n \n -\t\tprereg = true;\n -\t\tdirective = {};\n +\t\tlex.on("Number", function (ev) {\n +\t\t\temitter.emit("Number", ev);\n +\t\t});\n \n -\t\tprevtoken = token = nexttoken = syntax["(begin)"];\n +\t\tlex.start();\n \t\tfor (var name in o) {\n -\t\t\tif (is_own(o, name)) {\n -\t\t\t\tcheckOption(name, token);\n +\t\t\tif (_.has(o, name)) {\n +\t\t\t\tcheckOption(name, state.tokens.curr);\n \t\t\t}\n \t\t}\n \n \t\tassume();\n \t\tcombine(predefined, g || {});\n \t\tcomma.first = true;\n -\t\tquotmark = undefined;\n \n \t\ttry {\n \t\t\tadvance();\n -\t\t\tswitch (nexttoken.id) {\n +\t\t\tswitch (state.tokens.next.id) {\n \t\t\tcase "{":\n \t\t\tcase "[":\n -\t\t\t\toption.laxbreak = true;\n -\t\t\t\tjsonmode = true;\n -\t\t\t\tjsonValue();\n +\t\t\t\tdestructuringAssignOrJsonValue();\n \t\t\t\tbreak;\n \t\t\tdefault:\n \t\t\t\tdirectives();\n -\t\t\t\tif (directive["use strict"] && !option.globalstrict) {\n -\t\t\t\t\twarning("Use the function form of \\"use strict\\".", prevtoken);\n +\n +\t\t\t\tif (state.directive["use strict"]) {\n +\t\t\t\t\tif (!state.option.globalstrict && !state.option.node) {\n +\t\t\t\t\t\twarning("W097", state.tokens.prev);\n +\t\t\t\t\t}\n \t\t\t\t}\n \n \t\t\t\tstatements();\n \t\t\t}\n -\t\t\tadvance((nexttoken && nexttoken.value !== ".")\t? "(end)" : undefined);\n +\t\t\tadvance((state.tokens.next && state.tokens.next.value !== ".")\t? "(end)" : undefined);\n +\t\t\tfunct["(blockscope)"].unstack();\n \n \t\t\tvar markDefined = function (name, context) {\n \t\t\t\tdo {\n @@ -6338,12 +8171,29 @@ klass:\n \t\t\t\t\timplied[name] = newImplied;\n \t\t\t};\n \n -\t\t\tvar warnUnused = function (name, token) {\n -\t\t\t\tvar line = token.line;\n -\t\t\t\tvar chr = token.character;\n +\t\t\tvar warnUnused = function (name, tkn, type, unused_opt) {\n +\t\t\t\tvar line = tkn.line;\n +\t\t\t\tvar chr = tkn.character;\n +\n +\t\t\t\tif (unused_opt === undefined) {\n +\t\t\t\t\tunused_opt = state.option.unused;\n +\t\t\t\t}\n +\n +\t\t\t\tif (unused_opt === true) {\n +\t\t\t\t\tunused_opt = "last-param";\n +\t\t\t\t}\n +\n +\t\t\t\tvar warnable_types = {\n +\t\t\t\t\t"vars": ["var"],\n +\t\t\t\t\t"last-param": ["var", "param"],\n +\t\t\t\t\t"strict": ["var", "param", "last-param"]\n +\t\t\t\t};\n \n -\t\t\t\tif (option.unused)\n -\t\t\t\t\twarningAt("\'{a}\' is defined but never used.", line, chr, name);\n +\t\t\t\tif (unused_opt) {\n +\t\t\t\t\tif (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) {\n +\t\t\t\t\t\twarningAt("W098", line, chr, name);\n +\t\t\t\t\t}\n +\t\t\t\t}\n \n \t\t\t\tunuseds.push({\n \t\t\t\t\tname: name,\n @@ -6354,7 +8204,7 @@ klass:\n \n \t\t\tvar checkUnused = function (func, key) {\n \t\t\t\tvar type = func[key];\n -\t\t\t\tvar token = func["(tokens)"][key];\n +\t\t\t\tvar tkn = func["(tokens)"][key];\n \n \t\t\t\tif (key.charAt(0) === "(")\n \t\t\t\t\treturn;\n @@ -6363,22 +8213,29 @@ klass:\n \t\t\t\t\treturn;\n \t\t\t\tif (func["(params)"] && func["(params)"].indexOf(key) !== -1)\n \t\t\t\t\treturn;\n +\t\t\t\tif (func["(global)"] && _.has(exported, key)) {\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n \n -\t\t\t\twarnUnused(key, token);\n +\t\t\t\twarnUnused(key, tkn, "var");\n \t\t\t};\n \t\t\tfor (i = 0; i < JSHINT.undefs.length; i += 1) {\n \t\t\t\tk = JSHINT.undefs[i].slice(0);\n \n \t\t\t\tif (markDefined(k[2].value, k[0])) {\n \t\t\t\t\tclearImplied(k[2].value, k[2].line);\n -\t\t\t\t} else {\n +\t\t\t\t} else if (state.option.undef) {\n \t\t\t\t\twarning.apply(warning, k.slice(1));\n \t\t\t\t}\n \t\t\t}\n \n \t\t\tfunctions.forEach(function (func) {\n +\t\t\t\tif (func["(unusedOption)"] === false) {\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n +\n \t\t\t\tfor (var key in func) {\n -\t\t\t\t\tif (is_own(func, key)) {\n +\t\t\t\t\tif (_.has(func, key)) {\n \t\t\t\t\t\tcheckUnused(func, key);\n \t\t\t\t\t}\n \t\t\t\t}\n @@ -6388,36 +8245,45 @@ klass:\n \n \t\t\t\tvar params = func["(params)"].slice();\n \t\t\t\tvar param = params.pop();\n -\t\t\t\tvar type;\n +\t\t\t\tvar type, unused_opt;\n \n \t\t\t\twhile (param) {\n \t\t\t\t\ttype = func[param];\n +\t\t\t\t\tunused_opt = func["(unusedOption)"] || state.option.unused;\n +\t\t\t\t\tunused_opt = unused_opt === true ? "last-param" : unused_opt;\n \n \t\t\t\t\tif (param === "undefined")\n \t\t\t\t\t\treturn;\n \n -\t\t\t\t\tif (type !== "unused" && type !== "unction")\n +\t\t\t\t\tif (type === "unused" || type === "unction") {\n +\t\t\t\t\t\twarnUnused(param, func["(tokens)"][param], "param", func["(unusedOption)"]);\n +\t\t\t\t\t} else if (unused_opt === "last-param") {\n \t\t\t\t\t\treturn;\n +\t\t\t\t\t}\n \n -\t\t\t\t\twarnUnused(param, func["(tokens)"][param]);\n \t\t\t\t\tparam = params.pop();\n \t\t\t\t}\n \t\t\t});\n \n \t\t\tfor (var key in declared) {\n -\t\t\t\tif (is_own(declared, key) && !is_own(global, key)) {\n -\t\t\t\t\twarnUnused(key, declared[key]);\n +\t\t\t\tif (_.has(declared, key) && !_.has(global, key)) {\n +\t\t\t\t\twarnUnused(key, declared[key], "var");\n \t\t\t\t}\n \t\t\t}\n -\t\t} catch (e) {\n -\t\t\tif (e) {\n -\t\t\t\tvar nt = nexttoken || {};\n +\n +\t\t} catch (err) {\n +\t\t\tif (err && err.name === "JSHintError") {\n +\t\t\t\tvar nt = state.tokens.next || {};\n \t\t\t\tJSHINT.errors.push({\n -\t\t\t\t\traw\t\t : e.raw,\n -\t\t\t\t\treason\t : e.message,\n -\t\t\t\t\tline\t : e.line || nt.line,\n -\t\t\t\t\tcharacter : e.character || nt.from\n +\t\t\t\t\tscope : "(main)",\n +\t\t\t\t\traw : err.raw,\n +\t\t\t\t\tcode : err.code,\n +\t\t\t\t\treason : err.message,\n +\t\t\t\t\tline : err.line || nt.line,\n +\t\t\t\t\tcharacter : err.character || nt.from\n \t\t\t\t}, null);\n +\t\t\t} else {\n +\t\t\t\tthrow err;\n \t\t\t}\n \t\t}\n \n @@ -6433,10 +8299,15 @@ klass:\n \n \t\treturn JSHINT.errors.length === 0;\n \t};\n +\titself.addModule = function (func) {\n +\t\textraModules.push(func);\n +\t};\n +\n +\titself.addModule(style.register);\n \titself.data = function () {\n \t\tvar data = {\n \t\t\tfunctions: [],\n -\t\t\toptions: option\n +\t\t\toptions: state.option\n \t\t};\n \t\tvar implieds = [];\n \t\tvar members = [];\n @@ -6446,12 +8317,12 @@ klass:\n \t\t\tdata.errors = itself.errors;\n \t\t}\n \n -\t\tif (jsonmode) {\n +\t\tif (state.jsonMode) {\n \t\t\tdata.json = true;\n \t\t}\n \n \t\tfor (n in implied) {\n -\t\t\tif (is_own(implied, n)) {\n +\t\t\tif (_.has(implied, n)) {\n \t\t\t\timplieds.push({\n \t\t\t\t\tname: n,\n \t\t\t\t\tline: implied[n]\n @@ -6518,6 +8389,1822 @@ if (typeof exports === "object" && exports) {\n \texports.JSHINT = JSHINT;\n }\n \n +},\n +{"../shared/messages.js":2,"../shared/vars.js":3,"./lex.js":5,"./reg.js":6,"./state.js":7,"./style.js":8,"console-browserify":9,"events":10,"underscore":1}],\n +5:[function(req,module,exports){\n +\n +\n +\n +var _ = req("underscore");\n +var events = req("events");\n +var reg = req("./reg.js");\n +var state = req("./state.js").state;\n +\n +var Token = {\n +\tIdentifier: 1,\n +\tPunctuator: 2,\n +\tNumericLiteral: 3,\n +\tStringLiteral: 4,\n +\tComment: 5,\n +\tKeyword: 6,\n +\tNullLiteral: 7,\n +\tBooleanLiteral: 8,\n +\tRegExp: 9\n +};\n +\n +var unicodeLetterTable = [\n +\t170, 170, 181, 181, 186, 186, 192, 214,\n +\t216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750,\n +\t880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908,\n +\t910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366,\n +\t1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610,\n +\t1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775,\n +\t1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957,\n +\t1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069,\n +\t2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2308, 2361,\n +\t2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431,\n +\t2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482,\n +\t2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\n +\t2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608,\n +\t2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654,\n +\t2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736,\n +\t2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785,\n +\t2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867,\n +\t2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929,\n +\t2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970,\n +\t2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001,\n +\t3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123,\n +\t3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212,\n +\t3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261,\n +\t3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344,\n +\t3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\n +\t3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526,\n +\t3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716,\n +\t3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743,\n +\t3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760,\n +\t3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805,\n +\t3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138,\n +\t4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198,\n +\t4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4304, 4346,\n +\t4348, 4348, 4352, 4680, 4682, 4685, 4688, 4694, 4696, 4696,\n +\t4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789,\n +\t4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880,\n +\t4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740,\n +\t5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900,\n +\t5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000,\n +\t6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312,\n +\t6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516,\n +\t6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823,\n +\t6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7104, 7141,\n +\t7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409,\n +\t7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013,\n +\t8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061,\n +\t8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140,\n +\t8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\n +\t8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455,\n +\t8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486,\n +\t8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521,\n +\t8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358,\n +\t11360, 11492, 11499, 11502, 11520, 11557, 11568, 11621,\n +\t11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694,\n +\t11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726,\n +\t11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295,\n +\t12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438,\n +\t12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589,\n +\t12593, 12686, 12704, 12730, 12784, 12799, 13312, 13312,\n +\t19893, 19893, 19968, 19968, 40907, 40907, 40960, 42124,\n +\t42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539,\n +\t42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783,\n +\t42786, 42888, 42891, 42894, 42896, 42897, 42912, 42921,\n +\t43002, 43009, 43011, 43013, 43015, 43018, 43020, 43042,\n +\t43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\n +\t43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442,\n +\t43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595,\n +\t43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697,\n +\t43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714,\n +\t43739, 43741, 43777, 43782, 43785, 43790, 43793, 43798,\n +\t43808, 43814, 43816, 43822, 43968, 44002, 44032, 44032,\n +\t55203, 55203, 55216, 55238, 55243, 55291, 63744, 64045,\n +\t64048, 64109, 64112, 64217, 64256, 64262, 64275, 64279,\n +\t64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316,\n +\t64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433,\n +\t64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\n +\t65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370,\n +\t65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495,\n +\t65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594,\n +\t65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786,\n +\t65856, 65908, 66176, 66204, 66208, 66256, 66304, 66334,\n +\t66352, 66378, 66432, 66461, 66464, 66499, 66504, 66511,\n +\t66513, 66517, 66560, 66717, 67584, 67589, 67592, 67592,\n +\t67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669,\n +\t67840, 67861, 67872, 67897, 68096, 68096, 68112, 68115,\n +\t68117, 68119, 68121, 68147, 68192, 68220, 68352, 68405,\n +\t68416, 68437, 68448, 68466, 68608, 68680, 69635, 69687,\n +\t69763, 69807, 73728, 74606, 74752, 74850, 77824, 78894,\n +\t92160, 92728, 110592, 110593, 119808, 119892, 119894, 119964,\n +\t119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980,\n +\t119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069,\n +\t120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121,\n +\t120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144,\n +\t120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570,\n +\t120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686,\n +\t120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779,\n +\t131072, 131072, 173782, 173782, 173824, 173824, 177972, 177972,\n +\t177984, 177984, 178205, 178205, 194560, 195101\n +];\n +\n +var identifierStartTable = [];\n +\n +for (var i = 0; i < 128; i++) {\n +\tidentifierStartTable[i] =\n +\t\ti === 36 || // $\n +\t\ti >= 65 && i <= 90 || // A-Z\n +\t\ti === 95 || // _\n +\t\ti >= 97 && i <= 122; // a-z\n +}\n +\n +var identifierPartTable = [];\n +\n +for (var i = 0; i < 128; i++) {\n +\tidentifierPartTable[i] =\n +\t\tidentifierStartTable[i] || // $, _, A-Z, a-z\n +\t\ti >= 48 && i <= 57; // 0-9\n +}\n +\n +function asyncTrigger() {\n +\tvar _checks = [];\n +\n +\treturn {\n +\t\tpush: function (fn) {\n +\t\t\t_checks.push(fn);\n +\t\t},\n +\n +\t\tcheck: function () {\n +\t\t\tfor (var check = 0; check < _checks.length; ++check) {\n +\t\t\t\t_checks[check]();\n +\t\t\t}\n +\n +\t\t\t_checks.splice(0, _checks.length);\n +\t\t}\n +\t};\n +}\n +function Lexer(source) {\n +\tvar lines = source;\n +\n +\tif (typeof lines === "string") {\n +\t\tlines = lines\n +\t\t\t.replace(/\\r\\n/g, "\\n")\n +\t\t\t.replace(/\\r/g, "\\n")\n +\t\t\t.split("\\n");\n +\t}\n +\n +\tif (lines[0] && lines[0].substr(0, 2) === "#!") {\n +\t\tlines[0] = "";\n +\t}\n +\n +\tthis.emitter = new events.EventEmitter();\n +\tthis.source = source;\n +\tthis.setLines(lines);\n +\tthis.prereg = true;\n +\n +\tthis.line = 0;\n +\tthis.char = 1;\n +\tthis.from = 1;\n +\tthis.input = "";\n +\n +\tfor (var i = 0; i < state.option.indent; i += 1) {\n +\t\tstate.tab += " ";\n +\t}\n +}\n +\n +Lexer.prototype = {\n +\t_lines: [],\n +\n +\tgetLines: function () {\n +\t\tthis._lines = state.lines;\n +\t\treturn this._lines;\n +\t},\n +\n +\tsetLines: function (val) {\n +\t\tthis._lines = val;\n +\t\tstate.lines = this._lines;\n +\t},\n +\tpeek: function (i) {\n +\t\treturn this.input.charAt(i || 0);\n +\t},\n +\tskip: function (i) {\n +\t\ti = i || 1;\n +\t\tthis.char += i;\n +\t\tthis.input = this.input.slice(i);\n +\t},\n +\ton: function (names, listener) {\n +\t\tnames.split(" ").forEach(function (name) {\n +\t\t\tthis.emitter.on(name, listener);\n +\t\t}.bind(this));\n +\t},\n +\ttrigger: function () {\n +\t\tthis.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments));\n +\t},\n +\ttriggerAsync: function (type, args, checks, fn) {\n +\t\tchecks.push(function () {\n +\t\t\tif (fn()) {\n +\t\t\t\tthis.trigger(type, args);\n +\t\t\t}\n +\t\t}.bind(this));\n +\t},\n +\tscanPunctuator: function () {\n +\t\tvar ch1 = this.peek();\n +\t\tvar ch2, ch3, ch4;\n +\n +\t\tswitch (ch1) {\n +\t\tcase ".":\n +\t\t\tif ((/^[0-9]$/).test(this.peek(1))) {\n +\t\t\t\treturn null;\n +\t\t\t}\n +\t\t\tif (this.peek(1) === "." && this.peek(2) === ".") {\n +\t\t\t\treturn {\n +\t\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\t\tvalue: "..."\n +\t\t\t\t};\n +\t\t\t}\n +\t\tcase "(":\n +\t\tcase ")":\n +\t\tcase ";":\n +\t\tcase ",":\n +\t\tcase "{":\n +\t\tcase "}":\n +\t\tcase "[":\n +\t\tcase "]":\n +\t\tcase ":":\n +\t\tcase "~":\n +\t\tcase "?":\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: ch1\n +\t\t\t};\n +\t\tcase "#":\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: ch1\n +\t\t\t};\n +\t\tcase "":\n +\t\t\treturn null;\n +\t\t}\n +\n +\t\tch2 = this.peek(1);\n +\t\tch3 = this.peek(2);\n +\t\tch4 = this.peek(3);\n +\n +\t\tif (ch1 === ">" && ch2 === ">" && ch3 === ">" && ch4 === "=") {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: ">>>="\n +\t\t\t};\n +\t\t}\n +\n +\t\tif (ch1 === "=" && ch2 === "=" && ch3 === "=") {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: "==="\n +\t\t\t};\n +\t\t}\n +\n +\t\tif (ch1 === "!" && ch2 === "=" && ch3 === "=") {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: "!=="\n +\t\t\t};\n +\t\t}\n +\n +\t\tif (ch1 === ">" && ch2 === ">" && ch3 === ">") {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: ">>>"\n +\t\t\t};\n +\t\t}\n +\n +\t\tif (ch1 === "<" && ch2 === "<" && ch3 === "=") {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: "<<="\n +\t\t\t};\n +\t\t}\n +\n +\t\tif (ch1 === ">" && ch2 === ">" && ch3 === "=") {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: ">>="\n +\t\t\t};\n +\t\t}\n +\t\tif (ch1 === "=" && ch2 === ">") {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: ch1 + ch2\n +\t\t\t};\n +\t\t}\n +\t\tif (ch1 === ch2 && ("+-<>&|".indexOf(ch1) >= 0)) {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: ch1 + ch2\n +\t\t\t};\n +\t\t}\n +\n +\t\tif ("<>=!+-*%&|^".indexOf(ch1) >= 0) {\n +\t\t\tif (ch2 === "=") {\n +\t\t\t\treturn {\n +\t\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\t\tvalue: ch1 + ch2\n +\t\t\t\t};\n +\t\t\t}\n +\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: ch1\n +\t\t\t};\n +\t\t}\n +\n +\t\tif (ch1 === "/") {\n +\t\t\tif (ch2 === "=" && /\\/=(?!(\\S*\\/[gim]?))/.test(this.input)) {\n +\t\t\t\treturn {\n +\t\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\t\tvalue: "/="\n +\t\t\t\t};\n +\t\t\t}\n +\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Punctuator,\n +\t\t\t\tvalue: "/"\n +\t\t\t};\n +\t\t}\n +\n +\t\treturn null;\n +\t},\n +\tscanComments: function () {\n +\t\tvar ch1 = this.peek();\n +\t\tvar ch2 = this.peek(1);\n +\t\tvar rest = this.input.substr(2);\n +\t\tvar startLine = this.line;\n +\t\tvar startChar = this.char;\n +\n +\t\tfunction commentToken(label, body, opt) {\n +\t\t\tvar special = ["jshint", "jslint", "members", "member", "globals", "global", "exported"];\n +\t\t\tvar isSpecial = false;\n +\t\t\tvar value = label + body;\n +\t\t\tvar commentType = "plain";\n +\t\t\topt = opt || {};\n +\n +\t\t\tif (opt.isMultiline) {\n +\t\t\t\tvalue += "*/";\n +\t\t\t}\n +\n +\t\t\tspecial.forEach(function (str) {\n +\t\t\t\tif (isSpecial) {\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n +\t\t\t\tif (label === "//" && str !== "jshint") {\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n +\n +\t\t\t\tif (body.substr(0, str.length) === str) {\n +\t\t\t\t\tisSpecial = true;\n +\t\t\t\t\tlabel = label + str;\n +\t\t\t\t\tbody = body.substr(str.length);\n +\t\t\t\t}\n +\n +\t\t\t\tif (!isSpecial && body.charAt(0) === " " && body.substr(1, str.length) === str) {\n +\t\t\t\t\tisSpecial = true;\n +\t\t\t\t\tlabel = label + " " + str;\n +\t\t\t\t\tbody = body.substr(str.length + 1);\n +\t\t\t\t}\n +\n +\t\t\t\tif (!isSpecial) {\n +\t\t\t\t\treturn;\n +\t\t\t\t}\n +\n +\t\t\t\tswitch (str) {\n +\t\t\t\tcase "member":\n +\t\t\t\t\tcommentType = "members";\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "global":\n +\t\t\t\t\tcommentType = "globals";\n +\t\t\t\t\tbreak;\n +\t\t\t\tdefault:\n +\t\t\t\t\tcommentType = str;\n +\t\t\t\t}\n +\t\t\t});\n +\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Comment,\n +\t\t\t\tcommentType: commentType,\n +\t\t\t\tvalue: value,\n +\t\t\t\tbody: body,\n +\t\t\t\tisSpecial: isSpecial,\n +\t\t\t\tisMultiline: opt.isMultiline || false,\n +\t\t\t\tisMalformed: opt.isMalformed || false\n +\t\t\t};\n +\t\t}\n +\t\tif (ch1 === "*" && ch2 === "/") {\n +\t\t\tthis.trigger("error", {\n +\t\t\t\tcode: "E018",\n +\t\t\t\tline: startLine,\n +\t\t\t\tcharacter: startChar\n +\t\t\t});\n +\n +\t\t\tthis.skip(2);\n +\t\t\treturn null;\n +\t\t}\n +\t\tif (ch1 !== "/" || (ch2 !== "*" && ch2 !== "/")) {\n +\t\t\treturn null;\n +\t\t}\n +\t\tif (ch2 === "/") {\n +\t\t\tthis.skip(this.input.length); // Skip to the EOL.\n +\t\t\treturn commentToken("//", rest);\n +\t\t}\n +\n +\t\tvar body = "";\n +\t\tif (ch2 === "*") {\n +\t\t\tthis.skip(2);\n +\n +\t\t\twhile (this.peek() !== "*" || this.peek(1) !== "/") {\n +\t\t\t\tif (this.peek() === "") { // End of Line\n +\t\t\t\t\tbody += "\\n";\n +\t\t\t\t\tif (!this.nextLine()) {\n +\t\t\t\t\t\tthis.trigger("error", {\n +\t\t\t\t\t\t\tcode: "E017",\n +\t\t\t\t\t\t\tline: startLine,\n +\t\t\t\t\t\t\tcharacter: startChar\n +\t\t\t\t\t\t});\n +\n +\t\t\t\t\t\treturn commentToken("/*", body, {\n +\t\t\t\t\t\t\tisMultiline: true,\n +\t\t\t\t\t\t\tisMalformed: true\n +\t\t\t\t\t\t});\n +\t\t\t\t\t}\n +\t\t\t\t} else {\n +\t\t\t\t\tbody += this.peek();\n +\t\t\t\t\tthis.skip();\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\tthis.skip(2);\n +\t\t\treturn commentToken("/*", body, { isMultiline: true });\n +\t\t}\n +\t},\n +\tscanKeyword: function () {\n +\t\tvar result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input);\n +\t\tvar keywords = [\n +\t\t\t"if", "in", "do", "var", "for", "new",\n +\t\t\t"try", "let", "this", "else", "case",\n +\t\t\t"void", "with", "enum", "while", "break",\n +\t\t\t"catch", "throw", "const", "yield", "class",\n +\t\t\t"super", "return", "typeof", "delete",\n +\t\t\t"switch", "export", "import", "default",\n +\t\t\t"finally", "extends", "function", "continue",\n +\t\t\t"debugger", "instanceof"\n +\t\t];\n +\n +\t\tif (result && keywords.indexOf(result[0]) >= 0) {\n +\t\t\treturn {\n +\t\t\t\ttype: Token.Keyword,\n +\t\t\t\tvalue: result[0]\n +\t\t\t};\n +\t\t}\n +\n +\t\treturn null;\n +\t},\n +\tscanIdentifier: function () {\n +\t\tvar id = "";\n +\t\tvar index = 0;\n +\t\tvar type, char;\n +\n +\t\tfunction isUnicodeLetter(code) {\n +\t\t\tfor (var i = 0; i < unicodeLetterTable.length;) {\n +\t\t\t\tif (code < unicodeLetterTable[i++]) {\n +\t\t\t\t\treturn false;\n +\t\t\t\t}\n +\n +\t\t\t\tif (code <= unicodeLetterTable[i++]) {\n +\t\t\t\t\treturn true;\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\treturn false;\n +\t\t}\n +\n +\t\tfunction isHexDigit(str) {\n +\t\t\treturn (/^[0-9a-fA-F]$/).test(str);\n +\t\t}\n +\n +\t\tvar readUnicodeEscapeSequence = function () {\n +\t\t\tindex += 1;\n +\n +\t\t\tif (this.peek(index) !== "u") {\n +\t\t\t\treturn null;\n +\t\t\t}\n +\n +\t\t\tvar ch1 = this.peek(index + 1);\n +\t\t\tvar ch2 = this.peek(index + 2);\n +\t\t\tvar ch3 = this.peek(index + 3);\n +\t\t\tvar ch4 = this.peek(index + 4);\n +\t\t\tvar code;\n +\n +\t\t\tif (isHexDigit(ch1) && isHexDigit(ch2) && isHexDigit(ch3) && isHexDigit(ch4)) {\n +\t\t\t\tcode = parseInt(ch1 + ch2 + ch3 + ch4, 16);\n +\n +\t\t\t\tif (isUnicodeLetter(code)) {\n +\t\t\t\t\tindex += 5;\n +\t\t\t\t\treturn "\\\\u" + ch1 + ch2 + ch3 + ch4;\n +\t\t\t\t}\n +\n +\t\t\t\treturn null;\n +\t\t\t}\n +\n +\t\t\treturn null;\n +\t\t}.bind(this);\n +\n +\t\tvar getIdentifierStart = function () {\n +\t\t\tvar chr = this.peek(index);\n +\t\t\tvar code = chr.charCodeAt(0);\n +\n +\t\t\tif (code === 92) {\n +\t\t\t\treturn readUnicodeEscapeSequence();\n +\t\t\t}\n +\n +\t\t\tif (code < 128) {\n +\t\t\t\tif (identifierStartTable[code]) {\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t\treturn chr;\n +\t\t\t\t}\n +\n +\t\t\t\treturn null;\n +\t\t\t}\n +\n +\t\t\tif (isUnicodeLetter(code)) {\n +\t\t\t\tindex += 1;\n +\t\t\t\treturn chr;\n +\t\t\t}\n +\n +\t\t\treturn null;\n +\t\t}.bind(this);\n +\n +\t\tvar getIdentifierPart = function () {\n +\t\t\tvar chr = this.peek(index);\n +\t\t\tvar code = chr.charCodeAt(0);\n +\n +\t\t\tif (code === 92) {\n +\t\t\t\treturn readUnicodeEscapeSequence();\n +\t\t\t}\n +\n +\t\t\tif (code < 128) {\n +\t\t\t\tif (identifierPartTable[code]) {\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t\treturn chr;\n +\t\t\t\t}\n +\n +\t\t\t\treturn null;\n +\t\t\t}\n +\n +\t\t\tif (isUnicodeLetter(code)) {\n +\t\t\t\tindex += 1;\n +\t\t\t\treturn chr;\n +\t\t\t}\n +\n +\t\t\treturn null;\n +\t\t}.bind(this);\n +\n +\t\tchar = getIdentifierStart();\n +\t\tif (char === null) {\n +\t\t\treturn null;\n +\t\t}\n +\n +\t\tid = char;\n +\t\tfor (;;) {\n +\t\t\tchar = getIdentifierPart();\n +\n +\t\t\tif (char === null) {\n +\t\t\t\tbreak;\n +\t\t\t}\n +\n +\t\t\tid += char;\n +\t\t}\n +\n +\t\tswitch (id) {\n +\t\tcase "true":\n +\t\tcase "false":\n +\t\t\ttype = Token.BooleanLiteral;\n +\t\t\tbreak;\n +\t\tcase "null":\n +\t\t\ttype = Token.NullLiteral;\n +\t\t\tbreak;\n +\t\tdefault:\n +\t\t\ttype = Token.Identifier;\n +\t\t}\n +\n +\t\treturn {\n +\t\t\ttype: type,\n +\t\t\tvalue: id\n +\t\t};\n +\t},\n +\tscanNumericLiteral: function () {\n +\t\tvar index = 0;\n +\t\tvar value = "";\n +\t\tvar length = this.input.length;\n +\t\tvar char = this.peek(index);\n +\t\tvar bad;\n +\n +\t\tfunction isDecimalDigit(str) {\n +\t\t\treturn (/^[0-9]$/).test(str);\n +\t\t}\n +\n +\t\tfunction isOctalDigit(str) {\n +\t\t\treturn (/^[0-7]$/).test(str);\n +\t\t}\n +\n +\t\tfunction isHexDigit(str) {\n +\t\t\treturn (/^[0-9a-fA-F]$/).test(str);\n +\t\t}\n +\n +\t\tfunction isIdentifierStart(ch) {\n +\t\t\treturn (ch === "$") || (ch === "_") || (ch === "\\\\") ||\n +\t\t\t\t(ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z");\n +\t\t}\n +\n +\t\tif (char !== "." && !isDecimalDigit(char)) {\n +\t\t\treturn null;\n +\t\t}\n +\n +\t\tif (char !== ".") {\n +\t\t\tvalue = this.peek(index);\n +\t\t\tindex += 1;\n +\t\t\tchar = this.peek(index);\n +\n +\t\t\tif (value === "0") {\n +\t\t\t\tif (char === "x" || char === "X") {\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t\tvalue += char;\n +\n +\t\t\t\t\twhile (index < length) {\n +\t\t\t\t\t\tchar = this.peek(index);\n +\t\t\t\t\t\tif (!isHexDigit(char)) {\n +\t\t\t\t\t\t\tbreak;\n +\t\t\t\t\t\t}\n +\t\t\t\t\t\tvalue += char;\n +\t\t\t\t\t\tindex += 1;\n +\t\t\t\t\t}\n +\n +\t\t\t\t\tif (value.length <= 2) { // 0x\n +\t\t\t\t\t\treturn {\n +\t\t\t\t\t\t\ttype: Token.NumericLiteral,\n +\t\t\t\t\t\t\tvalue: value,\n +\t\t\t\t\t\t\tisMalformed: true\n +\t\t\t\t\t\t};\n +\t\t\t\t\t}\n +\n +\t\t\t\t\tif (index < length) {\n +\t\t\t\t\t\tchar = this.peek(index);\n +\t\t\t\t\t\tif (isIdentifierStart(char)) {\n +\t\t\t\t\t\t\treturn null;\n +\t\t\t\t\t\t}\n +\t\t\t\t\t}\n +\n +\t\t\t\t\treturn {\n +\t\t\t\t\t\ttype: Token.NumericLiteral,\n +\t\t\t\t\t\tvalue: value,\n +\t\t\t\t\t\tbase: 16,\n +\t\t\t\t\t\tisMalformed: false\n +\t\t\t\t\t};\n +\t\t\t\t}\n +\t\t\t\tif (isOctalDigit(char)) {\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t\tvalue += char;\n +\t\t\t\t\tbad = false;\n +\n +\t\t\t\t\twhile (index < length) {\n +\t\t\t\t\t\tchar = this.peek(index);\n +\n +\t\t\t\t\t\tif (isDecimalDigit(char)) {\n +\t\t\t\t\t\t\tbad = true;\n +\t\t\t\t\t\t} else if (!isOctalDigit(char)) {\n +\t\t\t\t\t\t\tbreak;\n +\t\t\t\t\t\t}\n +\t\t\t\t\t\tvalue += char;\n +\t\t\t\t\t\tindex += 1;\n +\t\t\t\t\t}\n +\n +\t\t\t\t\tif (index < length) {\n +\t\t\t\t\t\tchar = this.peek(index);\n +\t\t\t\t\t\tif (isIdentifierStart(char)) {\n +\t\t\t\t\t\t\treturn null;\n +\t\t\t\t\t\t}\n +\t\t\t\t\t}\n +\n +\t\t\t\t\treturn {\n +\t\t\t\t\t\ttype: Token.NumericLiteral,\n +\t\t\t\t\t\tvalue: value,\n +\t\t\t\t\t\tbase: 8,\n +\t\t\t\t\t\tisMalformed: false\n +\t\t\t\t\t};\n +\t\t\t\t}\n +\n +\t\t\t\tif (isDecimalDigit(char)) {\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t\tvalue += char;\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\twhile (index < length) {\n +\t\t\t\tchar = this.peek(index);\n +\t\t\t\tif (!isDecimalDigit(char)) {\n +\t\t\t\t\tbreak;\n +\t\t\t\t}\n +\t\t\t\tvalue += char;\n +\t\t\t\tindex += 1;\n +\t\t\t}\n +\t\t}\n +\n +\t\tif (char === ".") {\n +\t\t\tvalue += char;\n +\t\t\tindex += 1;\n +\n +\t\t\twhile (index < length) {\n +\t\t\t\tchar = this.peek(index);\n +\t\t\t\tif (!isDecimalDigit(char)) {\n +\t\t\t\t\tbreak;\n +\t\t\t\t}\n +\t\t\t\tvalue += char;\n +\t\t\t\tindex += 1;\n +\t\t\t}\n +\t\t}\n +\n +\t\tif (char === "e" || char === "E") {\n +\t\t\tvalue += char;\n +\t\t\tindex += 1;\n +\t\t\tchar = this.peek(index);\n +\n +\t\t\tif (char === "+" || char === "-") {\n +\t\t\t\tvalue += this.peek(index);\n +\t\t\t\tindex += 1;\n +\t\t\t}\n +\n +\t\t\tchar = this.peek(index);\n +\t\t\tif (isDecimalDigit(char)) {\n +\t\t\t\tvalue += char;\n +\t\t\t\tindex += 1;\n +\n +\t\t\t\twhile (index < length) {\n +\t\t\t\t\tchar = this.peek(index);\n +\t\t\t\t\tif (!isDecimalDigit(char)) {\n +\t\t\t\t\t\tbreak;\n +\t\t\t\t\t}\n +\t\t\t\t\tvalue += char;\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t}\n +\t\t\t} else {\n +\t\t\t\treturn null;\n +\t\t\t}\n +\t\t}\n +\n +\t\tif (index < length) {\n +\t\t\tchar = this.peek(index);\n +\t\t\tif (isIdentifierStart(char)) {\n +\t\t\t\treturn null;\n +\t\t\t}\n +\t\t}\n +\n +\t\treturn {\n +\t\t\ttype: Token.NumericLiteral,\n +\t\t\tvalue: value,\n +\t\t\tbase: 10,\n +\t\t\tisMalformed: !isFinite(value)\n +\t\t};\n +\t},\n +\tscanStringLiteral: function (checks) {\n +\t\tvar quote = this.peek();\n +\t\tif (quote !== "\\"" && quote !== "\'") {\n +\t\t\treturn null;\n +\t\t}\n +\t\tthis.triggerAsync("warning", {\n +\t\t\tcode: "W108",\n +\t\t\tline: this.line,\n +\t\t\tcharacter: this.char // +1?\n +\t\t}, checks, function () { return state.jsonMode && quote !== "\\""; });\n +\n +\t\tvar value = "";\n +\t\tvar startLine = this.line;\n +\t\tvar startChar = this.char;\n +\t\tvar allowNewLine = false;\n +\n +\t\tthis.skip();\n +\n +\t\twhile (this.peek() !== quote) {\n +\t\t\twhile (this.peek() === "") { // End Of Line\n +\n +\t\t\t\tif (!allowNewLine) {\n +\t\t\t\t\tthis.trigger("warning", {\n +\t\t\t\t\t\tcode: "W112",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char\n +\t\t\t\t\t});\n +\t\t\t\t} else {\n +\t\t\t\t\tallowNewLine = false;\n +\n +\t\t\t\t\tthis.triggerAsync("warning", {\n +\t\t\t\t\t\tcode: "W043",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char\n +\t\t\t\t\t}, checks, function () { return !state.option.multistr; });\n +\n +\t\t\t\t\tthis.triggerAsync("warning", {\n +\t\t\t\t\t\tcode: "W042",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char\n +\t\t\t\t\t}, checks, function () { return state.jsonMode && state.option.multistr; });\n +\t\t\t\t}\n +\n +\t\t\t\tif (!this.nextLine()) {\n +\t\t\t\t\tthis.trigger("error", {\n +\t\t\t\t\t\tcode: "E029",\n +\t\t\t\t\t\tline: startLine,\n +\t\t\t\t\t\tcharacter: startChar\n +\t\t\t\t\t});\n +\n +\t\t\t\t\treturn {\n +\t\t\t\t\t\ttype: Token.StringLiteral,\n +\t\t\t\t\t\tvalue: value,\n +\t\t\t\t\t\tisUnclosed: true,\n +\t\t\t\t\t\tquote: quote\n +\t\t\t\t\t};\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\tallowNewLine = false;\n +\t\t\tvar char = this.peek();\n +\t\t\tvar jump = 1; // A length of a jump, after we\'re done\n +\n +\t\t\tif (char < " ") {\n +\t\t\t\tthis.trigger("warning", {\n +\t\t\t\t\tcode: "W113",\n +\t\t\t\t\tline: this.line,\n +\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\tdata: [ "<non-printable>" ]\n +\t\t\t\t});\n +\t\t\t}\n +\n +\t\t\tif (char === "\\\\") {\n +\t\t\t\tthis.skip();\n +\t\t\t\tchar = this.peek();\n +\n +\t\t\t\tswitch (char) {\n +\t\t\t\tcase "\'":\n +\t\t\t\t\tthis.triggerAsync("warning", {\n +\t\t\t\t\t\tcode: "W114",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\t\tdata: [ "\\\\\'" ]\n +\t\t\t\t\t}, checks, function () {return state.jsonMode; });\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "b":\n +\t\t\t\t\tchar = "\\b";\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "f":\n +\t\t\t\t\tchar = "\\f";\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "n":\n +\t\t\t\t\tchar = "\\n";\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "r":\n +\t\t\t\t\tchar = "\\r";\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "t":\n +\t\t\t\t\tchar = "\\t";\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "0":\n +\t\t\t\t\tchar = "\\0";\n +\t\t\t\t\tvar n = parseInt(this.peek(1), 10);\n +\t\t\t\t\tthis.triggerAsync("warning", {\n +\t\t\t\t\t\tcode: "W115",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char\n +\t\t\t\t\t}, checks,\n +\t\t\t\t\tfunction () { return n >= 0 && n <= 7 && state.directive["use strict"]; });\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "u":\n +\t\t\t\t\tchar = String.fromCharCode(parseInt(this.input.substr(1, 4), 16));\n +\t\t\t\t\tjump = 5;\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "v":\n +\t\t\t\t\tthis.triggerAsync("warning", {\n +\t\t\t\t\t\tcode: "W114",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\t\tdata: [ "\\\\v" ]\n +\t\t\t\t\t}, checks, function () { return state.jsonMode; });\n +\n +\t\t\t\t\tchar = "\\v";\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "x":\n +\t\t\t\t\tvar\tx = parseInt(this.input.substr(1, 2), 16);\n +\n +\t\t\t\t\tthis.triggerAsync("warning", {\n +\t\t\t\t\t\tcode: "W114",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\t\tdata: [ "\\\\x-" ]\n +\t\t\t\t\t}, checks, function () { return state.jsonMode; });\n +\n +\t\t\t\t\tchar = String.fromCharCode(x);\n +\t\t\t\t\tjump = 3;\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "\\\\":\n +\t\t\t\tcase "\\"":\n +\t\t\t\tcase "/":\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "":\n +\t\t\t\t\tallowNewLine = true;\n +\t\t\t\t\tchar = "";\n +\t\t\t\t\tbreak;\n +\t\t\t\tcase "!":\n +\t\t\t\t\tif (value.slice(value.length - 2) === "<") {\n +\t\t\t\t\t\tbreak;\n +\t\t\t\t\t}\n +\t\t\t\tdefault:\n +\t\t\t\t\tthis.trigger("warning", {\n +\t\t\t\t\t\tcode: "W044",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char\n +\t\t\t\t\t});\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\tvalue += char;\n +\t\t\tthis.skip(jump);\n +\t\t}\n +\n +\t\tthis.skip();\n +\t\treturn {\n +\t\t\ttype: Token.StringLiteral,\n +\t\t\tvalue: value,\n +\t\t\tisUnclosed: false,\n +\t\t\tquote: quote\n +\t\t};\n +\t},\n +\tscanRegExp: function () {\n +\t\tvar index = 0;\n +\t\tvar length = this.input.length;\n +\t\tvar char = this.peek();\n +\t\tvar value = char;\n +\t\tvar body = "";\n +\t\tvar flags = [];\n +\t\tvar malformed = false;\n +\t\tvar isCharSet = false;\n +\t\tvar terminated;\n +\n +\t\tvar scanUnexpectedChars = function () {\n +\t\t\tif (char < " ") {\n +\t\t\t\tmalformed = true;\n +\t\t\t\tthis.trigger("warning", {\n +\t\t\t\t\tcode: "W048",\n +\t\t\t\t\tline: this.line,\n +\t\t\t\t\tcharacter: this.char\n +\t\t\t\t});\n +\t\t\t}\n +\t\t\tif (char === "<") {\n +\t\t\t\tmalformed = true;\n +\t\t\t\tthis.trigger("warning", {\n +\t\t\t\t\tcode: "W049",\n +\t\t\t\t\tline: this.line,\n +\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\tdata: [ char ]\n +\t\t\t\t});\n +\t\t\t}\n +\t\t}.bind(this);\n +\t\tif (!this.prereg || char !== "/") {\n +\t\t\treturn null;\n +\t\t}\n +\n +\t\tindex += 1;\n +\t\tterminated = false;\n +\n +\t\twhile (index < length) {\n +\t\t\tchar = this.peek(index);\n +\t\t\tvalue += char;\n +\t\t\tbody += char;\n +\n +\t\t\tif (isCharSet) {\n +\t\t\t\tif (char === "]") {\n +\t\t\t\t\tif (this.peek(index - 1) !== "\\\\" || this.peek(index - 2) === "\\\\") {\n +\t\t\t\t\t\tisCharSet = false;\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\n +\t\t\t\tif (char === "\\\\") {\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t\tchar = this.peek(index);\n +\t\t\t\t\tbody += char;\n +\t\t\t\t\tvalue += char;\n +\n +\t\t\t\t\tscanUnexpectedChars();\n +\t\t\t\t}\n +\n +\t\t\t\tindex += 1;\n +\t\t\t\tcontinue;\n +\t\t\t}\n +\n +\t\t\tif (char === "\\\\") {\n +\t\t\t\tindex += 1;\n +\t\t\t\tchar = this.peek(index);\n +\t\t\t\tbody += char;\n +\t\t\t\tvalue += char;\n +\n +\t\t\t\tscanUnexpectedChars();\n +\n +\t\t\t\tif (char === "/") {\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t\tcontinue;\n +\t\t\t\t}\n +\n +\t\t\t\tif (char === "[") {\n +\t\t\t\t\tindex += 1;\n +\t\t\t\t\tcontinue;\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\tif (char === "[") {\n +\t\t\t\tisCharSet = true;\n +\t\t\t\tindex += 1;\n +\t\t\t\tcontinue;\n +\t\t\t}\n +\n +\t\t\tif (char === "/") {\n +\t\t\t\tbody = body.substr(0, body.length - 1);\n +\t\t\t\tterminated = true;\n +\t\t\t\tindex += 1;\n +\t\t\t\tbreak;\n +\t\t\t}\n +\n +\t\t\tindex += 1;\n +\t\t}\n +\n +\t\tif (!terminated) {\n +\t\t\tthis.trigger("error", {\n +\t\t\t\tcode: "E015",\n +\t\t\t\tline: this.line,\n +\t\t\t\tcharacter: this.from\n +\t\t\t});\n +\n +\t\t\treturn void this.trigger("fatal", {\n +\t\t\t\tline: this.line,\n +\t\t\t\tfrom: this.from\n +\t\t\t});\n +\t\t}\n +\n +\t\twhile (index < length) {\n +\t\t\tchar = this.peek(index);\n +\t\t\tif (!/[gim]/.test(char)) {\n +\t\t\t\tbreak;\n +\t\t\t}\n +\t\t\tflags.push(char);\n +\t\t\tvalue += char;\n +\t\t\tindex += 1;\n +\t\t}\n +\n +\t\ttry {\n +\t\t\tnew RegExp(body, flags.join(""));\n +\t\t} catch (err) {\n +\t\t\tmalformed = true;\n +\t\t\tthis.trigger("error", {\n +\t\t\t\tcode: "E016",\n +\t\t\t\tline: this.line,\n +\t\t\t\tcharacter: this.char,\n +\t\t\t\tdata: [ err.message ] // Platform dependent!\n +\t\t\t});\n +\t\t}\n +\n +\t\treturn {\n +\t\t\ttype: Token.RegExp,\n +\t\t\tvalue: value,\n +\t\t\tflags: flags,\n +\t\t\tisMalformed: malformed\n +\t\t};\n +\t},\n +\tscanMixedSpacesAndTabs: function () {\n +\t\tvar at, match;\n +\n +\t\tif (state.option.smarttabs) {\n +\t\t\tmatch = this.input.match(/(\\/\\/|^\\s?\\*)? \\t/);\n +\t\t\tat = match && !match[1] ? 0 : -1;\n +\t\t} else {\n +\t\t\tat = this.input.search(/ \\t|\\t [^\\*]/);\n +\t\t}\n +\n +\t\treturn at;\n +\t},\n +\tscanUnsafeChars: function () {\n +\t\treturn this.input.search(reg.unsafeChars);\n +\t},\n +\tnext: function (checks) {\n +\t\tthis.from = this.char;\n +\t\tvar start;\n +\t\tif (/\\s/.test(this.peek())) {\n +\t\t\tstart = this.char;\n +\n +\t\t\twhile (/\\s/.test(this.peek())) {\n +\t\t\t\tthis.from += 1;\n +\t\t\t\tthis.skip();\n +\t\t\t}\n +\n +\t\t\tif (this.peek() === "") { // EOL\n +\t\t\t\tif (!/^\\s*$/.test(this.getLines()[this.line - 1]) && state.option.trailing) {\n +\t\t\t\t\tthis.trigger("warning", { code: "W102", line: this.line, character: start });\n +\t\t\t\t}\n +\t\t\t}\n +\t\t}\n +\n +\t\tvar match = this.scanComments() ||\n +\t\t\tthis.scanStringLiteral(checks);\n +\n +\t\tif (match) {\n +\t\t\treturn match;\n +\t\t}\n +\n +\t\tmatch =\n +\t\t\tthis.scanRegExp() ||\n +\t\t\tthis.scanPunctuator() ||\n +\t\t\tthis.scanKeyword() ||\n +\t\t\tthis.scanIdentifier() ||\n +\t\t\tthis.scanNumericLiteral();\n +\n +\t\tif (match) {\n +\t\t\tthis.skip(match.value.length);\n +\t\t\treturn match;\n +\t\t}\n +\n +\t\treturn null;\n +\t},\n +\tnextLine: function () {\n +\t\tvar char;\n +\n +\t\tif (this.line >= this.getLines().length) {\n +\t\t\treturn false;\n +\t\t}\n +\n +\t\tthis.input = this.getLines()[this.line];\n +\t\tthis.line += 1;\n +\t\tthis.char = 1;\n +\t\tthis.from = 1;\n +\n +\t\tchar = this.scanMixedSpacesAndTabs();\n +\t\tif (char >= 0) {\n +\t\t\tthis.trigger("warning", { code: "W099", line: this.line, character: char + 1 });\n +\t\t}\n +\n +\t\tthis.input = this.input.replace(/\\t/g, state.tab);\n +\t\tchar = this.scanUnsafeChars();\n +\n +\t\tif (char >= 0) {\n +\t\t\tthis.trigger("warning", { code: "W100", line: this.line, character: char });\n +\t\t}\n +\n +\t\tif (state.option.maxlen && state.option.maxlen < this.input.length) {\n +\t\t\tthis.trigger("warning", { code: "W101", line: this.line, character: this.input.length });\n +\t\t}\n +\n +\t\treturn true;\n +\t},\n +\tstart: function () {\n +\t\tthis.nextLine();\n +\t},\n +\ttoken: function () {\n +\t\tvar checks = asyncTrigger();\n +\t\tvar token;\n +\n +\n +\t\tfunction isReserved(token, isProperty) {\n +\t\t\tif (!token.reserved) {\n +\t\t\t\treturn false;\n +\t\t\t}\n +\t\t\tvar meta = token.meta;\n +\n +\t\t\tif (meta && meta.isFutureReservedWord && state.option.inES5()) {\n +\t\t\t\tif (!meta.es5) {\n +\t\t\t\t\treturn false;\n +\t\t\t\t}\n +\t\t\t\tif (meta.strictOnly) {\n +\t\t\t\t\tif (!state.option.strict && !state.directive["use strict"]) {\n +\t\t\t\t\t\treturn false;\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\n +\t\t\t\tif (isProperty) {\n +\t\t\t\t\treturn false;\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\treturn true;\n +\t\t}\n +\t\tvar create = function (type, value, isProperty) {\n +\t\t\tvar obj;\n +\n +\t\t\tif (type !== "(endline)" && type !== "(end)") {\n +\t\t\t\tthis.prereg = false;\n +\t\t\t}\n +\n +\t\t\tif (type === "(punctuator)") {\n +\t\t\t\tswitch (value) {\n +\t\t\t\tcase ".":\n +\t\t\t\tcase ")":\n +\t\t\t\tcase "~":\n +\t\t\t\tcase "#":\n +\t\t\t\tcase "]":\n +\t\t\t\t\tthis.prereg = false;\n +\t\t\t\t\tbreak;\n +\t\t\t\tdefault:\n +\t\t\t\t\tthis.prereg = true;\n +\t\t\t\t}\n +\n +\t\t\t\tobj = Object.create(state.syntax[value] || state.syntax["(error)"]);\n +\t\t\t}\n +\n +\t\t\tif (type === "(identifier)") {\n +\t\t\t\tif (value === "return" || value === "case" || value === "typeof") {\n +\t\t\t\t\tthis.prereg = true;\n +\t\t\t\t}\n +\n +\t\t\t\tif (_.has(state.syntax, value)) {\n +\t\t\t\t\tobj = Object.create(state.syntax[value] || state.syntax["(error)"]);\n +\t\t\t\t\tif (!isReserved(obj, isProperty && type === "(identifier)")) {\n +\t\t\t\t\t\tobj = null;\n +\t\t\t\t\t}\n +\t\t\t\t}\n +\t\t\t}\n +\n +\t\t\tif (!obj) {\n +\t\t\t\tobj = Object.create(state.syntax[type]);\n +\t\t\t}\n +\n +\t\t\tobj.identifier = (type === "(identifier)");\n +\t\t\tobj.type = obj.type || type;\n +\t\t\tobj.value = value;\n +\t\t\tobj.line = this.line;\n +\t\t\tobj.character = this.char;\n +\t\t\tobj.from = this.from;\n +\n +\t\t\tif (isProperty && obj.identifier) {\n +\t\t\t\tobj.isProperty = isProperty;\n +\t\t\t}\n +\n +\t\t\tobj.check = checks.check;\n +\n +\t\t\treturn obj;\n +\t\t}.bind(this);\n +\n +\t\tfor (;;) {\n +\t\t\tif (!this.input.length) {\n +\t\t\t\treturn create(this.nextLine() ? "(endline)" : "(end)", "");\n +\t\t\t}\n +\n +\t\t\ttoken = this.next(checks);\n +\n +\t\t\tif (!token) {\n +\t\t\t\tif (this.input.length) {\n +\t\t\t\t\tthis.trigger("error", {\n +\t\t\t\t\t\tcode: "E024",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\t\tdata: [ this.peek() ]\n +\t\t\t\t\t});\n +\n +\t\t\t\t\tthis.input = "";\n +\t\t\t\t}\n +\n +\t\t\t\tcontinue;\n +\t\t\t}\n +\n +\t\t\tswitch (token.type) {\n +\t\t\tcase Token.StringLiteral:\n +\t\t\t\tthis.triggerAsync("String", {\n +\t\t\t\t\tline: this.line,\n +\t\t\t\t\tchar: this.char,\n +\t\t\t\t\tfrom: this.from,\n +\t\t\t\t\tvalue: token.value,\n +\t\t\t\t\tquote: token.quote\n +\t\t\t\t}, checks, function () { return true; });\n +\n +\t\t\t\treturn create("(string)", token.value);\n +\t\t\tcase Token.Identifier:\n +\t\t\t\tthis.trigger("Identifier", {\n +\t\t\t\t\tline: this.line,\n +\t\t\t\t\tchar: this.char,\n +\t\t\t\t\tfrom: this.form,\n +\t\t\t\t\tname: token.value,\n +\t\t\t\t\tisProperty: state.tokens.curr.id === "."\n +\t\t\t\t});\n +\t\t\tcase Token.Keyword:\n +\t\t\tcase Token.NullLiteral:\n +\t\t\tcase Token.BooleanLiteral:\n +\t\t\t\treturn create("(identifier)", token.value, state.tokens.curr.id === ".");\n +\n +\t\t\tcase Token.NumericLiteral:\n +\t\t\t\tif (token.isMalformed) {\n +\t\t\t\t\tthis.trigger("warning", {\n +\t\t\t\t\t\tcode: "W045",\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\t\tdata: [ token.value ]\n +\t\t\t\t\t});\n +\t\t\t\t}\n +\n +\t\t\t\tthis.triggerAsync("warning", {\n +\t\t\t\t\tcode: "W114",\n +\t\t\t\t\tline: this.line,\n +\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\tdata: [ "0x-" ]\n +\t\t\t\t}, checks, function () { return token.base === 16 && state.jsonMode; });\n +\n +\t\t\t\tthis.triggerAsync("warning", {\n +\t\t\t\t\tcode: "W115",\n +\t\t\t\t\tline: this.line,\n +\t\t\t\t\tcharacter: this.char\n +\t\t\t\t}, checks, function () {\n +\t\t\t\t\treturn state.directive["use strict"] && token.base === 8; \n +\t\t\t\t});\n +\n +\t\t\t\tthis.trigger("Number", {\n +\t\t\t\t\tline: this.line,\n +\t\t\t\t\tchar: this.char,\n +\t\t\t\t\tfrom: this.from,\n +\t\t\t\t\tvalue: token.value,\n +\t\t\t\t\tbase: token.base,\n +\t\t\t\t\tisMalformed: token.malformed\n +\t\t\t\t});\n +\n +\t\t\t\treturn create("(number)", token.value);\n +\n +\t\t\tcase Token.RegExp:\n +\t\t\t\treturn create("(regexp)", token.value);\n +\n +\t\t\tcase Token.Comment:\n +\t\t\t\tstate.tokens.curr.comment = true;\n +\n +\t\t\t\tif (token.isSpecial) {\n +\t\t\t\t\treturn {\n +\t\t\t\t\t\tvalue: token.value,\n +\t\t\t\t\t\tbody: token.body,\n +\t\t\t\t\t\ttype: token.commentType,\n +\t\t\t\t\t\tisSpecial: token.isSpecial,\n +\t\t\t\t\t\tline: this.line,\n +\t\t\t\t\t\tcharacter: this.char,\n +\t\t\t\t\t\tfrom: this.from\n +\t\t\t\t\t};\n +\t\t\t\t}\n +\n +\t\t\t\tbreak;\n +\n +\t\t\tcase "":\n +\t\t\t\tbreak;\n +\n +\t\t\tdefault:\n +\t\t\t\treturn create("(punctuator)", token.value);\n +\t\t\t}\n +\t\t}\n +\t}\n +};\n +\n +exports.Lexer = Lexer;\n +\n +},\n +{"./reg.js":6,"./state.js":7,"events":10,"underscore":1}],\n +6:[function(req,module,exports){\n +\n +"use string";\n +exports.unsafeString =\n +\t/@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|</i;\n +exports.unsafeChars =\n +\t/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n +exports.needEsc =\n +\t/[\\u0000-\\u001f&<"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n +\n +exports.needEscGlobal =\n +\t/[\\u0000-\\u001f&<"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n +exports.starSlash = /\\*\\//;\n +exports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;\n +exports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\\s*:/i;\n +exports.fallsThrough = /^\\s*\\/\\*\\s*falls?\\sthrough\\s*\\*\\/\\s*$/;\n +\n +},\n +{}],\n +7:[function(req,module,exports){\n +\n +\n +var state = {\n +\tsyntax: {},\n +\n +\treset: function () {\n +\t\tthis.tokens = {\n +\t\t\tprev: null,\n +\t\t\tnext: null,\n +\t\t\tcurr: null\n +\t\t};\n +\n +\t\tthis.option = {};\n +\t\tthis.ignored = {};\n +\t\tthis.directive = {};\n +\t\tthis.jsonMode = false;\n +\t\tthis.jsonWarnings = [];\n +\t\tthis.lines = [];\n +\t\tthis.tab = "";\n +\t\tthis.cache = {}; // Node.JS doesn\'t have Map. Sniff.\n +\t}\n +};\n +\n +exports.state = state;\n +\n +},\n +{}],\n +8:[function(req,module,exports){\n +\n +\n +exports.register = function (linter) {\n +\n +\tlinter.on("Identifier", function style_scanProto(data) {\n +\t\tif (linter.getOption("proto")) {\n +\t\t\treturn;\n +\t\t}\n +\n +\t\tif (data.name === "__proto__") {\n +\t\t\tlinter.warn("W103", {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.char,\n +\t\t\t\tdata: [ data.name ]\n +\t\t\t});\n +\t\t}\n +\t});\n +\n +\tlinter.on("Identifier", function style_scanIterator(data) {\n +\t\tif (linter.getOption("iterator")) {\n +\t\t\treturn;\n +\t\t}\n +\n +\t\tif (data.name === "__iterator__") {\n +\t\t\tlinter.warn("W104", {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.char,\n +\t\t\t\tdata: [ data.name ]\n +\t\t\t});\n +\t\t}\n +\t});\n +\n +\tlinter.on("Identifier", function style_scanDangling(data) {\n +\t\tif (!linter.getOption("nomen")) {\n +\t\t\treturn;\n +\t\t}\n +\t\tif (data.name === "_") {\n +\t\t\treturn;\n +\t\t}\n +\t\tif (linter.getOption("node")) {\n +\t\t\tif (/^(__dirname|__filename)$/.test(data.name) && !data.isProperty) {\n +\t\t\t\treturn;\n +\t\t\t}\n +\t\t}\n +\n +\t\tif (/^(_+.*|.*_+)$/.test(data.name)) {\n +\t\t\tlinter.warn("W105", {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.from,\n +\t\t\t\tdata: [ "dangling \'_\'", data.name ]\n +\t\t\t});\n +\t\t}\n +\t});\n +\n +\tlinter.on("Identifier", function style_scanCamelCase(data) {\n +\t\tif (!linter.getOption("camelcase")) {\n +\t\t\treturn;\n +\t\t}\n +\n +\t\tif (data.name.replace(/^_+/, "").indexOf("_") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) {\n +\t\t\tlinter.warn("W106", {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.from,\n +\t\t\t\tdata: [ data.name ]\n +\t\t\t});\n +\t\t}\n +\t});\n +\n +\tlinter.on("String", function style_scanQuotes(data) {\n +\t\tvar quotmark = linter.getOption("quotmark");\n +\t\tvar code;\n +\n +\t\tif (!quotmark) {\n +\t\t\treturn;\n +\t\t}\n +\n +\t\tif (quotmark === "single" && data.quote !== "\'") {\n +\t\t\tcode = "W109";\n +\t\t}\n +\n +\t\tif (quotmark === "double" && data.quote !== "\\"") {\n +\t\t\tcode = "W108";\n +\t\t}\n +\n +\t\tif (quotmark === true) {\n +\t\t\tif (!linter.getCache("quotmark")) {\n +\t\t\t\tlinter.setCache("quotmark", data.quote);\n +\t\t\t}\n +\n +\t\t\tif (linter.getCache("quotmark") !== data.quote) {\n +\t\t\t\tcode = "W110";\n +\t\t\t}\n +\t\t}\n +\n +\t\tif (code) {\n +\t\t\tlinter.warn(code, {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.char,\n +\t\t\t});\n +\t\t}\n +\t});\n +\n +\tlinter.on("Number", function style_scanNumbers(data) {\n +\t\tif (data.value.charAt(0) === ".") {\n +\t\t\tlinter.warn("W008", {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.char,\n +\t\t\t\tdata: [ data.value ]\n +\t\t\t});\n +\t\t}\n +\n +\t\tif (data.value.substr(data.value.length - 1) === ".") {\n +\t\t\tlinter.warn("W047", {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.char,\n +\t\t\t\tdata: [ data.value ]\n +\t\t\t});\n +\t\t}\n +\n +\t\tif (/^00+/.test(data.value)) {\n +\t\t\tlinter.warn("W046", {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.char,\n +\t\t\t\tdata: [ data.value ]\n +\t\t\t});\n +\t\t}\n +\t});\n +\n +\tlinter.on("String", function style_scanJavaScriptURLs(data) {\n +\t\tvar re = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\\s*:/i;\n +\n +\t\tif (linter.getOption("scripturl")) {\n +\t\t\treturn;\n +\t\t}\n +\n +\t\tif (re.test(data.value)) {\n +\t\t\tlinter.warn("W107", {\n +\t\t\t\tline: data.line,\n +\t\t\t\tchar: data.char\n +\t\t\t});\n +\t\t}\n +\t});\n +};\n +},\n +{}],\n +9:[function(req,module,exports){\n +\n +},\n +{}],\n +10:[function(req,module,exports){\n +var process=req("__browserify_process");if (!process.EventEmitter) process.EventEmitter = function () {};\n +\n +var EventEmitter = exports.EventEmitter = process.EventEmitter;\n +var isArray = typeof Array.isArray === \'function\'\n + ? Array.isArray\n + : function (xs) {\n + return Object.prototype.toString.call(xs) === \'[object Array]\'\n + }\n +;\n +function indexOf (xs, x) {\n + if (xs.indexOf) return xs.indexOf(x);\n + for (var i = 0; i < xs.length; i++) {\n + if (x === xs[i]) return i;\n + }\n + return -1;\n +}\n +var defaultMaxListeners = 200;\n +EventEmitter.prototype.setMaxListeners = function(n) {\n + if (!this._events) this._events = {};\n + this._events.maxListeners = n;\n +};\n +\n +\n +EventEmitter.prototype.emit = function(type) {\n + if (type === \'error\') {\n + if (!this._events || !this._events.error ||\n + (isArray(this._events.error) && !this._events.error.length))\n + {\n + if (arguments[1] instanceof Error) {\n + throw arguments[1]; // Unhandled \'error\' event\n + } else {\n + throw new Error("Uncaught, unspecified \'error\' event.");\n + }\n + return false;\n + }\n + }\n +\n + if (!this._events) return false;\n + var handler = this._events[type];\n + if (!handler) return false;\n +\n + if (typeof handler == \'function\') {\n + switch (arguments.length) {\n + case 1:\n + handler.call(this);\n + break;\n + case 2:\n + handler.call(this, arguments[1]);\n + break;\n + case 3:\n + handler.call(this, arguments[1], arguments[2]);\n + break;\n + default:\n + var args = Array.prototype.slice.call(arguments, 1);\n + handler.apply(this, args);\n + }\n + return true;\n +\n + } else if (isArray(handler)) {\n + var args = Array.prototype.slice.call(arguments, 1);\n +\n + var listeners = handler.slice();\n + for (var i = 0, l = listeners.length; i < l; i++) {\n + listeners[i].apply(this, args);\n + }\n + return true;\n +\n + } else {\n + return false;\n + }\n +};\n +EventEmitter.prototype.addListener = function(type, listener) {\n + if (\'function\' !== typeof listener) {\n + throw new Error(\'addListener only takes instances of Function\');\n + }\n +\n + if (!this._events) this._events = {};\n + this.emit(\'newListener\', type, listener);\n +\n + if (!this._events[type]) {\n + this._events[type] = listener;\n + } else if (isArray(this._events[type])) {\n + if (!this._events[type].warned) {\n + var m;\n + if (this._events.maxListeners !== undefined) {\n + m = this._events.maxListeners;\n + } else {\n + m = defaultMaxListeners;\n + }\n +\n + if (m && m > 0 && this._events[type].length > m) {\n + this._events[type].warned = true;\n + console.error(\'(node) warning: possible EventEmitter memory \' +\n + \'leak detected. %d listeners added. \' +\n + \'Use emitter.setMaxListeners() to increase limit.\',\n + this._events[type].length);\n + console.trace();\n + }\n + }\n + this._events[type].push(listener);\n + } else {\n + this._events[type] = [this._events[type], listener];\n + }\n +\n + return this;\n +};\n +\n +EventEmitter.prototype.on = EventEmitter.prototype.addListener;\n +\n +EventEmitter.prototype.once = function(type, listener) {\n + var self = this;\n + self.on(type, function g() {\n + self.removeListener(type, g);\n + listener.apply(this, arguments);\n + });\n +\n + return this;\n +};\n +\n +EventEmitter.prototype.removeListener = function(type, listener) {\n + if (\'function\' !== typeof listener) {\n + throw new Error(\'removeListener only takes instances of Function\');\n + }\n + if (!this._events || !this._events[type]) return this;\n +\n + var list = this._events[type];\n +\n + if (isArray(list)) {\n + var i = indexOf(list, listener);\n + if (i < 0) return this;\n + list.splice(i, 1);\n + if (list.length == 0)\n + delete this._events[type];\n + } else if (this._events[type] === listener) {\n + delete this._events[type];\n + }\n +\n + return this;\n +};\n +\n +EventEmitter.prototype.removeAllListeners = function(type) {\n + if (arguments.length === 0) {\n + this._events = {};\n + return this;\n + }\n + if (type && this._events && this._events[type]) this._events[type] = null;\n + return this;\n +};\n +\n +EventEmitter.prototype.listeners = function(type) {\n + if (!this._events) this._events = {};\n + if (!this._events[type]) this._events[type] = [];\n + if (!isArray(this._events[type])) {\n + this._events[type] = [this._events[type]];\n + }\n + return this._events[type];\n +};\n +\n +EventEmitter.listenerCount = function(emitter, type) {\n + var ret;\n + if (!emitter._events || !emitter._events[type])\n + ret = 0;\n + else if (typeof emitter._events[type] === \'function\')\n + ret = 1;\n + else\n + ret = emitter._events[type].length;\n + return ret;\n +};\n +\n +},\n +{"__browserify_process":11}],\n +11:[function(req,module,exports){\n +\n +var process = module.exports = {};\n +\n +process.nextTick = (function () {\n + var canSetImmediate = typeof window !== \'undefined\'\n + && window.setImmediate;\n + var canPost = typeof window !== \'undefined\'\n + && window.postMessage && window.addEventListener\n + ;\n +\n + if (canSetImmediate) {\n + return function (f) { return window.setImmediate(f) };\n + }\n +\n + if (canPost) {\n + var queue = [];\n + window.addEventListener(\'message\', function (ev) {\n + if (ev.source === window && ev.data === \'process-tick\') {\n + ev.stopPropagation();\n + if (queue.length > 0) {\n + var fn = queue.shift();\n + fn();\n + }\n + }\n + }, true);\n +\n + return function nextTick(fn) {\n + queue.push(fn);\n + window.postMessage(\'process-tick\', \'*\');\n + };\n + }\n +\n + return function nextTick(fn) {\n + setTimeout(fn, 0);\n + };\n +})();\n +\n +process.title = \'browser\';\n +process.browser = true;\n +process.env = {};\n +process.argv = [];\n +\n +process.binding = function (name) {\n + throw new Error(\'process.binding is not supported\');\n +}\n +process.cwd = function () { return \'/\' };\n +process.chdir = function (dir) {\n + throw new Error(\'process.chdir is not supported\');\n +};\n +\n +},\n +{}],\n +"jshint":[function(req,module,exports){\n +module.exports=req(\'n4bKNg\');\n +},\n +{}]},{},["n4bKNg"])\n +;\n +\n +function req() {return require.apply(this, arguments)}\n +module.exports = req("jshint");\n +\n }); ]]></string> </value> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-json.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-json.js.xml index a2e6fbe211..a5b984cc4d 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-json.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-json.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155570.42</string> </value> + <value> <string>ts83646620.5</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>66183</int> </value> + <value> <int>67205</int> </value> </item> <item> <key> <string>title</string> </key> @@ -55,31 +55,30 @@ if (typeof window.window != "undefined" && window.document) {\n return;\n }\n \n -window.console = {\n - log: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - },\n - error: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - }\n +window.console = function() {\n + var msgs = Array.prototype.slice.call(arguments, 0);\n + postMessage({type: "log", data: msgs});\n };\n +window.console.error =\n +window.console.warn = \n +window.console.log =\n +window.console.trace = window.console;\n +\n window.window = window;\n window.ace = window;\n \n window.normalizeModule = function(parentId, moduleName) {\n if (moduleName.indexOf("!") !== -1) {\n var chunks = moduleName.split("!");\n - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);\n + return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);\n }\n if (moduleName.charAt(0) == ".") {\n var base = parentId.split("/").slice(0, -1).join("/");\n - moduleName = base + "/" + moduleName;\n + moduleName = (base ? base + "/" : "") + moduleName;\n \n while(moduleName.indexOf(".") !== -1 && previous != moduleName) {\n var previous = moduleName;\n - moduleName = moduleName.replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n + moduleName = moduleName.replace(/^\\.\\//, "").replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n }\n }\n \n @@ -94,9 +93,9 @@ window.require = function(parentId, id) {\n if (!id.charAt)\n throw new Error("worker.js require() accepts only (parentId, id) as arguments");\n \n - id = normalizeModule(parentId, id);\n + id = window.normalizeModule(parentId, id);\n \n - var module = require.modules[id];\n + var module = window.require.modules[id];\n if (module) {\n if (!module.initialized) {\n module.initialized = true;\n @@ -106,48 +105,60 @@ window.require = function(parentId, id) {\n }\n \n var chunks = id.split("/");\n - chunks[0] = require.tlns[chunks[0]] || chunks[0];\n + if (!window.require.tlns)\n + return console.log("unable to load " + id);\n + chunks[0] = window.require.tlns[chunks[0]] || chunks[0];\n var path = chunks.join("/") + ".js";\n \n - require.id = id;\n + window.require.id = id;\n importScripts(path);\n - return require(parentId, id);\n + return window.require(parentId, id);\n };\n -\n -require.modules = {};\n -require.tlns = {};\n +window.require.modules = {};\n +window.require.tlns = {};\n \n window.define = function(id, deps, factory) {\n if (arguments.length == 2) {\n factory = deps;\n if (typeof id != "string") {\n deps = id;\n - id = require.id;\n + id = window.require.id;\n }\n } else if (arguments.length == 1) {\n factory = id;\n - id = require.id;\n + deps = []\n + id = window.require.id;\n }\n +\n + if (!deps.length)\n + deps = [\'require\', \'exports\', \'module\']\n \n if (id.indexOf("text!") === 0) \n return;\n \n - var req = function(deps, factory) {\n - return require(id, deps, factory);\n + var req = function(childId) {\n + return window.require(id, childId);\n };\n \n - require.modules[id] = {\n + window.require.modules[id] = {\n + exports: {},\n factory: function() {\n - var module = {\n - exports: {}\n - };\n - var returnExports = factory(req, module.exports, module);\n + var module = this;\n + var returnExports = factory.apply(this, deps.map(function(dep) {\n + switch(dep) {\n + case \'require\': return req\n + case \'exports\': return module.exports\n + case \'module\': return module\n + default: return req(dep)\n + }\n + }));\n if (returnExports)\n module.exports = returnExports;\n return module;\n }\n };\n };\n +window.define.amd = {}\n \n window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n require.tlns = topLevelNamespaces;\n @@ -155,8 +166,8 @@ window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n \n window.initSender = function initSender() {\n \n - var EventEmitter = require("ace/lib/event_emitter").EventEmitter;\n - var oop = require("ace/lib/oop");\n + var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;\n + var oop = window.require("ace/lib/oop");\n \n var Sender = function() {};\n \n @@ -207,158 +218,7 @@ window.onmessage = function(e) {\n sender._emit(msg.event, msg.data);\n }\n };\n -})(this);\n -\n -define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -var EventEmitter = {};\n -var stopPropagation = function() { this.propagationStopped = true; };\n -var preventDefault = function() { this.defaultPrevented = true; };\n -\n -EventEmitter._emit =\n -EventEmitter._dispatchEvent = function(eventName, e) {\n - this._eventRegistry || (this._eventRegistry = {});\n - this._defaultHandlers || (this._defaultHandlers = {});\n -\n - var listeners = this._eventRegistry[eventName] || [];\n - var defaultHandler = this._defaultHandlers[eventName];\n - if (!listeners.length && !defaultHandler)\n - return;\n -\n - if (typeof e != "object" || !e)\n - e = {};\n -\n - if (!e.type)\n - e.type = eventName;\n - if (!e.stopPropagation)\n - e.stopPropagation = stopPropagation;\n - if (!e.preventDefault)\n - e.preventDefault = preventDefault;\n -\n - for (var i=0; i<listeners.length; i++) {\n - listeners[i](e, this);\n - if (e.propagationStopped)\n - break;\n - }\n - \n - if (defaultHandler && !e.defaultPrevented)\n - return defaultHandler(e, this);\n -};\n -\n -\n -EventEmitter._signal = function(eventName, e) {\n - var listeners = (this._eventRegistry || {})[eventName];\n - if (!listeners)\n - return;\n -\n - for (var i=0; i<listeners.length; i++)\n - listeners[i](e, this);\n -};\n -\n -EventEmitter.once = function(eventName, callback) {\n - var _self = this;\n - callback && this.addEventListener(eventName, function newCallback() {\n - _self.removeEventListener(eventName, newCallback);\n - callback.apply(null, arguments);\n - });\n -};\n -\n -\n -EventEmitter.setDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - handlers = this._defaultHandlers = {_disabled_: {}};\n - \n - if (handlers[eventName]) {\n - var old = handlers[eventName];\n - var disabled = handlers._disabled_[eventName];\n - if (!disabled)\n - handlers._disabled_[eventName] = disabled = [];\n - disabled.push(old);\n - var i = disabled.indexOf(callback);\n - if (i != -1) \n - disabled.splice(i, 1);\n - }\n - handlers[eventName] = callback;\n -};\n -EventEmitter.removeDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - return;\n - var disabled = handlers._disabled_[eventName];\n - \n - if (handlers[eventName] == callback) {\n - var old = handlers[eventName];\n - if (disabled)\n - this.setDefaultHandler(eventName, disabled.pop());\n - } else if (disabled) {\n - var i = disabled.indexOf(callback);\n - if (i != -1)\n - disabled.splice(i, 1);\n - }\n -};\n -\n -EventEmitter.on =\n -EventEmitter.addEventListener = function(eventName, callback, capturing) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - listeners = this._eventRegistry[eventName] = [];\n -\n - if (listeners.indexOf(callback) == -1)\n - listeners[capturing ? "unshift" : "push"](callback);\n - return callback;\n -};\n -\n -EventEmitter.off =\n -EventEmitter.removeListener =\n -EventEmitter.removeEventListener = function(eventName, callback) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - return;\n -\n - var index = listeners.indexOf(callback);\n - if (index !== -1)\n - listeners.splice(index, 1);\n -};\n -\n -EventEmitter.removeAllListeners = function(eventName) {\n - if (this._eventRegistry) this._eventRegistry[eventName] = [];\n -};\n -\n -exports.EventEmitter = EventEmitter;\n -\n -});\n -\n -define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -exports.inherits = (function() {\n - var tempCtor = function() {};\n - return function(ctor, superCtor) {\n - tempCtor.prototype = superCtor.prototype;\n - ctor.super_ = superCtor.prototype;\n - ctor.prototype = new tempCtor();\n - ctor.prototype.constructor = ctor;\n - };\n -}());\n -\n -exports.mixin = function(obj, mixin) {\n - for (var key in mixin) {\n - obj[key] = mixin[key];\n - }\n - return obj;\n -};\n -\n -exports.implement = function(proto, mixin) {\n - exports.mixin(proto, mixin);\n -};\n -\n -});\n +})(this);// https://github.com/kriskowal/es5-shim\n \n define(\'ace/lib/es5-shim\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n @@ -1094,6 +954,32 @@ oop.inherits(JsonWorker, Mirror);\n }).call(JsonWorker.prototype);\n \n });\n +\n +define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +exports.inherits = (function() {\n + var tempCtor = function() {};\n + return function(ctor, superCtor) {\n + tempCtor.prototype = superCtor.prototype;\n + ctor.super_ = superCtor.prototype;\n + ctor.prototype = new tempCtor();\n + ctor.prototype.constructor = ctor;\n + };\n +}());\n +\n +exports.mixin = function(obj, mixin) {\n + for (var key in mixin) {\n + obj[key] = mixin[key];\n + }\n + return obj;\n +};\n +\n +exports.implement = function(proto, mixin) {\n + exports.mixin(proto, mixin);\n +};\n +\n +});\n define(\'ace/worker/mirror\', [\'require\', \'exports\', \'module\' , \'ace/document\', \'ace/lib/lang\'], function(require, exports, module) {\n \n \n @@ -1223,7 +1109,7 @@ var Document = function(text) {\n };\n this.getTextRange = function(range) {\n if (range.start.row == range.end.row) {\n - return this.$lines[range.start.row]\n + return this.getLine(range.start.row)\n .substring(range.start.column, range.end.column);\n }\n var lines = this.getLines(range.start.row, range.end.row);\n @@ -1334,6 +1220,8 @@ var Document = function(text) {\n return end;\n };\n this.remove = function(range) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n range.start = this.$clipPosition(range.start);\n range.end = this.$clipPosition(range.end);\n \n @@ -1417,6 +1305,8 @@ var Document = function(text) {\n this._emit("change", { data: delta });\n };\n this.replace = function(range, text) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n if (text.length == 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n @@ -1489,6 +1379,132 @@ var Document = function(text) {\n exports.Document = Document;\n });\n \n +define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +var EventEmitter = {};\n +var stopPropagation = function() { this.propagationStopped = true; };\n +var preventDefault = function() { this.defaultPrevented = true; };\n +\n +EventEmitter._emit =\n +EventEmitter._dispatchEvent = function(eventName, e) {\n + this._eventRegistry || (this._eventRegistry = {});\n + this._defaultHandlers || (this._defaultHandlers = {});\n +\n + var listeners = this._eventRegistry[eventName] || [];\n + var defaultHandler = this._defaultHandlers[eventName];\n + if (!listeners.length && !defaultHandler)\n + return;\n +\n + if (typeof e != "object" || !e)\n + e = {};\n +\n + if (!e.type)\n + e.type = eventName;\n + if (!e.stopPropagation)\n + e.stopPropagation = stopPropagation;\n + if (!e.preventDefault)\n + e.preventDefault = preventDefault;\n +\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++) {\n + listeners[i](e, this);\n + if (e.propagationStopped)\n + break;\n + }\n + \n + if (defaultHandler && !e.defaultPrevented)\n + return defaultHandler(e, this);\n +};\n +\n +\n +EventEmitter._signal = function(eventName, e) {\n + var listeners = (this._eventRegistry || {})[eventName];\n + if (!listeners)\n + return;\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++)\n + listeners[i](e, this);\n +};\n +\n +EventEmitter.once = function(eventName, callback) {\n + var _self = this;\n + callback && this.addEventListener(eventName, function newCallback() {\n + _self.removeEventListener(eventName, newCallback);\n + callback.apply(null, arguments);\n + });\n +};\n +\n +\n +EventEmitter.setDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + handlers = this._defaultHandlers = {_disabled_: {}};\n + \n + if (handlers[eventName]) {\n + var old = handlers[eventName];\n + var disabled = handlers._disabled_[eventName];\n + if (!disabled)\n + handlers._disabled_[eventName] = disabled = [];\n + disabled.push(old);\n + var i = disabled.indexOf(callback);\n + if (i != -1) \n + disabled.splice(i, 1);\n + }\n + handlers[eventName] = callback;\n +};\n +EventEmitter.removeDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + return;\n + var disabled = handlers._disabled_[eventName];\n + \n + if (handlers[eventName] == callback) {\n + var old = handlers[eventName];\n + if (disabled)\n + this.setDefaultHandler(eventName, disabled.pop());\n + } else if (disabled) {\n + var i = disabled.indexOf(callback);\n + if (i != -1)\n + disabled.splice(i, 1);\n + }\n +};\n +\n +EventEmitter.on =\n +EventEmitter.addEventListener = function(eventName, callback, capturing) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + listeners = this._eventRegistry[eventName] = [];\n +\n + if (listeners.indexOf(callback) == -1)\n + listeners[capturing ? "unshift" : "push"](callback);\n + return callback;\n +};\n +\n +EventEmitter.off =\n +EventEmitter.removeListener =\n +EventEmitter.removeEventListener = function(eventName, callback) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + return;\n +\n + var index = listeners.indexOf(callback);\n + if (index !== -1)\n + listeners.splice(index, 1);\n +};\n +\n +EventEmitter.removeAllListeners = function(eventName) {\n + if (this._eventRegistry) this._eventRegistry[eventName] = [];\n +};\n +\n +exports.EventEmitter = EventEmitter;\n +\n +});\n +\n define(\'ace/range\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n var comparePoints = function(p1, p2) {\n @@ -1735,29 +1751,25 @@ var oop = require("./lib/oop");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n \n var Anchor = exports.Anchor = function(doc, row, column) {\n - this.document = doc;\n -\n + this.$onChange = this.onChange.bind(this);\n + this.attach(doc);\n + \n if (typeof column == "undefined")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n -\n - this.$onChange = this.onChange.bind(this);\n - doc.on("change", this.$onChange);\n };\n \n (function() {\n \n oop.implement(this, EventEmitter);\n -\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n -\n this.getDocument = function() {\n return this.document;\n };\n -\n + this.$insertRight = false;\n this.onChange = function(e) {\n var delta = e.data;\n var range = delta.range;\n @@ -1778,7 +1790,8 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n if (delta.action === "insertText") {\n if (start.row === row && start.column <= column) {\n - if (start.row === end.row) {\n + if (start.column === column && this.$insertRight) {\n + } else if (start.row === end.row) {\n column += end.column - start.column;\n } else {\n column -= start.column;\n @@ -1819,7 +1832,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n this.setPosition(row, column, true);\n };\n -\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n @@ -1846,10 +1858,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n value: pos\n });\n };\n -\n this.detach = function() {\n this.document.removeEventListener("change", this.$onChange);\n };\n + this.attach = function(doc) {\n + this.document = doc || this.document;\n + this.document.on("change", this.$onChange);\n + };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n \n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-lua.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-lua.js.xml index e4f3bc45e0..31bd6fbd27 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-lua.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-lua.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155570.58</string> </value> + <value> <string>ts83646621.49</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>95258</int> </value> + <value> <int>100225</int> </value> </item> <item> <key> <string>title</string> </key> @@ -55,31 +55,30 @@ if (typeof window.window != "undefined" && window.document) {\n return;\n }\n \n -window.console = {\n - log: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - },\n - error: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - }\n +window.console = function() {\n + var msgs = Array.prototype.slice.call(arguments, 0);\n + postMessage({type: "log", data: msgs});\n };\n +window.console.error =\n +window.console.warn = \n +window.console.log =\n +window.console.trace = window.console;\n +\n window.window = window;\n window.ace = window;\n \n window.normalizeModule = function(parentId, moduleName) {\n if (moduleName.indexOf("!") !== -1) {\n var chunks = moduleName.split("!");\n - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);\n + return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);\n }\n if (moduleName.charAt(0) == ".") {\n var base = parentId.split("/").slice(0, -1).join("/");\n - moduleName = base + "/" + moduleName;\n + moduleName = (base ? base + "/" : "") + moduleName;\n \n while(moduleName.indexOf(".") !== -1 && previous != moduleName) {\n var previous = moduleName;\n - moduleName = moduleName.replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n + moduleName = moduleName.replace(/^\\.\\//, "").replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n }\n }\n \n @@ -94,9 +93,9 @@ window.require = function(parentId, id) {\n if (!id.charAt)\n throw new Error("worker.js require() accepts only (parentId, id) as arguments");\n \n - id = normalizeModule(parentId, id);\n + id = window.normalizeModule(parentId, id);\n \n - var module = require.modules[id];\n + var module = window.require.modules[id];\n if (module) {\n if (!module.initialized) {\n module.initialized = true;\n @@ -106,48 +105,60 @@ window.require = function(parentId, id) {\n }\n \n var chunks = id.split("/");\n - chunks[0] = require.tlns[chunks[0]] || chunks[0];\n + if (!window.require.tlns)\n + return console.log("unable to load " + id);\n + chunks[0] = window.require.tlns[chunks[0]] || chunks[0];\n var path = chunks.join("/") + ".js";\n \n - require.id = id;\n + window.require.id = id;\n importScripts(path);\n - return require(parentId, id);\n + return window.require(parentId, id);\n };\n -\n -require.modules = {};\n -require.tlns = {};\n +window.require.modules = {};\n +window.require.tlns = {};\n \n window.define = function(id, deps, factory) {\n if (arguments.length == 2) {\n factory = deps;\n if (typeof id != "string") {\n deps = id;\n - id = require.id;\n + id = window.require.id;\n }\n } else if (arguments.length == 1) {\n factory = id;\n - id = require.id;\n + deps = []\n + id = window.require.id;\n }\n +\n + if (!deps.length)\n + deps = [\'require\', \'exports\', \'module\']\n \n if (id.indexOf("text!") === 0) \n return;\n \n - var req = function(deps, factory) {\n - return require(id, deps, factory);\n + var req = function(childId) {\n + return window.require(id, childId);\n };\n \n - require.modules[id] = {\n + window.require.modules[id] = {\n + exports: {},\n factory: function() {\n - var module = {\n - exports: {}\n - };\n - var returnExports = factory(req, module.exports, module);\n + var module = this;\n + var returnExports = factory.apply(this, deps.map(function(dep) {\n + switch(dep) {\n + case \'require\': return req\n + case \'exports\': return module.exports\n + case \'module\': return module\n + default: return req(dep)\n + }\n + }));\n if (returnExports)\n module.exports = returnExports;\n return module;\n }\n };\n };\n +window.define.amd = {}\n \n window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n require.tlns = topLevelNamespaces;\n @@ -155,8 +166,8 @@ window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n \n window.initSender = function initSender() {\n \n - var EventEmitter = require("ace/lib/event_emitter").EventEmitter;\n - var oop = require("ace/lib/oop");\n + var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;\n + var oop = window.require("ace/lib/oop");\n \n var Sender = function() {};\n \n @@ -207,158 +218,7 @@ window.onmessage = function(e) {\n sender._emit(msg.event, msg.data);\n }\n };\n -})(this);\n -\n -define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -var EventEmitter = {};\n -var stopPropagation = function() { this.propagationStopped = true; };\n -var preventDefault = function() { this.defaultPrevented = true; };\n -\n -EventEmitter._emit =\n -EventEmitter._dispatchEvent = function(eventName, e) {\n - this._eventRegistry || (this._eventRegistry = {});\n - this._defaultHandlers || (this._defaultHandlers = {});\n -\n - var listeners = this._eventRegistry[eventName] || [];\n - var defaultHandler = this._defaultHandlers[eventName];\n - if (!listeners.length && !defaultHandler)\n - return;\n -\n - if (typeof e != "object" || !e)\n - e = {};\n -\n - if (!e.type)\n - e.type = eventName;\n - if (!e.stopPropagation)\n - e.stopPropagation = stopPropagation;\n - if (!e.preventDefault)\n - e.preventDefault = preventDefault;\n -\n - for (var i=0; i<listeners.length; i++) {\n - listeners[i](e, this);\n - if (e.propagationStopped)\n - break;\n - }\n - \n - if (defaultHandler && !e.defaultPrevented)\n - return defaultHandler(e, this);\n -};\n -\n -\n -EventEmitter._signal = function(eventName, e) {\n - var listeners = (this._eventRegistry || {})[eventName];\n - if (!listeners)\n - return;\n -\n - for (var i=0; i<listeners.length; i++)\n - listeners[i](e, this);\n -};\n -\n -EventEmitter.once = function(eventName, callback) {\n - var _self = this;\n - callback && this.addEventListener(eventName, function newCallback() {\n - _self.removeEventListener(eventName, newCallback);\n - callback.apply(null, arguments);\n - });\n -};\n -\n -\n -EventEmitter.setDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - handlers = this._defaultHandlers = {_disabled_: {}};\n - \n - if (handlers[eventName]) {\n - var old = handlers[eventName];\n - var disabled = handlers._disabled_[eventName];\n - if (!disabled)\n - handlers._disabled_[eventName] = disabled = [];\n - disabled.push(old);\n - var i = disabled.indexOf(callback);\n - if (i != -1) \n - disabled.splice(i, 1);\n - }\n - handlers[eventName] = callback;\n -};\n -EventEmitter.removeDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - return;\n - var disabled = handlers._disabled_[eventName];\n - \n - if (handlers[eventName] == callback) {\n - var old = handlers[eventName];\n - if (disabled)\n - this.setDefaultHandler(eventName, disabled.pop());\n - } else if (disabled) {\n - var i = disabled.indexOf(callback);\n - if (i != -1)\n - disabled.splice(i, 1);\n - }\n -};\n -\n -EventEmitter.on =\n -EventEmitter.addEventListener = function(eventName, callback, capturing) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - listeners = this._eventRegistry[eventName] = [];\n -\n - if (listeners.indexOf(callback) == -1)\n - listeners[capturing ? "unshift" : "push"](callback);\n - return callback;\n -};\n -\n -EventEmitter.off =\n -EventEmitter.removeListener =\n -EventEmitter.removeEventListener = function(eventName, callback) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - return;\n -\n - var index = listeners.indexOf(callback);\n - if (index !== -1)\n - listeners.splice(index, 1);\n -};\n -\n -EventEmitter.removeAllListeners = function(eventName) {\n - if (this._eventRegistry) this._eventRegistry[eventName] = [];\n -};\n -\n -exports.EventEmitter = EventEmitter;\n -\n -});\n -\n -define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -exports.inherits = (function() {\n - var tempCtor = function() {};\n - return function(ctor, superCtor) {\n - tempCtor.prototype = superCtor.prototype;\n - ctor.super_ = superCtor.prototype;\n - ctor.prototype = new tempCtor();\n - ctor.prototype.constructor = ctor;\n - };\n -}());\n -\n -exports.mixin = function(obj, mixin) {\n - for (var key in mixin) {\n - obj[key] = mixin[key];\n - }\n - return obj;\n -};\n -\n -exports.implement = function(proto, mixin) {\n - exports.mixin(proto, mixin);\n -};\n -\n -});\n +})(this);// https://github.com/kriskowal/es5-shim\n \n define(\'ace/lib/es5-shim\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n @@ -1094,6 +954,32 @@ oop.inherits(Worker, Mirror);\n }).call(Worker.prototype);\n \n });\n +\n +define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +exports.inherits = (function() {\n + var tempCtor = function() {};\n + return function(ctor, superCtor) {\n + tempCtor.prototype = superCtor.prototype;\n + ctor.super_ = superCtor.prototype;\n + ctor.prototype = new tempCtor();\n + ctor.prototype.constructor = ctor;\n + };\n +}());\n +\n +exports.mixin = function(obj, mixin) {\n + for (var key in mixin) {\n + obj[key] = mixin[key];\n + }\n + return obj;\n +};\n +\n +exports.implement = function(proto, mixin) {\n + exports.mixin(proto, mixin);\n +};\n +\n +});\n define(\'ace/worker/mirror\', [\'require\', \'exports\', \'module\' , \'ace/document\', \'ace/lib/lang\'], function(require, exports, module) {\n \n \n @@ -1223,7 +1109,7 @@ var Document = function(text) {\n };\n this.getTextRange = function(range) {\n if (range.start.row == range.end.row) {\n - return this.$lines[range.start.row]\n + return this.getLine(range.start.row)\n .substring(range.start.column, range.end.column);\n }\n var lines = this.getLines(range.start.row, range.end.row);\n @@ -1334,6 +1220,8 @@ var Document = function(text) {\n return end;\n };\n this.remove = function(range) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n range.start = this.$clipPosition(range.start);\n range.end = this.$clipPosition(range.end);\n \n @@ -1417,6 +1305,8 @@ var Document = function(text) {\n this._emit("change", { data: delta });\n };\n this.replace = function(range, text) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n if (text.length == 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n @@ -1489,6 +1379,132 @@ var Document = function(text) {\n exports.Document = Document;\n });\n \n +define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +var EventEmitter = {};\n +var stopPropagation = function() { this.propagationStopped = true; };\n +var preventDefault = function() { this.defaultPrevented = true; };\n +\n +EventEmitter._emit =\n +EventEmitter._dispatchEvent = function(eventName, e) {\n + this._eventRegistry || (this._eventRegistry = {});\n + this._defaultHandlers || (this._defaultHandlers = {});\n +\n + var listeners = this._eventRegistry[eventName] || [];\n + var defaultHandler = this._defaultHandlers[eventName];\n + if (!listeners.length && !defaultHandler)\n + return;\n +\n + if (typeof e != "object" || !e)\n + e = {};\n +\n + if (!e.type)\n + e.type = eventName;\n + if (!e.stopPropagation)\n + e.stopPropagation = stopPropagation;\n + if (!e.preventDefault)\n + e.preventDefault = preventDefault;\n +\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++) {\n + listeners[i](e, this);\n + if (e.propagationStopped)\n + break;\n + }\n + \n + if (defaultHandler && !e.defaultPrevented)\n + return defaultHandler(e, this);\n +};\n +\n +\n +EventEmitter._signal = function(eventName, e) {\n + var listeners = (this._eventRegistry || {})[eventName];\n + if (!listeners)\n + return;\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++)\n + listeners[i](e, this);\n +};\n +\n +EventEmitter.once = function(eventName, callback) {\n + var _self = this;\n + callback && this.addEventListener(eventName, function newCallback() {\n + _self.removeEventListener(eventName, newCallback);\n + callback.apply(null, arguments);\n + });\n +};\n +\n +\n +EventEmitter.setDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + handlers = this._defaultHandlers = {_disabled_: {}};\n + \n + if (handlers[eventName]) {\n + var old = handlers[eventName];\n + var disabled = handlers._disabled_[eventName];\n + if (!disabled)\n + handlers._disabled_[eventName] = disabled = [];\n + disabled.push(old);\n + var i = disabled.indexOf(callback);\n + if (i != -1) \n + disabled.splice(i, 1);\n + }\n + handlers[eventName] = callback;\n +};\n +EventEmitter.removeDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + return;\n + var disabled = handlers._disabled_[eventName];\n + \n + if (handlers[eventName] == callback) {\n + var old = handlers[eventName];\n + if (disabled)\n + this.setDefaultHandler(eventName, disabled.pop());\n + } else if (disabled) {\n + var i = disabled.indexOf(callback);\n + if (i != -1)\n + disabled.splice(i, 1);\n + }\n +};\n +\n +EventEmitter.on =\n +EventEmitter.addEventListener = function(eventName, callback, capturing) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + listeners = this._eventRegistry[eventName] = [];\n +\n + if (listeners.indexOf(callback) == -1)\n + listeners[capturing ? "unshift" : "push"](callback);\n + return callback;\n +};\n +\n +EventEmitter.off =\n +EventEmitter.removeListener =\n +EventEmitter.removeEventListener = function(eventName, callback) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + return;\n +\n + var index = listeners.indexOf(callback);\n + if (index !== -1)\n + listeners.splice(index, 1);\n +};\n +\n +EventEmitter.removeAllListeners = function(eventName) {\n + if (this._eventRegistry) this._eventRegistry[eventName] = [];\n +};\n +\n +exports.EventEmitter = EventEmitter;\n +\n +});\n +\n define(\'ace/range\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n var comparePoints = function(p1, p2) {\n @@ -1735,29 +1751,25 @@ var oop = require("./lib/oop");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n \n var Anchor = exports.Anchor = function(doc, row, column) {\n - this.document = doc;\n -\n + this.$onChange = this.onChange.bind(this);\n + this.attach(doc);\n + \n if (typeof column == "undefined")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n -\n - this.$onChange = this.onChange.bind(this);\n - doc.on("change", this.$onChange);\n };\n \n (function() {\n \n oop.implement(this, EventEmitter);\n -\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n -\n this.getDocument = function() {\n return this.document;\n };\n -\n + this.$insertRight = false;\n this.onChange = function(e) {\n var delta = e.data;\n var range = delta.range;\n @@ -1778,7 +1790,8 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n if (delta.action === "insertText") {\n if (start.row === row && start.column <= column) {\n - if (start.row === end.row) {\n + if (start.column === column && this.$insertRight) {\n + } else if (start.row === end.row) {\n column += end.column - start.column;\n } else {\n column -= start.column;\n @@ -1819,7 +1832,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n this.setPosition(row, column, true);\n };\n -\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n @@ -1846,10 +1858,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n value: pos\n });\n };\n -\n this.detach = function() {\n this.document.removeEventListener("change", this.$onChange);\n };\n + this.attach = function(doc) {\n + this.document = doc || this.document;\n + this.document.on("change", this.$onChange);\n + };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n \n @@ -2052,33 +2067,33 @@ exports.delayedCall = function(fcn, defaultTimeout) {\n return _self;\n };\n });\n -define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'exports\'], function(require, exports, module) {\n +define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n (function (root, name, factory) {\n - \n -\n - if (typeof exports !== \'undefined\') {\n - factory(exports);\n - } else if (typeof define === \'function\' && define.amd) {\n - define([\'exports\'], factory);\n - } else {\n - factory((root[name] = {}));\n - }\n + factory(exports)\n }(this, \'luaparse\', function (exports) {\n \n \n - exports.version = \'0.0.11\';\n + exports.version = \'0.1.4\';\n \n var input, options, length;\n var defaultOptions = exports.defaultOptions = {\n wait: false\n , comments: true\n , scope: false\n + , locations: false\n + , ranges: false\n };\n \n var EOF = 1, StringLiteral = 2, Keyword = 4, Identifier = 8\n , NumericLiteral = 16, Punctuator = 32, BooleanLiteral = 64\n , NilLiteral = 128, VarargLiteral = 256;\n +\n + exports.tokenTypes = { EOF: EOF, StringLiteral: StringLiteral\n + , Keyword: Keyword, Identifier: Identifier, NumericLiteral: NumericLiteral\n + , Punctuator: Punctuator, BooleanLiteral: BooleanLiteral\n + , NilLiteral: NilLiteral, VarargLiteral: VarargLiteral\n + };\n \n var errors = exports.errors = {\n unexpected: \'Unexpected %1 \\\'%2\\\' near \\\'%3\\\'\'\n @@ -2334,16 +2349,41 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo , argument: argument\n };\n }\n +\n + , comment: function(value, raw) {\n + return {\n + type: \'Comment\'\n + , value: value\n + , raw: raw\n + };\n + }\n };\n +\n + function finishNode(node) {\n + if (trackLocations) {\n + var location = locations.pop();\n + location.complete();\n + if (options.locations) node.loc = location.loc;\n + if (options.ranges) node.range = location.range;\n + }\n + return node;\n + }\n \n var slice = Array.prototype.slice\n , toString = Object.prototype.toString\n - , indexOf = Array.prototype.indexOf || function indexOf(element) {\n - for (var i = 0, length = this.length; i < length; i++) {\n - if (this[i] === element) return i;\n + , indexOf = function indexOf(array, element) {\n + for (var i = 0, length = array.length; i < length; i++) {\n + if (array[i] === element) return i;\n }\n return -1;\n };\n +\n + function indexOfObject(array, property, element) {\n + for (var i = 0, length = array.length; i < length; i++) {\n + if (array[i][property] === element) return i;\n + }\n + return -1;\n + }\n \n function sprintf(format) {\n var args = slice.call(arguments, 1);\n @@ -2358,7 +2398,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo , dest = {}\n , src, prop;\n \n - for (var i = 0, l = args.length; i < l; i++) {\n + for (var i = 0, length = args.length; i < length; i++) {\n src = args[i];\n for (prop in src) if (src.hasOwnProperty(prop)) {\n dest[prop] = src[prop];\n @@ -2412,13 +2452,16 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo \n var index\n , token\n + , previousToken\n , lookahead\n , comments\n , tokenStart\n , line\n , lineStart;\n \n - function readToken() {\n + exports.lex = lex;\n +\n + function lex() {\n skipWhiteSpace();\n while (45 === input.charCodeAt(index) &&\n 45 === input.charCodeAt(index + 1)) {\n @@ -2433,12 +2476,12 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo , range: [index, index]\n };\n \n - var character = input.charCodeAt(index)\n + var charCode = input.charCodeAt(index)\n , next = input.charCodeAt(index + 1);\n tokenStart = index;\n - if (isIdentifierStart(character)) return scanIdentifierOrKeyword();\n + if (isIdentifierStart(charCode)) return scanIdentifierOrKeyword();\n \n - switch (character) {\n + switch (charCode) {\n case 39: case 34: // \'"\n return scanStringLiteral();\n case 48: case 49: case 50: case 51: case 52: case 53:\n @@ -2486,10 +2529,10 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo \n function skipWhiteSpace() {\n while (index < length) {\n - var character = input.charCodeAt(index);\n - if (isWhiteSpace(character)) {\n + var charCode = input.charCodeAt(index);\n + if (isWhiteSpace(charCode)) {\n index++;\n - } else if (isLineTerminator(character)) {\n + } else if (isLineTerminator(charCode)) {\n line++;\n lineStart = ++index;\n } else {\n @@ -2549,18 +2592,18 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo var delimiter = input.charCodeAt(index++)\n , stringStart = index\n , string = \'\'\n - , character;\n + , charCode;\n \n while (index < length) {\n - character = input.charCodeAt(index++);\n - if (delimiter === character) break;\n - if (92 === character) { // \\\n + charCode = input.charCodeAt(index++);\n + if (delimiter === charCode) break;\n + if (92 === charCode) { // \\\n string += input.slice(stringStart, index - 1) + readEscapeSequence();\n stringStart = index;\n }\n - else if (index >= length || isLineTerminator(character)) {\n + else if (index >= length || isLineTerminator(charCode)) {\n string += input.slice(stringStart, index - 1);\n - raise({}, errors.unfinishedString, string + String.fromCharCode(character));\n + raise({}, errors.unfinishedString, string + String.fromCharCode(charCode));\n }\n }\n string += input.slice(stringStart, index - 1);\n @@ -2691,7 +2734,9 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo var character = input.charAt(index)\n , content = \'\'\n , isLong = false\n - , commentStart = index;\n + , commentStart = index\n + , lineStartComment = lineStart\n + , lineComment = line;\n \n if (\'[\' === character) {\n content = readLongString();\n @@ -2703,15 +2748,21 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo if (isLineTerminator(input.charCodeAt(index))) break;\n index++;\n }\n - content = input.slice(commentStart, index);\n + if (options.comments) content = input.slice(commentStart, index);\n }\n \n if (options.comments) {\n - comments.push({\n - type: \'Comment\'\n - , value: content\n - , raw: input.slice(tokenStart, index)\n - });\n + var node = ast.comment(content, input.slice(tokenStart, index));\n + if (options.locations) {\n + node.loc = {\n + start: { line: lineComment, column: tokenStart - lineStartComment }\n + , end: { line: line, column: index - lineStart }\n + };\n + }\n + if (options.ranges) {\n + node.range = [tokenStart, index];\n + }\n + comments.push(node);\n }\n }\n \n @@ -2738,7 +2789,6 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo line++;\n lineStart = index;\n }\n -\n if (\']\' === character) {\n terminator = true;\n for (var i = 0; i < level; i++) {\n @@ -2755,8 +2805,9 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo }\n \n function next() {\n + previousToken = token;\n token = lookahead;\n - lookahead = readToken();\n + lookahead = lex();\n }\n \n function consume(value) {\n @@ -2772,28 +2823,28 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo else raise(token, errors.expected, value, token.value);\n }\n \n - function isWhiteSpace(character) {\n - return 9 === character || 32 === character || 0xB === character || 0xC === character;\n + function isWhiteSpace(charCode) {\n + return 9 === charCode || 32 === charCode || 0xB === charCode || 0xC === charCode;\n }\n \n - function isLineTerminator(character) {\n - return 10 === character || 13 === character;\n + function isLineTerminator(charCode) {\n + return 10 === charCode || 13 === charCode;\n }\n \n - function isDecDigit(character) {\n - return character >= 48 && character <= 57;\n + function isDecDigit(charCode) {\n + return charCode >= 48 && charCode <= 57;\n }\n \n - function isHexDigit(character) {\n - return (character >= 48 && character <= 57) || (character >= 97 && character <= 102) || (character >= 65 && character <= 70);\n + function isHexDigit(charCode) {\n + return (charCode >= 48 && charCode <= 57) || (charCode >= 97 && charCode <= 102) || (charCode >= 65 && charCode <= 70);\n }\n \n - function isIdentifierStart(character) {\n - return (character >= 65 && character <= 90) || (character >= 97 && character <= 122) || 95 === character;\n + function isIdentifierStart(charCode) {\n + return (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode;\n }\n \n - function isIdentifierPart(character) {\n - return (character >= 65 && character <= 90) || (character >= 97 && character <= 122) || 95 === character || (character >= 48 && character <= 57);\n + function isIdentifierPart(charCode) {\n + return (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode || (charCode >= 48 && charCode <= 57);\n }\n \n function isKeyword(id) {\n @@ -2842,8 +2893,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo }\n var scopes\n , scopeDepth\n - , globals\n - , globalNames;\n + , globals;\n function createScope() {\n scopes.push(Array.apply(null, scopes[scopeDepth++]));\n }\n @@ -2852,7 +2902,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo scopeDepth--;\n }\n function scopeIdentifierName(name) {\n - if (-1 !== indexOf.call(scopes[scopeDepth], name)) return;\n + if (-1 !== indexOf(scopes[scopeDepth], name)) return;\n scopes[scopeDepth].push(name);\n }\n function scopeIdentifier(node) {\n @@ -2860,22 +2910,60 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo attachScope(node, true);\n }\n function attachScope(node, isLocal) {\n - if (!isLocal && -1 === indexOf.call(globalNames, node.name)) {\n - globalNames.push(node.name);\n + if (!isLocal && -1 === indexOfObject(globals, \'name\', node.name))\n globals.push(node);\n - }\n \n node.isLocal = isLocal;\n }\n function scopeHasName(name) {\n - return (-1 !== indexOf.call(scopes[scopeDepth], name));\n + return (-1 !== indexOf(scopes[scopeDepth], name));\n + }\n +\n + var locations = []\n + , trackLocations;\n +\n + function createLocationMarker() {\n + return new Marker(token);\n + }\n +\n + function Marker(token) {\n + if (options.locations) {\n + this.loc = {\n + start: {\n + line: token.line\n + , column: token.range[0] - token.lineStart\n + }\n + , end: {\n + line: 0\n + , column: 0\n + }\n + };\n + }\n + if (options.ranges) this.range = [token.range[0], 0];\n + }\n + Marker.prototype.complete = function() {\n + if (options.locations) {\n + this.loc.end.line = previousToken.line;\n + this.loc.end.column = previousToken.range[1] - previousToken.lineStart;\n + }\n + if (options.ranges) {\n + this.range[1] = previousToken.range[1];\n + }\n + };\n + function markLocation() {\n + if (trackLocations) locations.push(createLocationMarker());\n + }\n + function pushLocation(marker) {\n + if (trackLocations) locations.push(marker);\n }\n \n function parseChunk() {\n next();\n + markLocation();\n var body = parseBlock();\n if (EOF !== token.type) unexpected(token);\n - return ast.chunk(body);\n + if (trackLocations && !body.length) previousToken = token;\n + return finishNode(ast.chunk(body));\n }\n \n function parseBlock(terminator) {\n @@ -2897,6 +2985,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo }\n \n function parseStatement() {\n + markLocation();\n if (Keyword === token.type) {\n switch (token.value) {\n case \'local\': next(); return parseLocalStatement();\n @@ -2917,6 +3006,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo if (Punctuator === token.type) {\n if (consume(\'::\')) return parseLabelStatement();\n }\n + if (trackLocations) locations.pop();\n if (consume(\';\')) return;\n \n return parseAssignmentOrCallStatement();\n @@ -2932,11 +3022,11 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo }\n \n expect(\'::\');\n - return ast.labelStatement(label);\n + return finishNode(ast.labelStatement(label));\n }\n \n function parseBreakStatement() {\n - return ast.breakStatement();\n + return finishNode(ast.breakStatement());\n }\n \n function parseGotoStatement() {\n @@ -2944,13 +3034,13 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo , label = parseIdentifier();\n \n if (options.scope) label.isLabel = scopeHasName(\'::\' + name + \'::\');\n - return ast.gotoStatement(label);\n + return finishNode(ast.gotoStatement(label));\n }\n \n function parseDoStatement() {\n var body = parseBlock();\n expect(\'end\');\n - return ast.doStatement(body);\n + return finishNode(ast.doStatement(body));\n }\n \n function parseWhileStatement() {\n @@ -2958,14 +3048,14 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo expect(\'do\');\n var body = parseBlock();\n expect(\'end\');\n - return ast.whileStatement(condition, body);\n + return finishNode(ast.whileStatement(condition, body));\n }\n \n function parseRepeatStatement() {\n var body = parseBlock();\n expect(\'until\');\n var condition = parseExpectedExpression();\n - return ast.repeatStatement(condition, body);\n + return finishNode(ast.repeatStatement(condition, body));\n }\n \n function parseReturnStatement() {\n @@ -2980,33 +3070,44 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo }\n consume(\';\'); // grammar tells us ; is optional here.\n }\n - return ast.returnStatement(expressions);\n + return finishNode(ast.returnStatement(expressions));\n }\n \n function parseIfStatement() {\n var clauses = []\n , condition\n - , body;\n -\n + , body\n + , marker;\n + if (trackLocations) {\n + marker = locations[locations.length - 1];\n + locations.push(marker);\n + }\n condition = parseExpectedExpression();\n expect(\'then\');\n body = parseBlock();\n - clauses.push(ast.ifClause(condition, body));\n + clauses.push(finishNode(ast.ifClause(condition, body)));\n \n + if (trackLocations) marker = createLocationMarker();\n while (consume(\'elseif\')) {\n + pushLocation(marker);\n condition = parseExpectedExpression();\n expect(\'then\');\n body = parseBlock();\n - clauses.push(ast.elseifClause(condition, body));\n + clauses.push(finishNode(ast.elseifClause(condition, body)));\n + if (trackLocations) marker = createLocationMarker();\n }\n \n if (consume(\'else\')) {\n + if (trackLocations) {\n + marker = new Marker(previousToken);\n + locations.push(marker);\n + }\n body = parseBlock();\n - clauses.push(ast.elseClause(body));\n + clauses.push(finishNode(ast.elseClause(body)));\n }\n \n expect(\'end\');\n - return ast.ifStatement(clauses);\n + return finishNode(ast.ifStatement(clauses));\n }\n \n function parseForStatement() {\n @@ -3023,8 +3124,9 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo body = parseBlock();\n expect(\'end\');\n \n - return ast.forNumericStatement(variable, start, end, step, body);\n - } else {\n + return finishNode(ast.forNumericStatement(variable, start, end, step, body));\n + }\n + else {\n var variables = [variable];\n while (consume(\',\')) {\n variable = parseIdentifier();\n @@ -3042,7 +3144,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo body = parseBlock();\n expect(\'end\');\n \n - return ast.forGenericStatement(variables, iterators, body);\n + return finishNode(ast.forGenericStatement(variables, iterators, body));\n }\n }\n \n @@ -3071,7 +3173,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo }\n }\n \n - return ast.localStatement(variables, init);\n + return finishNode(ast.localStatement(variables, init));\n }\n if (consume(\'function\')) {\n name = parseIdentifier();\n @@ -3084,7 +3186,10 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo \n function parseAssignmentOrCallStatement() {\n var previous = token\n - , expression = parsePrefixExpression();\n + , expression, marker;\n +\n + if (trackLocations) marker = createLocationMarker();\n + expression = parsePrefixExpression();\n \n if (null == expression) return unexpected(token);\n if (\',=\'.indexOf(token.value) >= 0) {\n @@ -3102,19 +3207,23 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo exp = parseExpectedExpression();\n init.push(exp);\n } while (consume(\',\'));\n - return ast.assignmentStatement(variables, init);\n +\n + pushLocation(marker);\n + return finishNode(ast.assignmentStatement(variables, init));\n }\n if (isCallExpression(expression)) {\n - return ast.callStatement(expression);\n + pushLocation(marker);\n + return finishNode(ast.callStatement(expression));\n }\n return unexpected(previous);\n }\n \n function parseIdentifier() {\n + markLocation();\n var identifier = token.value;\n if (Identifier !== token.type) raiseUnexpectedToken(\'<name>\', token);\n next();\n - return ast.identifier(identifier);\n + return finishNode(ast.identifier(identifier));\n }\n \n function parseFunctionDeclaration(name, isLocal) {\n @@ -3130,7 +3239,8 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo \n if (consume(\',\')) continue;\n else if (consume(\')\')) break;\n - } else if (VarargLiteral === token.type) {\n + }\n + else if (VarargLiteral === token.type) {\n parameters.push(parsePrimaryExpression());\n expect(\')\');\n break;\n @@ -3144,24 +3254,29 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo expect(\'end\');\n \n isLocal = isLocal || false;\n - return ast.functionStatement(name, parameters, isLocal, body);\n + return finishNode(ast.functionStatement(name, parameters, isLocal, body));\n }\n \n function parseFunctionName() {\n - var base = parseIdentifier()\n - , name;\n + var base, name, marker;\n +\n + if (trackLocations) marker = createLocationMarker();\n + base = parseIdentifier();\n +\n if (options.scope) attachScope(base, false);\n \n while (consume(\'.\')) {\n + pushLocation(marker);\n name = parseIdentifier();\n if (options.scope) attachScope(name, false);\n - base = ast.memberExpression(base, \'.\', name);\n + base = finishNode(ast.memberExpression(base, \'.\', name));\n }\n \n if (consume(\':\')) {\n + pushLocation(marker);\n name = parseIdentifier();\n if (options.scope) attachScope(name, false);\n - base = ast.memberExpression(base, \':\', name);\n + base = finishNode(ast.memberExpression(base, \':\', name));\n }\n \n return base;\n @@ -3172,23 +3287,27 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo , key, value;\n \n while (true) {\n + markLocation();\n if (Punctuator === token.type && consume(\'[\')) {\n key = parseExpectedExpression();\n expect(\']\');\n expect(\'=\');\n value = parseExpectedExpression();\n - fields.push(ast.tableKey(key, value));\n + fields.push(finishNode(ast.tableKey(key, value)));\n } else if (Identifier === token.type) {\n key = parseExpectedExpression();\n if (consume(\'=\')) {\n value = parseExpectedExpression();\n - fields.push(ast.tableKeyString(key, value));\n + fields.push(finishNode(ast.tableKeyString(key, value)));\n } else {\n - fields.push(ast.tableValue(key));\n + fields.push(finishNode(ast.tableValue(key)));\n }\n } else {\n - if (null == (value = parseExpression())) break;\n - fields.push(ast.tableValue(value));\n + if (null == (value = parseExpression())) {\n + locations.pop();\n + break;\n + }\n + fields.push(finishNode(ast.tableValue(value)));\n }\n if (\',;\'.indexOf(token.value) >= 0) {\n next();\n @@ -3197,7 +3316,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo if (\'}\' === token.value) break;\n }\n expect(\'}\');\n - return ast.tableConstructorExpression(fields);\n + return finishNode(ast.tableConstructorExpression(fields));\n }\n \n function parseExpression() {\n @@ -3212,34 +3331,37 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo }\n \n function binaryPrecedence(operator) {\n - var character = operator.charCodeAt(0)\n + var charCode = operator.charCodeAt(0)\n , length = operator.length;\n \n if (1 === length) {\n - switch (character) {\n + switch (charCode) {\n case 94: return 10; // ^\n case 42: case 47: case 37: return 7; // * / %\n case 43: case 45: return 6; // + -\n case 60: case 62: return 3; // < >\n }\n } else if (2 === length) {\n - switch (character) {\n + switch (charCode) {\n case 46: return 5; // ..\n case 60: case 62: case 61: case 126: return 3; // <= >= == ~=\n case 111: return 1; // or\n }\n - } else if (97 === character && \'and\' === operator) return 2;\n + } else if (97 === charCode && \'and\' === operator) return 2;\n return 0;\n }\n \n function parseSubExpression(minPrecedence) {\n - var operator = token.value;\n - var expression;\n + var operator = token.value\n + , expression, marker;\n +\n + if (trackLocations) marker = createLocationMarker();\n if (isUnary(token)) {\n + markLocation();\n next();\n var argument = parseSubExpression(8);\n if (argument == null) raiseUnexpectedToken(\'<expression>\', token);\n - expression = ast.unaryExpression(operator, argument);\n + expression = finishNode(ast.unaryExpression(operator, argument));\n }\n if (null == expression) {\n expression = parsePrimaryExpression();\n @@ -3261,14 +3383,18 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo next();\n var right = parseSubExpression(precedence);\n if (null == right) raiseUnexpectedToken(\'<expression>\', token);\n - expression = ast.binaryExpression(operator, expression, right);\n + if (trackLocations) locations.push(marker);\n + expression = finishNode(ast.binaryExpression(operator, expression, right));\n +\n }\n return expression;\n }\n \n function parsePrefixExpression() {\n - var base, name\n + var base, name, marker\n , isLocal;\n +\n + if (trackLocations) marker = createLocationMarker();\n if (Identifier === token.type) {\n name = token.value;\n base = parseIdentifier();\n @@ -3285,31 +3411,37 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo if (Punctuator === token.type) {\n switch (token.value) {\n case \'[\':\n + pushLocation(marker);\n next();\n expression = parseExpectedExpression();\n - base = ast.indexExpression(base, expression);\n + base = finishNode(ast.indexExpression(base, expression));\n expect(\']\');\n break;\n case \'.\':\n + pushLocation(marker);\n next();\n identifier = parseIdentifier();\n if (options.scope) attachScope(identifier, isLocal);\n - base = ast.memberExpression(base, \'.\', identifier);\n + base = finishNode(ast.memberExpression(base, \'.\', identifier));\n break;\n case \':\':\n + pushLocation(marker);\n next();\n identifier = parseIdentifier();\n if (options.scope) attachScope(identifier, isLocal);\n - base = ast.memberExpression(base, \':\', identifier);\n + base = finishNode(ast.memberExpression(base, \':\', identifier));\n + pushLocation(marker);\n base = parseCallExpression(base);\n break;\n case \'(\': case \'{\': // args\n + pushLocation(marker);\n base = parseCallExpression(base);\n break;\n default:\n return base;\n }\n } else if (StringLiteral === token.type) {\n + pushLocation(marker);\n base = parseCallExpression(base);\n } else {\n break;\n @@ -3333,16 +3465,16 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo }\n \n expect(\')\');\n - return ast.callExpression(base, expressions);\n + return finishNode(ast.callExpression(base, expressions));\n \n case \'{\':\n + markLocation();\n next();\n var table = parseTableConstructor();\n - return ast.tableCallExpression(base, table);\n + return finishNode(ast.tableCallExpression(base, table));\n }\n -\n } else if (StringLiteral === token.type) {\n - return ast.stringCallExpression(base, parsePrimaryExpression());\n + return finishNode(ast.stringCallExpression(base, parsePrimaryExpression()));\n }\n \n raiseUnexpectedToken(\'function arguments\', token);\n @@ -3351,17 +3483,24 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo function parsePrimaryExpression() {\n var literals = StringLiteral | NumericLiteral | BooleanLiteral | NilLiteral | VarargLiteral\n , value = token.value\n - , type = token.type;\n + , type = token.type\n + , marker;\n +\n + if (trackLocations) marker = createLocationMarker();\n \n if (type & literals) {\n + pushLocation(marker);\n var raw = input.slice(token.range[0], token.range[1]);\n next();\n - return ast.literal(type, value, raw);\n + return finishNode(ast.literal(type, value, raw));\n } else if (Keyword === type && \'function\' === value) {\n + pushLocation(marker);\n next();\n return parseFunctionDeclaration(null);\n - } else if (consume(\'{\'))\n + } else if (consume(\'{\')) {\n + pushLocation(marker);\n return parseTableConstructor();\n + }\n }\n \n exports.parse = parse;\n @@ -3382,7 +3521,7 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo scopes = [[]];\n scopeDepth = 0;\n globals = [];\n - globalNames = [];\n + locations = [];\n \n if (options.comments) comments = [];\n if (!options.wait) return end();\n @@ -3401,14 +3540,18 @@ define(\'ace/mode/lua/luaparse\', [\'require\', \'exports\', \'module\' , \'expo if (\'undefined\' !== typeof _input) write(_input);\n \n length = input.length;\n - lookahead = readToken();\n + trackLocations = options.locations || options.ranges;\n + lookahead = lex();\n \n var chunk = parseChunk();\n if (options.comments) chunk.comments = comments;\n if (options.scope) chunk.globals = globals;\n +\n + if (locations.length > 0)\n + throw new Error(\'Location tracking failed. This is most likely a bug in luaparse\');\n +\n return chunk;\n }\n - exports.lex = readToken;\n \n }));\n \n diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-php.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-php.js.xml index 61563566ac..c04a8883a6 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-php.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-php.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155570.73</string> </value> + <value> <string>ts83646620.49</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>224350</int> </value> + <value> <int>229384</int> </value> </item> <item> <key> <string>title</string> </key> @@ -55,31 +55,30 @@ if (typeof window.window != "undefined" && window.document) {\n return;\n }\n \n -window.console = {\n - log: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - },\n - error: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - }\n +window.console = function() {\n + var msgs = Array.prototype.slice.call(arguments, 0);\n + postMessage({type: "log", data: msgs});\n };\n +window.console.error =\n +window.console.warn = \n +window.console.log =\n +window.console.trace = window.console;\n +\n window.window = window;\n window.ace = window;\n \n window.normalizeModule = function(parentId, moduleName) {\n if (moduleName.indexOf("!") !== -1) {\n var chunks = moduleName.split("!");\n - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);\n + return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);\n }\n if (moduleName.charAt(0) == ".") {\n var base = parentId.split("/").slice(0, -1).join("/");\n - moduleName = base + "/" + moduleName;\n + moduleName = (base ? base + "/" : "") + moduleName;\n \n while(moduleName.indexOf(".") !== -1 && previous != moduleName) {\n var previous = moduleName;\n - moduleName = moduleName.replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n + moduleName = moduleName.replace(/^\\.\\//, "").replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n }\n }\n \n @@ -94,9 +93,9 @@ window.require = function(parentId, id) {\n if (!id.charAt)\n throw new Error("worker.js require() accepts only (parentId, id) as arguments");\n \n - id = normalizeModule(parentId, id);\n + id = window.normalizeModule(parentId, id);\n \n - var module = require.modules[id];\n + var module = window.require.modules[id];\n if (module) {\n if (!module.initialized) {\n module.initialized = true;\n @@ -106,48 +105,60 @@ window.require = function(parentId, id) {\n }\n \n var chunks = id.split("/");\n - chunks[0] = require.tlns[chunks[0]] || chunks[0];\n + if (!window.require.tlns)\n + return console.log("unable to load " + id);\n + chunks[0] = window.require.tlns[chunks[0]] || chunks[0];\n var path = chunks.join("/") + ".js";\n \n - require.id = id;\n + window.require.id = id;\n importScripts(path);\n - return require(parentId, id);\n + return window.require(parentId, id);\n };\n -\n -require.modules = {};\n -require.tlns = {};\n +window.require.modules = {};\n +window.require.tlns = {};\n \n window.define = function(id, deps, factory) {\n if (arguments.length == 2) {\n factory = deps;\n if (typeof id != "string") {\n deps = id;\n - id = require.id;\n + id = window.require.id;\n }\n } else if (arguments.length == 1) {\n factory = id;\n - id = require.id;\n + deps = []\n + id = window.require.id;\n }\n +\n + if (!deps.length)\n + deps = [\'require\', \'exports\', \'module\']\n \n if (id.indexOf("text!") === 0) \n return;\n \n - var req = function(deps, factory) {\n - return require(id, deps, factory);\n + var req = function(childId) {\n + return window.require(id, childId);\n };\n \n - require.modules[id] = {\n + window.require.modules[id] = {\n + exports: {},\n factory: function() {\n - var module = {\n - exports: {}\n - };\n - var returnExports = factory(req, module.exports, module);\n + var module = this;\n + var returnExports = factory.apply(this, deps.map(function(dep) {\n + switch(dep) {\n + case \'require\': return req\n + case \'exports\': return module.exports\n + case \'module\': return module\n + default: return req(dep)\n + }\n + }));\n if (returnExports)\n module.exports = returnExports;\n return module;\n }\n };\n };\n +window.define.amd = {}\n \n window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n require.tlns = topLevelNamespaces;\n @@ -155,8 +166,8 @@ window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n \n window.initSender = function initSender() {\n \n - var EventEmitter = require("ace/lib/event_emitter").EventEmitter;\n - var oop = require("ace/lib/oop");\n + var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;\n + var oop = window.require("ace/lib/oop");\n \n var Sender = function() {};\n \n @@ -207,158 +218,7 @@ window.onmessage = function(e) {\n sender._emit(msg.event, msg.data);\n }\n };\n -})(this);\n -\n -define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -var EventEmitter = {};\n -var stopPropagation = function() { this.propagationStopped = true; };\n -var preventDefault = function() { this.defaultPrevented = true; };\n -\n -EventEmitter._emit =\n -EventEmitter._dispatchEvent = function(eventName, e) {\n - this._eventRegistry || (this._eventRegistry = {});\n - this._defaultHandlers || (this._defaultHandlers = {});\n -\n - var listeners = this._eventRegistry[eventName] || [];\n - var defaultHandler = this._defaultHandlers[eventName];\n - if (!listeners.length && !defaultHandler)\n - return;\n -\n - if (typeof e != "object" || !e)\n - e = {};\n -\n - if (!e.type)\n - e.type = eventName;\n - if (!e.stopPropagation)\n - e.stopPropagation = stopPropagation;\n - if (!e.preventDefault)\n - e.preventDefault = preventDefault;\n -\n - for (var i=0; i<listeners.length; i++) {\n - listeners[i](e, this);\n - if (e.propagationStopped)\n - break;\n - }\n - \n - if (defaultHandler && !e.defaultPrevented)\n - return defaultHandler(e, this);\n -};\n -\n -\n -EventEmitter._signal = function(eventName, e) {\n - var listeners = (this._eventRegistry || {})[eventName];\n - if (!listeners)\n - return;\n -\n - for (var i=0; i<listeners.length; i++)\n - listeners[i](e, this);\n -};\n -\n -EventEmitter.once = function(eventName, callback) {\n - var _self = this;\n - callback && this.addEventListener(eventName, function newCallback() {\n - _self.removeEventListener(eventName, newCallback);\n - callback.apply(null, arguments);\n - });\n -};\n -\n -\n -EventEmitter.setDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - handlers = this._defaultHandlers = {_disabled_: {}};\n - \n - if (handlers[eventName]) {\n - var old = handlers[eventName];\n - var disabled = handlers._disabled_[eventName];\n - if (!disabled)\n - handlers._disabled_[eventName] = disabled = [];\n - disabled.push(old);\n - var i = disabled.indexOf(callback);\n - if (i != -1) \n - disabled.splice(i, 1);\n - }\n - handlers[eventName] = callback;\n -};\n -EventEmitter.removeDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - return;\n - var disabled = handlers._disabled_[eventName];\n - \n - if (handlers[eventName] == callback) {\n - var old = handlers[eventName];\n - if (disabled)\n - this.setDefaultHandler(eventName, disabled.pop());\n - } else if (disabled) {\n - var i = disabled.indexOf(callback);\n - if (i != -1)\n - disabled.splice(i, 1);\n - }\n -};\n -\n -EventEmitter.on =\n -EventEmitter.addEventListener = function(eventName, callback, capturing) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - listeners = this._eventRegistry[eventName] = [];\n -\n - if (listeners.indexOf(callback) == -1)\n - listeners[capturing ? "unshift" : "push"](callback);\n - return callback;\n -};\n -\n -EventEmitter.off =\n -EventEmitter.removeListener =\n -EventEmitter.removeEventListener = function(eventName, callback) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - return;\n -\n - var index = listeners.indexOf(callback);\n - if (index !== -1)\n - listeners.splice(index, 1);\n -};\n -\n -EventEmitter.removeAllListeners = function(eventName) {\n - if (this._eventRegistry) this._eventRegistry[eventName] = [];\n -};\n -\n -exports.EventEmitter = EventEmitter;\n -\n -});\n -\n -define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -exports.inherits = (function() {\n - var tempCtor = function() {};\n - return function(ctor, superCtor) {\n - tempCtor.prototype = superCtor.prototype;\n - ctor.super_ = superCtor.prototype;\n - ctor.prototype = new tempCtor();\n - ctor.prototype.constructor = ctor;\n - };\n -}());\n -\n -exports.mixin = function(obj, mixin) {\n - for (var key in mixin) {\n - obj[key] = mixin[key];\n - }\n - return obj;\n -};\n -\n -exports.implement = function(proto, mixin) {\n - exports.mixin(proto, mixin);\n -};\n -\n -});\n +})(this);// https://github.com/kriskowal/es5-shim\n \n define(\'ace/lib/es5-shim\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n @@ -1099,6 +959,32 @@ oop.inherits(PhpWorker, Mirror);\n }).call(PhpWorker.prototype);\n \n });\n +\n +define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +exports.inherits = (function() {\n + var tempCtor = function() {};\n + return function(ctor, superCtor) {\n + tempCtor.prototype = superCtor.prototype;\n + ctor.super_ = superCtor.prototype;\n + ctor.prototype = new tempCtor();\n + ctor.prototype.constructor = ctor;\n + };\n +}());\n +\n +exports.mixin = function(obj, mixin) {\n + for (var key in mixin) {\n + obj[key] = mixin[key];\n + }\n + return obj;\n +};\n +\n +exports.implement = function(proto, mixin) {\n + exports.mixin(proto, mixin);\n +};\n +\n +});\n define(\'ace/worker/mirror\', [\'require\', \'exports\', \'module\' , \'ace/document\', \'ace/lib/lang\'], function(require, exports, module) {\n \n \n @@ -1228,7 +1114,7 @@ var Document = function(text) {\n };\n this.getTextRange = function(range) {\n if (range.start.row == range.end.row) {\n - return this.$lines[range.start.row]\n + return this.getLine(range.start.row)\n .substring(range.start.column, range.end.column);\n }\n var lines = this.getLines(range.start.row, range.end.row);\n @@ -1339,6 +1225,8 @@ var Document = function(text) {\n return end;\n };\n this.remove = function(range) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n range.start = this.$clipPosition(range.start);\n range.end = this.$clipPosition(range.end);\n \n @@ -1422,6 +1310,8 @@ var Document = function(text) {\n this._emit("change", { data: delta });\n };\n this.replace = function(range, text) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n if (text.length == 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n @@ -1494,6 +1384,132 @@ var Document = function(text) {\n exports.Document = Document;\n });\n \n +define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +var EventEmitter = {};\n +var stopPropagation = function() { this.propagationStopped = true; };\n +var preventDefault = function() { this.defaultPrevented = true; };\n +\n +EventEmitter._emit =\n +EventEmitter._dispatchEvent = function(eventName, e) {\n + this._eventRegistry || (this._eventRegistry = {});\n + this._defaultHandlers || (this._defaultHandlers = {});\n +\n + var listeners = this._eventRegistry[eventName] || [];\n + var defaultHandler = this._defaultHandlers[eventName];\n + if (!listeners.length && !defaultHandler)\n + return;\n +\n + if (typeof e != "object" || !e)\n + e = {};\n +\n + if (!e.type)\n + e.type = eventName;\n + if (!e.stopPropagation)\n + e.stopPropagation = stopPropagation;\n + if (!e.preventDefault)\n + e.preventDefault = preventDefault;\n +\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++) {\n + listeners[i](e, this);\n + if (e.propagationStopped)\n + break;\n + }\n + \n + if (defaultHandler && !e.defaultPrevented)\n + return defaultHandler(e, this);\n +};\n +\n +\n +EventEmitter._signal = function(eventName, e) {\n + var listeners = (this._eventRegistry || {})[eventName];\n + if (!listeners)\n + return;\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++)\n + listeners[i](e, this);\n +};\n +\n +EventEmitter.once = function(eventName, callback) {\n + var _self = this;\n + callback && this.addEventListener(eventName, function newCallback() {\n + _self.removeEventListener(eventName, newCallback);\n + callback.apply(null, arguments);\n + });\n +};\n +\n +\n +EventEmitter.setDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + handlers = this._defaultHandlers = {_disabled_: {}};\n + \n + if (handlers[eventName]) {\n + var old = handlers[eventName];\n + var disabled = handlers._disabled_[eventName];\n + if (!disabled)\n + handlers._disabled_[eventName] = disabled = [];\n + disabled.push(old);\n + var i = disabled.indexOf(callback);\n + if (i != -1) \n + disabled.splice(i, 1);\n + }\n + handlers[eventName] = callback;\n +};\n +EventEmitter.removeDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + return;\n + var disabled = handlers._disabled_[eventName];\n + \n + if (handlers[eventName] == callback) {\n + var old = handlers[eventName];\n + if (disabled)\n + this.setDefaultHandler(eventName, disabled.pop());\n + } else if (disabled) {\n + var i = disabled.indexOf(callback);\n + if (i != -1)\n + disabled.splice(i, 1);\n + }\n +};\n +\n +EventEmitter.on =\n +EventEmitter.addEventListener = function(eventName, callback, capturing) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + listeners = this._eventRegistry[eventName] = [];\n +\n + if (listeners.indexOf(callback) == -1)\n + listeners[capturing ? "unshift" : "push"](callback);\n + return callback;\n +};\n +\n +EventEmitter.off =\n +EventEmitter.removeListener =\n +EventEmitter.removeEventListener = function(eventName, callback) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + return;\n +\n + var index = listeners.indexOf(callback);\n + if (index !== -1)\n + listeners.splice(index, 1);\n +};\n +\n +EventEmitter.removeAllListeners = function(eventName) {\n + if (this._eventRegistry) this._eventRegistry[eventName] = [];\n +};\n +\n +exports.EventEmitter = EventEmitter;\n +\n +});\n +\n define(\'ace/range\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n var comparePoints = function(p1, p2) {\n @@ -1740,29 +1756,25 @@ var oop = require("./lib/oop");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n \n var Anchor = exports.Anchor = function(doc, row, column) {\n - this.document = doc;\n -\n + this.$onChange = this.onChange.bind(this);\n + this.attach(doc);\n + \n if (typeof column == "undefined")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n -\n - this.$onChange = this.onChange.bind(this);\n - doc.on("change", this.$onChange);\n };\n \n (function() {\n \n oop.implement(this, EventEmitter);\n -\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n -\n this.getDocument = function() {\n return this.document;\n };\n -\n + this.$insertRight = false;\n this.onChange = function(e) {\n var delta = e.data;\n var range = delta.range;\n @@ -1783,7 +1795,8 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n if (delta.action === "insertText") {\n if (start.row === row && start.column <= column) {\n - if (start.row === end.row) {\n + if (start.column === column && this.$insertRight) {\n + } else if (start.row === end.row) {\n column += end.column - start.column;\n } else {\n column -= start.column;\n @@ -1824,7 +1837,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n this.setPosition(row, column, true);\n };\n -\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n @@ -1851,10 +1863,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n value: pos\n });\n };\n -\n this.detach = function() {\n this.document.removeEventListener("change", this.$onChange);\n };\n + this.attach = function(doc) {\n + this.document = doc || this.document;\n + this.document.on("change", this.$onChange);\n + };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n \n @@ -2067,8 +2082,6 @@ var PHP = {Constants:{}};\n \n \n \n -\n -\n PHP.Constants.T_INCLUDE = 262;\n PHP.Constants.T_INCLUDE_ONCE = 261;\n PHP.Constants.T_EVAL = 260;\n @@ -2165,6 +2178,7 @@ PHP.Constants.T_ISSET = 350;\n PHP.Constants.T_EMPTY = 351;\n PHP.Constants.T_HALT_COMPILER = 352;\n PHP.Constants.T_CLASS = 353;\n +PHP.Constants.T_TRAIT = 382;\n PHP.Constants.T_INTERFACE = 354;\n PHP.Constants.T_EXTENDS = 355;\n PHP.Constants.T_IMPLEMENTS = 356;\n @@ -2212,6 +2226,10 @@ PHP.Lexer = function( src, ini ) {\n openTag = (ini === undefined || (/^(on|true|1)$/i.test(ini.short_open_tag) ) ? /(\\<\\?php\\s|\\<\\?|\\<\\%|\\<script language\\=(\'|")?php(\'|")?\\>)/i : /(\\<\\?php\\s|<\\?=|\\<script language\\=(\'|")?php(\'|")?\\>)/i),\n openTagStart = (ini === undefined || (/^(on|true|1)$/i.test(ini.short_open_tag)) ? /^(\\<\\?php\\s|\\<\\?|\\<\\%|\\<script language\\=(\'|")?php(\'|")?\\>)/i : /^(\\<\\?php\\s|<\\?=|\\<script language\\=(\'|")?php(\'|")?\\>)/i),\n tokens = [\n + {\n + value: PHP.Constants.T_NAMESPACE,\n + re: /^namespace(?=\\s)/i\n + },\n {\n value: PHP.Constants.T_USE,\n re: /^use(?=\\s)/i\n @@ -2505,6 +2523,10 @@ PHP.Lexer = function( src, ini ) {\n re: /^class(?=[\\s\\{])/i,\n afterWhitespace: true\n },\n + {\n + value: PHP.Constants.T_TRAIT,\n + re: /^trait(?=[\\s]+[A-Za-z])/i,\n + },\n {\n value: PHP.Constants.T_PUBLIC,\n re: /^public(?=[\\s])/i\n @@ -2716,7 +2738,7 @@ PHP.Lexer = function( src, ini ) {\n \n result = result.substring( match[ 0 ].length );\n \n - match = result.match(/^(\\-\\>)([a-zA-Z0-9_\\x7f-\\xff]*)/);\n + match = result.match(/^(\\-\\>)\\s*([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*)\\s*(\\()/);\n \n if ( match !== null ) {\n \n @@ -2730,6 +2752,9 @@ PHP.Lexer = function( src, ini ) {\n match[ 2 ],\n line\n ]);\n + if (match[3]) {\n + results.push(match[3]);\n + }\n result = result.substring( match[ 0 ].length );\n }\n \n @@ -2741,9 +2766,9 @@ PHP.Lexer = function( src, ini ) {\n \n var re;\n if ( curlyOpen > 0) {\n - re = /^([^\\\\\\$"{}\\]]|\\\\.)+/g;\n + re = /^([^\\\\\\$"{}\\]\\)]|\\\\.)+/g;\n } else {\n - re = /^([^\\\\\\$"{]|\\\\.|{[^\\$])+/g;\n + re = /^([^\\\\\\$"{]|\\\\.|{[^\\$]|\\$(?=[^a-zA-Z_\\x7f-\\xff]))+/g;;\n }\n \n while(( match = result.match( re )) !== null ) {\n @@ -2757,7 +2782,7 @@ PHP.Lexer = function( src, ini ) {\n \n results.push([\n parseInt(( curlyOpen > 0 ) ? PHP.Constants.T_CONSTANT_ENCAPSED_STRING : PHP.Constants.T_ENCAPSED_AND_WHITESPACE, 10),\n - match[ 0 ],\n + match[ 0 ].replace(/\\n/g,"\\\\n").replace(/\\r/g,""),\n line\n ]);\n \n @@ -2788,10 +2813,16 @@ PHP.Lexer = function( src, ini ) {\n \n return undefined;\n \n + } else {\n + result = result.replace(/\\r/g,"");\n }\n return result;\n }\n },\n + {\n + value: PHP.Constants.T_NS_SEPARATOR,\n + re: /^\\\\(?=[a-zA-Z_])/\n + },\n {\n value: PHP.Constants.T_STRING,\n re: /^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/\n @@ -2826,7 +2857,7 @@ PHP.Lexer = function( src, ini ) {\n \n if ( heredoc !== undefined ) {\n \n - var regexp = new RegExp(\'([\\\\S\\\\s]*)(\\\\r\\\\n|\\\\n|\\\\r)(\' + heredoc + \')(;|\\\\r\\\\n|\\\\n)\',"i");\n + var regexp = new RegExp(\'([\\\\S\\\\s]*?)(\\\\r\\\\n|\\\\n|\\\\r)(\' + heredoc + \')(;|\\\\r\\\\n|\\\\n)\',"i");\n \n \n \n @@ -3134,9 +3165,13 @@ PHP.Parser.prototype.getNextToken = function( ) {\n if (typeof token === "string") {\n this.startAttributes[\'startLine\'] = this.line;\n this.endAttributes[\'endLine\'] = this.line;\n -\n - this.tokenValue = token;\n - return token.charCodeAt(0);\n + if (\'b"\' === token) {\n + this.tokenValue = \'b"\';\n + return \'"\'.charCodeAt(0);\n + } else {\n + this.tokenValue = token;\n + return token.charCodeAt(0);\n + }\n } else {\n \n \n @@ -3175,7 +3210,30 @@ PHP.Parser.prototype.tokenName = function( token ) {\n var constants = ["T_INCLUDE","T_INCLUDE_ONCE","T_EVAL","T_REQUIRE","T_REQUIRE_ONCE","T_LOGICAL_OR","T_LOGICAL_XOR","T_LOGICAL_AND","T_PRINT","T_PLUS_EQUAL","T_MINUS_EQUAL","T_MUL_EQUAL","T_DIV_EQUAL","T_CONCAT_EQUAL","T_MOD_EQUAL","T_AND_EQUAL","T_OR_EQUAL","T_XOR_EQUAL","T_SL_EQUAL","T_SR_EQUAL","T_BOOLEAN_OR","T_BOOLEAN_AND","T_IS_EQUAL","T_IS_NOT_EQUAL","T_IS_IDENTICAL","T_IS_NOT_IDENTICAL","T_IS_SMALLER_OR_EQUAL","T_IS_GREATER_OR_EQUAL","T_SL","T_SR","T_INSTANCEOF","T_INC","T_DEC","T_INT_CAST","T_DOUBLE_CAST","T_STRING_CAST","T_ARRAY_CAST","T_OBJECT_CAST","T_BOOL_CAST","T_UNSET_CAST","T_NEW","T_CLONE","T_EXIT","T_IF","T_ELSEIF","T_ELSE","T_ENDIF","T_LNUMBER","T_DNUMBER","T_STRING","T_STRING_VARNAME","T_VARIABLE","T_NUM_STRING","T_INLINE_HTML","T_CHARACTER","T_BAD_CHARACTER","T_ENCAPSED_AND_WHITESPACE","T_CONSTANT_ENCAPSED_STRING","T_ECHO","T_DO","T_WHILE","T_ENDWHILE","T_FOR","T_ENDFOR","T_FOREACH","T_ENDFOREACH","T_DECLARE","T_ENDDECLARE","T_AS","T_SWITCH","T_ENDSWITCH","T_CASE","T_DEFAULT","T_BREAK","T_CONTINUE","T_GOTO","T_FUNCTION","T_CONST","T_RETURN","T_TRY","T_CATCH","T_THROW","T_USE","T_INSTEADOF","T_GLOBAL","T_STATIC","T_ABSTRACT","T_FINAL","T_PRIVATE","T_PROTECTED","T_PUBLIC","T_VAR","T_UNSET","T_ISSET","T_EMPTY","T_HALT_COMPILER","T_CLASS","T_TRAIT","T_INTERFACE","T_EXTENDS","T_IMPLEMENTS","T_OBJECT_OPERATOR","T_DOUBLE_ARROW","T_LIST","T_ARRAY","T_CALLABLE","T_CLASS_C","T_TRAIT_C","T_METHOD_C","T_FUNC_C","T_LINE","T_FILE","T_COMMENT","T_DOC_COMMENT","T_OPEN_TAG","T_OPEN_TAG_WITH_ECHO","T_CLOSE_TAG","T_WHITESPACE","T_START_HEREDOC","T_END_HEREDOC","T_DOLLAR_OPEN_CURLY_BRACES","T_CURLY_OPEN","T_PAAMAYIM_NEKUDOTAYIM","T_DOUBLE_COLON","T_NAMESPACE","T_NS_C","T_DIR","T_NS_SEPARATOR"];\n var current = "UNKNOWN";\n constants.some(function( constant ) {\n - if (PHP.Constants[ constant ] === token) {\n + if (PHP.Constants[ constan + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +t ] === token) {\n current = constant;\n return true;\n } else {\n @@ -3198,14 +3256,79 @@ PHP.Parser.prototype.createTokenMap = function() {\n tokenMap[ i ] = PHP.Constants.T_ECHO;\n } else if( PHP.Constants.T_CLOSE_TAG === i ) {\n tokenMap[ i ] = 59;\n - } else if ( \'UNKNOWN\' !== (name = this.tokenName( i ) ) ) {\n -\n + } else if ( \'UNKNOWN\' !== (name = this.tokenName( i ) ) ) { \n tokenMap[ i ] = this[name];\n }\n }\n return tokenMap;\n };\n \n +var yynStandard = function () {\n + this.yyval = this.yyastk[ this.stackPos-(1-1) ];\n +};\n +\n +PHP.Parser.prototype.MakeArray = function( arr ) {\n + return Array.isArray( arr ) ? arr : [ arr ];\n +}\n +\n +\n +PHP.Parser.prototype.parseString = function( str ) {\n + var bLength = 0;\n + if (\'b\' === str[0]) {\n + bLength = 1;\n + }\n +\n + if (\'\\\'\' === str[ bLength ]) {\n + str = str.replace(\n + [\'\\\\\\\\\', \'\\\\\\\'\'],\n + [ \'\\\\\', \'\\\'\']);\n + } else {\n +\n + str = this.parseEscapeSequences( str, \'"\');\n +\n + }\n +\n + return str;\n +\n +};\n +\n +PHP.Parser.prototype.parseEscapeSequences = function( str, quote ) {\n +\n +\n +\n + if (undefined !== quote) {\n + str = str.replace(new RegExp(\'\\\\\' + quote, "g"), quote);\n + }\n +\n + var replacements = {\n + \'\\\\\': \'\\\\\',\n + \'$\': \'$\',\n + \'n\': "\\n",\n + \'r\': "\\r",\n + \'t\': "\\t",\n + \'f\': "\\f",\n + \'v\': "\\v",\n + \'e\': "\\x1B"\n + };\n +\n + return str.replace(\n + /~\\\\\\\\([\\\\\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3})~/g,\n + function ( matches ){\n + var str = matches[1];\n +\n + if ( replacements[ str ] !== undefined ) {\n + return replacements[ str ];\n + } else if (\'x\' === str[ 0 ] || \'X\' === str[ 0 ]) {\n + return chr(hexdec(str));\n + } else {\n + return chr(octdec(str));\n + }\n + }\n + );\n +\n + return str;\n +};\n +\n PHP.Parser.prototype.TOKEN_NONE = -1;\n PHP.Parser.prototype.TOKEN_INVALID = 149;\n \n @@ -4574,7 +4697,28 @@ PHP.Parser.prototype.yyn121 = function ( attributes ) {\n \n PHP.Parser.prototype.yyn122 = function ( attributes ) {\n this.yyval = []; \n -};\n +}; + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>\n \n PHP.Parser.prototype.yyn123 = function ( attributes ) {\n this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n @@ -5677,6 +5821,63 @@ PHP.Parser.prototype.Stmt_Class_verifyModifier = function() {\n \n };\n \n +PHP.Parser.prototype.Node_Stmt_Namespace = function() {\n + return {\n + type: "Node_Stmt_Namespace",\n + name: arguments[ 0 ],\n + attributes: arguments[ 2 ]\n + }; \n +};\n +\n +PHP.Parser.prototype.Node_Stmt_Use = function() {\n + return {\n + type: "Node_Stmt_Use",\n + name: arguments[ 0 ],\n + attributes: arguments[ 2 ]\n + }; \n +};\n +\n +PHP.Parser.prototype.Node_Stmt_UseUse = function() {\n + return {\n + type: "Node_Stmt_UseUse",\n + name: arguments[ 0 ],\n + as: arguments[1],\n + attributes: arguments[ 2 ]\n + }; \n +};\n +\n +PHP.Parser.prototype.Node_Stmt_TraitUseAdaptation_Precedence = function() {\n + return {\n + type: "Node_Stmt_TraitUseAdaptation_Precedence",\n + name: arguments[ 0 ],\n + attributes: arguments[ 2 ]\n + }; \n +};\n +\n +PHP.Parser.prototype.Node_Stmt_TraitUseAdaptation_Alias = function() {\n + return {\n + type: "Node_Stmt_TraitUseAdaptation_Alias",\n + name: arguments[ 0 ],\n + attributes: arguments[ 2 ]\n + }; \n +};\n +\n +PHP.Parser.prototype.Node_Stmt_Trait = function() {\n + return {\n + type: "Node_Stmt_Trait",\n + name: arguments[ 0 ],\n + attributes: arguments[ 2 ]\n + }; \n +};\n +\n +PHP.Parser.prototype.Node_Stmt_TraitUse = function() {\n + return {\n + type: "Node_Stmt_TraitUse",\n + name: arguments[ 0 ],\n + attributes: arguments[ 2 ]\n + }; \n +};\n +\n PHP.Parser.prototype.Node_Stmt_Class = function() {\n return {\n type: "Node_Stmt_Class",\n @@ -6704,6 +6905,26 @@ PHP.Parser.prototype.Node_Name = function() {\n \n };\n \n +PHP.Parser.prototype.Node_Name_FullyQualified = function() {\n + \n + return {\n + type: "Node_Name_FullyQualified",\n + parts: arguments[ 0 ],\n + attributes: arguments[ 1 ]\n + }; \n + \n +};\n +\n +PHP.Parser.prototype.Node_Name_Relative = function() {\n + \n + return {\n + type: "Node_Name_Relative",\n + parts: arguments[ 0 ],\n + attributes: arguments[ 1 ]\n + }; \n + \n +};\n +\n PHP.Parser.prototype.Node_Param = function() {\n \n return {\n @@ -6728,7 +6949,6 @@ PHP.Parser.prototype.Node_Arg = function() {\n \n };\n \n -\n PHP.Parser.prototype.Node_Const = function() {\n \n return {\n @@ -6743,9 +6963,13 @@ PHP.Parser.prototype.Node_Const = function() {\n \n exports.PHP = PHP;\n });\n - - -]]></string> </value> +</string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <none/> + </value> </item> </dictionary> </pickle> diff --git a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-xquery.js.xml b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-xquery.js.xml index 1f77b1fe4d..e57e31140b 100644 --- a/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-xquery.js.xml +++ b/bt5/erp5_ace_editor/SkinTemplateItem/portal_skins/erp5_ace_editor/ace/worker-xquery.js.xml @@ -8,7 +8,7 @@ <dictionary> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts77155542.36</string> </value> + <value> <string>ts83646620.46</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -30,7 +30,7 @@ </item> <item> <key> <string>size</string> </key> - <value> <int>1157746</int> </value> + <value> <int>1158768</int> </value> </item> <item> <key> <string>title</string> </key> @@ -55,31 +55,30 @@ if (typeof window.window != "undefined" && window.document) {\n return;\n }\n \n -window.console = {\n - log: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - },\n - error: function() {\n - var msgs = Array.prototype.slice.call(arguments, 0);\n - postMessage({type: "log", data: msgs});\n - }\n +window.console = function() {\n + var msgs = Array.prototype.slice.call(arguments, 0);\n + postMessage({type: "log", data: msgs});\n };\n +window.console.error =\n +window.console.warn = \n +window.console.log =\n +window.console.trace = window.console;\n +\n window.window = window;\n window.ace = window;\n \n window.normalizeModule = function(parentId, moduleName) {\n if (moduleName.indexOf("!") !== -1) {\n var chunks = moduleName.split("!");\n - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);\n + return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);\n }\n if (moduleName.charAt(0) == ".") {\n var base = parentId.split("/").slice(0, -1).join("/");\n - moduleName = base + "/" + moduleName;\n + moduleName = (base ? base + "/" : "") + moduleName;\n \n while(moduleName.indexOf(".") !== -1 && previous != moduleName) {\n var previous = moduleName;\n - moduleName = moduleName.replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n + moduleName = moduleName.replace(/^\\.\\//, "").replace(/\\/\\.\\//, "/").replace(/[^\\/]+\\/\\.\\.\\//, "");\n }\n }\n \n @@ -94,9 +93,9 @@ window.require = function(parentId, id) {\n if (!id.charAt)\n throw new Error("worker.js require() accepts only (parentId, id) as arguments");\n \n - id = normalizeModule(parentId, id);\n + id = window.normalizeModule(parentId, id);\n \n - var module = require.modules[id];\n + var module = window.require.modules[id];\n if (module) {\n if (!module.initialized) {\n module.initialized = true;\n @@ -106,48 +105,60 @@ window.require = function(parentId, id) {\n }\n \n var chunks = id.split("/");\n - chunks[0] = require.tlns[chunks[0]] || chunks[0];\n + if (!window.require.tlns)\n + return console.log("unable to load " + id);\n + chunks[0] = window.require.tlns[chunks[0]] || chunks[0];\n var path = chunks.join("/") + ".js";\n \n - require.id = id;\n + window.require.id = id;\n importScripts(path);\n - return require(parentId, id);\n + return window.require(parentId, id);\n };\n -\n -require.modules = {};\n -require.tlns = {};\n +window.require.modules = {};\n +window.require.tlns = {};\n \n window.define = function(id, deps, factory) {\n if (arguments.length == 2) {\n factory = deps;\n if (typeof id != "string") {\n deps = id;\n - id = require.id;\n + id = window.require.id;\n }\n } else if (arguments.length == 1) {\n factory = id;\n - id = require.id;\n + deps = []\n + id = window.require.id;\n }\n +\n + if (!deps.length)\n + deps = [\'require\', \'exports\', \'module\']\n \n if (id.indexOf("text!") === 0) \n return;\n \n - var req = function(deps, factory) {\n - return require(id, deps, factory);\n + var req = function(childId) {\n + return window.require(id, childId);\n };\n \n - require.modules[id] = {\n + window.require.modules[id] = {\n + exports: {},\n factory: function() {\n - var module = {\n - exports: {}\n - };\n - var returnExports = factory(req, module.exports, module);\n + var module = this;\n + var returnExports = factory.apply(this, deps.map(function(dep) {\n + switch(dep) {\n + case \'require\': return req\n + case \'exports\': return module.exports\n + case \'module\': return module\n + default: return req(dep)\n + }\n + }));\n if (returnExports)\n module.exports = returnExports;\n return module;\n }\n };\n };\n +window.define.amd = {}\n \n window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n require.tlns = topLevelNamespaces;\n @@ -155,8 +166,8 @@ window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n \n window.initSender = function initSender() {\n \n - var EventEmitter = require("ace/lib/event_emitter").EventEmitter;\n - var oop = require("ace/lib/oop");\n + var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;\n + var oop = window.require("ace/lib/oop");\n \n var Sender = function() {};\n \n @@ -207,158 +218,7 @@ window.onmessage = function(e) {\n sender._emit(msg.event, msg.data);\n }\n };\n -})(this);\n -\n -define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -var EventEmitter = {};\n -var stopPropagation = function() { this.propagationStopped = true; };\n -var preventDefault = function() { this.defaultPrevented = true; };\n -\n -EventEmitter._emit =\n -EventEmitter._dispatchEvent = function(eventName, e) {\n - this._eventRegistry || (this._eventRegistry = {});\n - this._defaultHandlers || (this._defaultHandlers = {});\n -\n - var listeners = this._eventRegistry[eventName] || [];\n - var defaultHandler = this._defaultHandlers[eventName];\n - if (!listeners.length && !defaultHandler)\n - return;\n -\n - if (typeof e != "object" || !e)\n - e = {};\n -\n - if (!e.type)\n - e.type = eventName;\n - if (!e.stopPropagation)\n - e.stopPropagation = stopPropagation;\n - if (!e.preventDefault)\n - e.preventDefault = preventDefault;\n -\n - for (var i=0; i<listeners.length; i++) {\n - listeners[i](e, this);\n - if (e.propagationStopped)\n - break;\n - }\n - \n - if (defaultHandler && !e.defaultPrevented)\n - return defaultHandler(e, this);\n -};\n -\n -\n -EventEmitter._signal = function(eventName, e) {\n - var listeners = (this._eventRegistry || {})[eventName];\n - if (!listeners)\n - return;\n -\n - for (var i=0; i<listeners.length; i++)\n - listeners[i](e, this);\n -};\n -\n -EventEmitter.once = function(eventName, callback) {\n - var _self = this;\n - callback && this.addEventListener(eventName, function newCallback() {\n - _self.removeEventListener(eventName, newCallback);\n - callback.apply(null, arguments);\n - });\n -};\n -\n -\n -EventEmitter.setDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - handlers = this._defaultHandlers = {_disabled_: {}};\n - \n - if (handlers[eventName]) {\n - var old = handlers[eventName];\n - var disabled = handlers._disabled_[eventName];\n - if (!disabled)\n - handlers._disabled_[eventName] = disabled = [];\n - disabled.push(old);\n - var i = disabled.indexOf(callback);\n - if (i != -1) \n - disabled.splice(i, 1);\n - }\n - handlers[eventName] = callback;\n -};\n -EventEmitter.removeDefaultHandler = function(eventName, callback) {\n - var handlers = this._defaultHandlers\n - if (!handlers)\n - return;\n - var disabled = handlers._disabled_[eventName];\n - \n - if (handlers[eventName] == callback) {\n - var old = handlers[eventName];\n - if (disabled)\n - this.setDefaultHandler(eventName, disabled.pop());\n - } else if (disabled) {\n - var i = disabled.indexOf(callback);\n - if (i != -1)\n - disabled.splice(i, 1);\n - }\n -};\n -\n -EventEmitter.on =\n -EventEmitter.addEventListener = function(eventName, callback, capturing) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - listeners = this._eventRegistry[eventName] = [];\n -\n - if (listeners.indexOf(callback) == -1)\n - listeners[capturing ? "unshift" : "push"](callback);\n - return callback;\n -};\n -\n -EventEmitter.off =\n -EventEmitter.removeListener =\n -EventEmitter.removeEventListener = function(eventName, callback) {\n - this._eventRegistry = this._eventRegistry || {};\n -\n - var listeners = this._eventRegistry[eventName];\n - if (!listeners)\n - return;\n -\n - var index = listeners.indexOf(callback);\n - if (index !== -1)\n - listeners.splice(index, 1);\n -};\n -\n -EventEmitter.removeAllListeners = function(eventName) {\n - if (this._eventRegistry) this._eventRegistry[eventName] = [];\n -};\n -\n -exports.EventEmitter = EventEmitter;\n -\n -});\n -\n -define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n -\n -\n -exports.inherits = (function() {\n - var tempCtor = function() {};\n - return function(ctor, superCtor) {\n - tempCtor.prototype = superCtor.prototype;\n - ctor.super_ = superCtor.prototype;\n - ctor.prototype = new tempCtor();\n - ctor.prototype.constructor = ctor;\n - };\n -}());\n -\n -exports.mixin = function(obj, mixin) {\n - for (var key in mixin) {\n - obj[key] = mixin[key];\n - }\n - return obj;\n -};\n -\n -exports.implement = function(proto, mixin) {\n - exports.mixin(proto, mixin);\n -};\n -\n -});\n +})(this);// https://github.com/kriskowal/es5-shim\n \n define(\'ace/lib/es5-shim\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n @@ -1108,6 +968,32 @@ oop.inherits(XQueryWorker, Mirror);\n }).call(XQueryWorker.prototype);\n \n });\n +\n +define(\'ace/lib/oop\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +exports.inherits = (function() {\n + var tempCtor = function() {};\n + return function(ctor, superCtor) {\n + tempCtor.prototype = superCtor.prototype;\n + ctor.super_ = superCtor.prototype;\n + ctor.prototype = new tempCtor();\n + ctor.prototype.constructor = ctor;\n + };\n +}());\n +\n +exports.mixin = function(obj, mixin) {\n + for (var key in mixin) {\n + obj[key] = mixin[key];\n + }\n + return obj;\n +};\n +\n +exports.implement = function(proto, mixin) {\n + exports.mixin(proto, mixin);\n +};\n +\n +});\n define(\'ace/worker/mirror\', [\'require\', \'exports\', \'module\' , \'ace/document\', \'ace/lib/lang\'], function(require, exports, module) {\n \n \n @@ -1237,7 +1123,7 @@ var Document = function(text) {\n };\n this.getTextRange = function(range) {\n if (range.start.row == range.end.row) {\n - return this.$lines[range.start.row]\n + return this.getLine(range.start.row)\n .substring(range.start.column, range.end.column);\n }\n var lines = this.getLines(range.start.row, range.end.row);\n @@ -1348,6 +1234,8 @@ var Document = function(text) {\n return end;\n };\n this.remove = function(range) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n range.start = this.$clipPosition(range.start);\n range.end = this.$clipPosition(range.end);\n \n @@ -1431,6 +1319,8 @@ var Document = function(text) {\n this._emit("change", { data: delta });\n };\n this.replace = function(range, text) {\n + if (!range instanceof Range)\n + range = Range.fromPoints(range.start, range.end);\n if (text.length == 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n @@ -1503,6 +1393,132 @@ var Document = function(text) {\n exports.Document = Document;\n });\n \n +define(\'ace/lib/event_emitter\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n +\n +\n +var EventEmitter = {};\n +var stopPropagation = function() { this.propagationStopped = true; };\n +var preventDefault = function() { this.defaultPrevented = true; };\n +\n +EventEmitter._emit =\n +EventEmitter._dispatchEvent = function(eventName, e) {\n + this._eventRegistry || (this._eventRegistry = {});\n + this._defaultHandlers || (this._defaultHandlers = {});\n +\n + var listeners = this._eventRegistry[eventName] || [];\n + var defaultHandler = this._defaultHandlers[eventName];\n + if (!listeners.length && !defaultHandler)\n + return;\n +\n + if (typeof e != "object" || !e)\n + e = {};\n +\n + if (!e.type)\n + e.type = eventName;\n + if (!e.stopPropagation)\n + e.stopPropagation = stopPropagation;\n + if (!e.preventDefault)\n + e.preventDefault = preventDefault;\n +\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++) {\n + listeners[i](e, this);\n + if (e.propagationStopped)\n + break;\n + }\n + \n + if (defaultHandler && !e.defaultPrevented)\n + return defaultHandler(e, this);\n +};\n +\n +\n +EventEmitter._signal = function(eventName, e) {\n + var listeners = (this._eventRegistry || {})[eventName];\n + if (!listeners)\n + return;\n + listeners = listeners.slice();\n + for (var i=0; i<listeners.length; i++)\n + listeners[i](e, this);\n +};\n +\n +EventEmitter.once = function(eventName, callback) {\n + var _self = this;\n + callback && this.addEventListener(eventName, function newCallback() {\n + _self.removeEventListener(eventName, newCallback);\n + callback.apply(null, arguments);\n + });\n +};\n +\n +\n +EventEmitter.setDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + handlers = this._defaultHandlers = {_disabled_: {}};\n + \n + if (handlers[eventName]) {\n + var old = handlers[eventName];\n + var disabled = handlers._disabled_[eventName];\n + if (!disabled)\n + handlers._disabled_[eventName] = disabled = [];\n + disabled.push(old);\n + var i = disabled.indexOf(callback);\n + if (i != -1) \n + disabled.splice(i, 1);\n + }\n + handlers[eventName] = callback;\n +};\n +EventEmitter.removeDefaultHandler = function(eventName, callback) {\n + var handlers = this._defaultHandlers\n + if (!handlers)\n + return;\n + var disabled = handlers._disabled_[eventName];\n + \n + if (handlers[eventName] == callback) {\n + var old = handlers[eventName];\n + if (disabled)\n + this.setDefaultHandler(eventName, disabled.pop());\n + } else if (disabled) {\n + var i = disabled.indexOf(callback);\n + if (i != -1)\n + disabled.splice(i, 1);\n + }\n +};\n +\n +EventEmitter.on =\n +EventEmitter.addEventListener = function(eventName, callback, capturing) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + listeners = this._eventRegistry[eventName] = [];\n +\n + if (listeners.indexOf(callback) == -1)\n + listeners[capturing ? "unshift" : "push"](callback);\n + return callback;\n +};\n +\n +EventEmitter.off =\n +EventEmitter.removeListener =\n +EventEmitter.removeEventListener = function(eventName, callback) {\n + this._eventRegistry = this._eventRegistry || {};\n +\n + var listeners = this._eventRegistry[eventName];\n + if (!listeners)\n + return;\n +\n + var index = listeners.indexOf(callback);\n + if (index !== -1)\n + listeners.splice(index, 1);\n +};\n +\n +EventEmitter.removeAllListeners = function(eventName) {\n + if (this._eventRegistry) this._eventRegistry[eventName] = [];\n +};\n +\n +exports.EventEmitter = EventEmitter;\n +\n +});\n +\n define(\'ace/range\', [\'require\', \'exports\', \'module\' ], function(require, exports, module) {\n \n var comparePoints = function(p1, p2) {\n @@ -1749,29 +1765,25 @@ var oop = require("./lib/oop");\n var EventEmitter = require("./lib/event_emitter").EventEmitter;\n \n var Anchor = exports.Anchor = function(doc, row, column) {\n - this.document = doc;\n -\n + this.$onChange = this.onChange.bind(this);\n + this.attach(doc);\n + \n if (typeof column == "undefined")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n -\n - this.$onChange = this.onChange.bind(this);\n - doc.on("change", this.$onChange);\n };\n \n (function() {\n \n oop.implement(this, EventEmitter);\n -\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n -\n this.getDocument = function() {\n return this.document;\n };\n -\n + this.$insertRight = false;\n this.onChange = function(e) {\n var delta = e.data;\n var range = delta.range;\n @@ -1792,7 +1804,8 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n if (delta.action === "insertText") {\n if (start.row === row && start.column <= column) {\n - if (start.row === end.row) {\n + if (start.column === column && this.$insertRight) {\n + } else if (start.row === end.row) {\n column += end.column - start.column;\n } else {\n column -= start.column;\n @@ -1833,7 +1846,6 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n \n this.setPosition(row, column, true);\n };\n -\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n @@ -1860,10 +1872,13 @@ var Anchor = exports.Anchor = function(doc, row, column) {\n value: pos\n });\n };\n -\n this.detach = function() {\n this.document.removeEventListener("change", this.$onChange);\n };\n + this.attach = function(doc) {\n + this.document = doc || this.document;\n + this.document.on("change", this.$onChange);\n + };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n \n @@ -3631,7 +3646,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo try_PositionalVar();\n }\n lookahead1W(122); // S^WS | \'(:\' | \'in\' | \'score\'\n - if (l1 == 228) // \'score\'\n + if (l1 == 228) + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + // \'score\'\n {\n try_FTScoreVar();\n }\n @@ -5651,7 +5689,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo switch (lk)\n {\n case 87812: // \'validate\' \'lax\'\n - case 123140: // \'validate\' \'strict\'\n + case 123140: + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + // \'validate\' \'strict\'\n case 129284: // \'validate\' \'type\'\n case 141572: // \'validate\' \'{\'\n try_ValidateExpr();\n @@ -7141,7 +7202,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo case 67768: // \'namespace\' \'exit\'\n case 67800: // \'processing-instruction\' \'exit\'\n case 68178: // \'attribute\' \'external\'\n - case 68217: // \'element\' \'external\'\n + case 68217: // \'element\' \'e + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +xternal\'\n case 68280: // \'namespace\' \'external\'\n case 68312: // \'processing-instruction\' \'external\'\n case 68690: // \'attribute\' \'first\'\n @@ -8276,7 +8360,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo case 119890: // \'attribute\' \'sliding\'\n case 119929: // \'element\' \'sliding\'\n case 119992: // \'namespace\' \'sliding\'\n - case 120024: // \'processing-instruction\' \'sliding\'\n + case 120024: + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAY=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="6" aka="AAAAAAAAAAY="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + // \'processing-instruction\' \'sliding\'\n case 120402: // \'attribute\' \'some\'\n case 120441: // \'element\' \'some\'\n case 120504: // \'namespace\' \'some\'\n @@ -10351,7 +10458,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo {\n eventHandler.startNonterminal("JSONItemTest", e0);\n shift(167); // \'json-item\'\n - lookahead1W(22); // S^WS | \'(\' | \'(:\'\n + lookahead1W(22); // S^WS | \'(\' | + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAc=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="7" aka="AAAAAAAAAAc="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +\'(:\'\n shift(34); // \'(\'\n lookahead1W(23); // S^WS | \'(:\' | \')\'\n shift(37); // \')\'\n @@ -12507,7 +12637,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo default:\n shiftT(188); // \'no\'\n lookahead1W(74); // S^WS | \'(:\' | \'stemming\'\n - shiftT(238); // \'stemming\'\n + + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAg=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="8" aka="AAAAAAAAAAg="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + shiftT(238); // \'stemming\'\n }\n }\n \n @@ -14401,7 +14554,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo shift(184); // \'namespace\'\n break;\n case 185: // \'namespace-node\'\n - shift(185); // \'namespace-node\'\n + shift(185); // \'na + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAk=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="9" aka="AAAAAAAAAAk="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +mespace-node\'\n break;\n case 191: // \'node\'\n shift(191); // \'node\'\n @@ -15844,7 +16020,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo && lk != 27244 // \'declare\' \';\'\n && lk != 27245 // \'default\' \';\'\n && lk != 27246 // \'delete\' \';\'\n - && lk != 27247 // \'descendant\' \';\'\n + && lk != 27247 + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAo=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="10" aka="AAAAAAAAAAo="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + // \'descendant\' \';\'\n && lk != 27248 // \'descendant-or-self\' \';\'\n && lk != 27249 // \'descending\' \';\'\n && lk != 27254 // \'div\' \';\'\n @@ -17140,7 +17339,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo || lk == 60960 // \'%\' \'document\'\n || lk == 61204 // \'{\' \'document\'\n || lk == 61471 // \'$\' \'document-node\'\n - || lk == 61472 // \'%\' \'document-node\'\n + + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAs=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="11" aka="AAAAAAAAAAs="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + || lk == 61472 // \'%\' \'document-node\'\n || lk == 61716 // \'{\' \'document-node\'\n || lk == 61983 // \'$\' \'element\'\n || lk == 61984 // \'%\' \'element\'\n @@ -18593,7 +18815,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo && lk != 140379) // \'catch\' \'xquery\'\n {\n break;\n - }\n + + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAw=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="12" aka="AAAAAAAAAAw="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + }\n }\n eventHandler.endNonterminal("TryCatchStatement", e0);\n }\n @@ -20265,7 +20510,30 @@ define(\'ace/mode/xquery/JSONParseTreeHandler\', [\'require\', \'exports\', \'mo case 17542: // \'first\' \'(\'\n case 17543: // \'following\' \'(\'\n case 17544: // \'following-sibling\' \'(\'\n - case 17545: // \'for\' \'(\'\n + case 17545: + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAA0=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="13" aka="AAAAAAAAAA0="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + + // \'for\' \'(\'\n case 17549: // \'ft-option\' \'(\'\n case 17554: // \'ge\' \'(\'\n case 17556: // \'group\' \'(\'\n @@ -21555,7 +21823,106 @@ XQueryParser.INITIAL =\n ];\n \n XQueryParser.TRANSITION =\n -[ 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22007, 18176, 18196, 18196, 18196, 18203, 18196, 18196, 18196, 18196, 18230, 18196, 18196, 18196, 18196, 18219, 18196, 18180, 18246, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 18411, 20907, 20920, 20932, 20944, 22539, 18416, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 37625, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 21008, 21032, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21632, 21055, 23546, 23546, 23546, 21178, 23546, 23546, 23916, 42362, 21241, 23546, 23546, 23546, 23546, 19298, 47203, 21077, 21110, 23546, 23546, 23546, 35799, 23546, 23546, 21194, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 21229, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21358, 21323, 23546, 23546, 23546, 26152, 23546, 23546, 27593, 23546, 21369, 29482, 21257, 21282, 21273, 21304, 21317, 21346, 20967, 23546, 23546, 23546, 28947, 23546, 23546, 21385, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 20711, 21423, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 21446, 26048, 18745, 18766, 18771, 20561, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23540, 23546, 23546, 23546, 25880, 23545, 23546, 31245, 23546, 21468, 23534, 21504, 23546, 21511, 23546, 21527, 21539, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 21567, 23546, 23546, 23546, 31874, 23546, 23546, 21586, 23546, 23546, 21608, 21620, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 35211, 23546, 23546, 23546, 23546, 23546, 23546, 23424, 21648, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 21681, 18544, 18567, 18590, 50977, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21736, 21705, 23546, 23546, 23546, 44539, 23546, 23546, 24265, 25689, 25607, 23546, 23546, 23546, 23546, 26450, 47502, 21724, 21752, 23546, 23546, 23546, 35799, 23546, 23546, 21783, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 20237, 21819, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21551, 21857, 21913, 21913, 21913, 21864, 21908, 21913, 21918, 21967, 21842, 21949, 21880, 21961, 21896, 21934, 21983, 21995, 20967, 23546, 23546, 23546, 26225, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 22023, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 28636, 23546, 23546, 23546, 25912, 50946, 23546, 50080, 50952, 21369, 28635, 23546, 22054, 22060, 22076, 22111, 22121, 22137, 23546, 23546, 23546, 30755, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 22183, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 27655, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 51066, 39748, 22869, 22242, 22228, 22245, 22261, 22277, 22288, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 20285, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 18648, 40763, 24585, 22304, 22324, 22304, 22338, 24585, 22308, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 22361, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 22386, 23546, 23546, 23546, 25841, 18403, 23546, 19576, 22382, 44281, 22402, 22429, 22434, 22434, 22450, 22385, 22413, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22473, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 25653, 22498, 22518, 22498, 22532, 25653, 22502, 22555, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27132, 23546, 42897, 23546, 44844, 38626, 22584, 22361, 37471, 23546, 23546, 23546, 23546, 22587, 47563, 46856, 47563, 47563, 22603, 35356, 22824, 22824, 34828, 22804, 22621, 22804, 22804, 33187, 36943, 23546, 23546, 23546, 23546, 23546, 26071, 23546, 22641, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 43701, 32739, 23546, 23546, 23546, 23546, 23546, 29474, 22702, 23546, 33124, 44563, 47563, 47563, 47563, 47564, 22719, 35350, 22824, 22764, 22824, 22767, 35689, 22783, 22804, 22803, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 27587, 23546, 23546, 47562, 46826, 47563, 47563, 27195, 22821, 42846, 22824, 22824, 22824, 30376, 22804, 22841, 22804, 22804, 29883, 33199, 23546, 23546, 21430, 23546, 49502, 48973, 47563, 47563, 36153, 45209, 22824, 22824, 39816, 27834, 22804, 22804, 43796, 30403, 39964, 23546, 23546, 22861, 23546, 47560, 22885, 47563, 23113, 22903, 22824, 33078, 22920, 22804, 38116, 23546, 23546, 22937, 29174, 22980, 47563, 34384, 42527, 22825, 23019, 22804, 31964, 47447, 46606, 23083, 36624, 23105, 32340, 30673, 23131, 36549, 23164, 40907, 43074, 23200, 23229, 23275, 36645, 36686, 33550, 48975, 23107, 30672, 23141, 39417, 23313, 23334, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 24855, 21369, 23546, 23546, 23546, 23546, 23546, 20980, 20992, 23383, 23546, 23546, 23546, 35799, 23546, 23546, 23420, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 23440, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 18368, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 26071, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23485, 23546, 23546, 23546, 26606, 23546, 23546, 23546, 23546, 21369, 28080, 23505, 23528, 23563, 23575, 28081, 23512, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 30821, 23546, 37478, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23598, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23184, 21369, 23546, 23546, 23546, 23546, 23546, 22653, 22665, 23615, 23546, 23546, 23546, 35799, 23546, 23546, 23644, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 23664, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 23688, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 48779, 23733, 23546, 23546, 23546, 23546, 34921, 23753, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 23777, 48792, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 41753, 22821, 22824, 22824, 22824, 22824, 44122, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 34866, 22821, 22824, 22824, 22824, 22824, 23826, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 39721, 23546, 23546, 23546, 30797, 25982, 23546, 23546, 23849, 21369, 20313, 44188, 23887, 23893, 23909, 23546, 49114, 23932, 23546, 23546, 23546, 36603, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 24187, 24465, 24820, 25200, 24258, 18282, 18849, 18305, 23964, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 23993, 24116, 24017, 24046, 24001, 24088, 25090, 24132, 24812, 24103, 24159, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 24182, 25436, 24884, 24206, 24190, 24890, 24819, 24363, 24227, 24819, 24414, 24143, 25214, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 24243, 24030, 25425, 24281, 24706, 24308, 24337, 24350, 24389, 24405, 24517, 24423, 25208, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 24439, 19364, 24455, 25063, 24489, 24505, 24533, 25266, 24373, 24545, 24561, 24577, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 19809, 24679, 24601, 25048, 19406, 24473, 24617, 25251, 25017, 24736, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 24633, 24673, 24695, 24722, 24779, 24801, 24836, 23977, 20842, 20016, 18679, 20827, 20042, 24871, 24906, 24935, 24951, 25006, 25411, 25295, 20159, 20175, 20206, 25033, 24292, 25079, 25281, 25106, 20376, 20392, 19394, 24919, 24657, 20462, 19676, 24211, 24785, 32258, 19353, 24647, 24966, 20473, 24060, 25136, 20616, 25172, 25188, 25236, 24072, 25311, 25362, 25396, 25452, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 21328, 23546, 23546, 23546, 25841, 25477, 23546, 23546, 25472, 32915, 25493, 25501, 25501, 25501, 25517, 21330, 25540, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 25581, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20499, 25597, 18792, 18808, 18830, 23628, 18814, 25623, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 21016, 25645, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 25669, 25705, 25721, 19477, 25754, 19498, 25737, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 18708, 21452, 19692, 19708, 20143, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 50535, 23259, 25770, 25770, 25770, 25779, 21123, 21135, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 25220, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25802, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21147, 20888, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 22959, 25825, 25825, 25825, 25834, 20891, 22964, 25857, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 27140, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25873, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25552, 25561, 23546, 23546, 23546, 26852, 23546, 23546, 23546, 23546, 21369, 33245, 25896, 25896, 25896, 25905, 36950, 33250, 25928, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 22366, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25964, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 25998, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26099, 23546, 23546, 23546, 23546, 25841, 21661, 23546, 23546, 21094, 43925, 23546, 23546, 23546, 21665, 26069, 21092, 26087, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 31389, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 26115, 26145, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 43987, 26168, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 26285, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 26302, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 26321, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 19867, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 26341, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 26341, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 23049, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26364, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 19293, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 31312, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 37937, 26399, 26410, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 26426, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26445, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 41698, 26466, 26486, 26508, 26520, 41701, 26470, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 38227, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 26543, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 23546, 23424, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 28554, 23546, 26577, 26583, 26599, 47449, 44239, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 26622, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 26638, 20392, 51127, 20418, 50802, 26654, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 27306, 23546, 23546, 23546, 26527, 26683, 26714, 28322, 26699, 26731, 50814, 50823, 26775, 26789, 26801, 26817, 26829, 26204, 26845, 23599, 23546, 25326, 21171, 35898, 34903, 26868, 26909, 26948, 33311, 26979, 26959, 26995, 27011, 45967, 27047, 27063, 27101, 27117, 34536, 27156, 23546, 23546, 44844, 41240, 34846, 23546, 42415, 27173, 27664, 23546, 42356, 28101, 47563, 47563, 47563, 27192, 27418, 22824, 22824, 42533, 43762, 22804, 22804, 22804, 27211, 27231, 36943, 23546, 44839, 40944, 23546, 27267, 27287, 46640, 23546, 27304, 35519, 43402, 27322, 27344, 47563, 47563, 27380, 27403, 27436, 31453, 22824, 33011, 27464, 27493, 27533, 27556, 22804, 38069, 35418, 30315, 27573, 26241, 27609, 23546, 44532, 27629, 39107, 50620, 23546, 45009, 27646, 31107, 27698, 47563, 27746, 27765, 23297, 27785, 27825, 36368, 22824, 27859, 48139, 23833, 27991, 44504, 49256, 22804, 43572, 23672, 27877, 42988, 25683, 23546, 27893, 27913, 46094, 23546, 21213, 44018, 47563, 30489, 32462, 27941, 34820, 22824, 45399, 49012, 28821, 27978, 22804, 22804, 28014, 28034, 49064, 28072, 35792, 28097, 51046, 28117, 50856, 22994, 28137, 47563, 41728, 28206, 28229, 22824, 41433, 28267, 28290, 22804, 34572, 28320, 28338, 23546, 23546, 39715, 47560, 28358, 45550, 23113, 28379, 35308, 33078, 28399, 36714, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 41649, 28419, 28455, 40472, 38341, 28471, 38828, 40452, 28791, 24756, 33030, 27540, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 28526, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 34078, 28545, 23546, 28652, 28658, 28674, 28690, 28701, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 26963, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22605, 35842, 45303, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 46230, 50621, 28718, 23546, 28717, 23546, 48975, 47563, 47563, 47563, 27769, 28735, 22823, 22824, 22824, 22824, 49361, 49439, 22804, 22804, 22804, 22804, 28781, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 18289, 23546, 23546, 44779, 49528, 23546, 36898, 47563, 47563, 47563, 40417, 28807, 22824, 22824, 22824, 50340, 31197, 28844, 22804, 22804, 22804, 28863, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 21205, 28900, 28924, 28940, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 28963, 23546, 23546, 26527, 23546, 28992, 23546, 29010, 36977, 29029, 29038, 29054, 29069, 29081, 29097, 29109, 26204, 23546, 23546, 33645, 49739, 23546, 28529, 23546, 23546, 31365, 23546, 23546, 23546, 35995, 23546, 29125, 31167, 22824, 29149, 40337, 48749, 32108, 23546, 29172, 23546, 44844, 29190, 42384, 23546, 31347, 50774, 29209, 23546, 25948, 29214, 29230, 29291, 47563, 47563, 29309, 29325, 22824, 22824, 45608, 49036, 29349, 22804, 22804, 39677, 36943, 30220, 23546, 23546, 47099, 23546, 22095, 50621, 37205, 27682, 23546, 23546, 48975, 28152, 40051, 47563, 29366, 37135, 45217, 46920, 46953, 36665, 22824, 49439, 49901, 29385, 29404, 34563, 22804, 29885, 40883, 26241, 23546, 23546, 47600, 23546, 23546, 29423, 23546, 29445, 23546, 48976, 47563, 47563, 47563, 44406, 47564, 22821, 22824, 22824, 49328, 42575, 22767, 35849, 22804, 22804, 39288, 28274, 50448, 23672, 29464, 23546, 23546, 23546, 29498, 42828, 23546, 23546, 47562, 47563, 47563, 46820, 29369, 22821, 22824, 22824, 37856, 22824, 28821, 22804, 22804, 30184, 22804, 29883, 33199, 23546, 23546, 29517, 23546, 47519, 29538, 47563, 46768, 47563, 41728, 22824, 49353, 22824, 41433, 22804, 41641, 22804, 27843, 29565, 23546, 23546, 23546, 29581, 33988, 49629, 29610, 50265, 49148, 29627, 30732, 37573, 29644, 31970, 23546, 23546, 28626, 22586, 47563, 47563, 29661, 22824, 47375, 22804, 22804, 29679, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 45087, 23089, 29701, 47077, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 27251, 29717, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 21570, 23546, 23546, 26527, 23546, 29745, 24166, 23546, 32508, 29764, 29773, 29789, 29803, 29812, 29828, 29839, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 34673, 34671, 23546, 38486, 38493, 29855, 28213, 35842, 29875, 43066, 27800, 23546, 40629, 29901, 44844, 23546, 29926, 30774, 23546, 23546, 41541, 20026, 29946, 29989, 29293, 38320, 30005, 40270, 30031, 42116, 30052, 30082, 30100, 49972, 39453, 30135, 41942, 39677, 36943, 23546, 23546, 23546, 42078, 23546, 30162, 50621, 23546, 23546, 23546, 39564, 48975, 47563, 47563, 47563, 48721, 37135, 22823, 22824, 22824, 22824, 42777, 49439, 22804, 22804, 22804, 22804, 30182, 30146, 30200, 30236, 23546, 23546, 23546, 30252, 30271, 50620, 23546, 23546, 45468, 23469, 31420, 34156, 47563, 47563, 45201, 30292, 30331, 30348, 22824, 22824, 30365, 29156, 29407, 22804, 22804, 22804, 30399, 23672, 23807, 23546, 23546, 23546, 23546, 45523, 28572, 23546, 33872, 47563, 47563, 30419, 29369, 30438, 22824, 22824, 48645, 22824, 31904, 22804, 22804, 50360, 22804, 30539, 33199, 49920, 23546, 30462, 23546, 50724, 48973, 36270, 47563, 30480, 41728, 35391, 22824, 30505, 41433, 50493, 22804, 30530, 30403, 47447, 49732, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23251, 23546, 22586, 47563, 47563, 30555, 22824, 36108, 22804, 22804, 30575, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 30597, 46609, 47561, 23111, 30673, 39296, 30622, 30648, 30668, 30689, 19013, 30707, 30727, 30748, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23547, 30771, 23546, 26527, 25156, 30790, 23546, 30813, 24321, 30837, 30846, 30862, 30876, 30888, 30904, 30915, 26204, 22703, 30931, 26561, 35799, 30978, 26921, 26341, 27925, 30994, 31013, 31032, 31061, 31045, 31097, 31131, 31147, 31183, 31227, 31261, 31277, 39237, 39476, 31293, 33748, 31328, 22212, 31363, 31381, 41158, 23546, 23546, 40033, 23546, 22587, 32449, 31405, 47817, 28510, 31441, 31475, 46890, 31498, 30304, 31538, 22625, 36744, 47681, 39677, 36943, 23698, 29973, 31554, 29930, 31590, 23708, 31634, 39997, 31661, 48812, 31689, 31711, 31727, 31763, 31798, 31814, 29245, 31850, 40093, 31890, 34721, 31940, 35662, 31956, 31986, 27076, 32035, 32066, 32093, 32133, 26241, 50755, 23546, 43683, 23546, 32169, 19239, 32192, 32249, 22951, 24750, 43255, 32274, 47563, 32292, 45560, 22821, 32317, 22824, 42593, 48588, 50230, 35849, 32356, 22804, 45665, 32384, 32405, 32421, 23807, 25150, 32478, 32497, 47176, 23546, 32524, 45835, 36145, 40407, 31425, 32550, 44054, 32586, 34739, 22824, 32631, 32657, 30066, 33080, 32683, 47042, 40501, 29883, 33199, 23546, 45717, 33237, 23546, 23546, 32701, 31115, 42955, 32563, 41728, 45894, 41614, 32608, 41433, 33712, 42499, 35727, 30403, 47447, 28590, 32719, 48060, 32755, 32790, 42232, 33671, 32806, 37745, 39609, 32837, 40736, 33730, 32892, 32931, 32953, 19435, 22586, 32974, 48106, 28046, 33009, 33027, 33047, 48381, 35461, 47447, 40617, 22585, 47563, 50257, 22824, 33074, 36473, 36549, 33096, 40786, 36807, 32667, 39296, 33119, 43227, 48451, 49953, 33140, 24763, 23318, 45645, 33156, 33172, 33217, 47559, 33030, 30691, 33266, 33282, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 33306, 23546, 26527, 33327, 33345, 25456, 24849, 33370, 33400, 23546, 33386, 33428, 33437, 33453, 33464, 26204, 23546, 23546, 33480, 35799, 23546, 23546, 23546, 23546, 27288, 23546, 23546, 34477, 23546, 34484, 31605, 33499, 33519, 43660, 33545, 33568, 27800, 23546, 33621, 23546, 44844, 33621, 23546, 23546, 30997, 23546, 33640, 34051, 23546, 22587, 33661, 47563, 47563, 47563, 33687, 22824, 22824, 22824, 43762, 33703, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 33746, 48975, 47563, 47563, 47563, 43863, 37135, 22823, 22824, 22824, 22824, 34733, 49439, 22804, 22804, 22804, 22804, 33764, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 20258, 23546, 48976, 47563, 47563, 46759, 47563, 47564, 22821, 22824, 22824, 37850, 22824, 22767, 35849, 22804, 22804, 33781, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 43159, 23546, 47562, 47563, 47563, 31773, 29369, 22821, 22824, 22824, 49239, 22824, 28821, 22804, 22804, 22804, 33801, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 33820, 23546, 23546, 22586, 44762, 47563, 23109, 33840, 22825, 34299, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 23335, 32233, 42307, 22729, 33859, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 32176, 23546, 23546, 41552, 33893, 33902, 33918, 33924, 33940, 33956, 33967, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 37894, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 28765, 41920, 23546, 23546, 44844, 23546, 23546, 23546, 39585, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 43177, 23546, 23546, 45738, 48975, 47563, 47563, 47563, 47563, 37135, 41960, 22824, 22824, 22824, 22824, 47410, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 20340, 23546, 23178, 20358, 23546, 23546, 20360, 33983, 47563, 47563, 34004, 47563, 47564, 22821, 22824, 36824, 22824, 22824, 22767, 35849, 22804, 33785, 22804, 22804, 29879, 34024, 23546, 23546, 23546, 34050, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 32147, 47539, 23546, 48973, 47563, 47563, 39206, 45209, 22824, 22824, 43898, 27834, 22804, 22804, 34943, 30403, 47447, 34067, 47158, 34094, 23546, 34121, 32984, 34141, 34177, 43533, 34196, 34244, 36447, 34263, 31970, 28608, 23546, 34315, 34336, 34355, 34372, 28875, 33605, 34412, 34436, 34454, 31964, 47447, 46606, 43054, 32993, 34501, 34521, 30673, 34552, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 43326, 34588, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 41690, 23546, 26286, 34628, 23546, 23546, 23546, 34692, 23546, 34693, 23546, 23546, 34656, 34689, 40521, 22887, 37164, 34396, 43815, 34709, 34755, 23546, 23546, 29501, 44844, 26383, 30255, 23546, 23546, 41921, 23546, 23546, 23546, 22587, 47563, 47563, 32276, 47563, 27418, 22824, 22824, 35655, 43762, 22804, 22804, 35850, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 34780, 43953, 48975, 47563, 47563, 47563, 47563, 29859, 22823, 22824, 22824, 22824, 22824, 30446, 22804, 22804, 22804, 22804, 22804, 34799, 33201, 23546, 34844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 42714, 48976, 34862, 47563, 47563, 47563, 47564, 34882, 22824, 22824, 22824, 22824, 22767, 30383, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 34898, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 49594, 27195, 22821, 22824, 22824, 22824, 49007, 30376, 22804, 22804, 22804, 28251, 29883, 33199, 23546, 23546, 45156, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 28617, 23546, 48860, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 48020, 34919, 46606, 50168, 47563, 35289, 22824, 34937, 22804, 34959, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 26217, 23546, 26527, 28994, 29429, 32937, 21397, 21407, 19607, 19616, 34984, 34999, 35011, 35027, 35038, 26204, 23546, 23546, 23546, 21159, 35548, 23546, 23546, 29013, 35054, 32876, 23546, 35263, 35074, 35112, 39498, 35166, 47961, 27448, 49402, 46199, 35202, 23546, 23546, 23546, 38910, 23546, 47123, 35227, 23546, 23546, 23546, 35244, 44990, 22587, 44754, 35279, 47563, 35324, 35372, 48187, 22824, 29333, 35407, 49176, 35434, 22804, 35477, 39677, 36943, 23546, 35515, 50019, 41319, 42187, 35535, 23546, 19253, 43384, 35575, 35592, 35612, 35186, 47563, 42920, 37391, 20600, 22823, 35386, 22824, 40181, 35635, 35678, 29350, 22804, 33765, 35713, 35750, 48433, 33201, 23546, 23546, 23546, 23546, 35766, 20349, 35815, 44388, 23546, 23546, 40380, 47253, 47563, 47563, 41209, 36250, 35833, 43893, 22824, 22824, 48653, 43541, 43789, 35866, 22804, 22804, 31917, 36853, 33195, 23546, 19730, 35885, 35914, 32534, 35930, 35957, 45488, 36011, 28363, 36030, 36050, 36074, 36103, 39870, 50408, 42260, 32597, 45635, 22804, 36124, 36169, 36204, 27085, 31863, 36220, 46659, 44955, 21826, 38142, 32958, 36266, 47872, 36286, 36321, 36366, 36384, 36409, 36435, 36471, 36489, 36514, 36540, 36572, 23546, 23546, 18340, 36595, 30632, 36619, 36640, 39370, 36661, 36681, 36702, 36740, 36760, 31970, 23546, 36781, 18841, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 34034, 46606, 22585, 31741, 36801, 36823, 36840, 38424, 36549, 46609, 36869, 23111, 30673, 39296, 36886, 35338, 36933, 36966, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 42313, 47646, 36993, 39426, 42307, 22729, 23448, 37021, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 39988, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 50028, 21708, 39996, 40225, 24990, 37071, 37082, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 31016, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 27420, 22824, 43762, 22804, 22804, 48012, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 25524, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 37098, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 37115, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 37134, 47563, 47563, 47563, 47564, 37151, 22824, 22824, 22824, 22824, 22767, 28828, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 41164, 23546, 26527, 23546, 34764, 23546, 19155, 37185, 37221, 37234, 37250, 37256, 37272, 37288, 37299, 26204, 23546, 37315, 23546, 35799, 23546, 43426, 26746, 23546, 23546, 37335, 23546, 32153, 42194, 37334, 37351, 37380, 37407, 37443, 40833, 37430, 32821, 37459, 23546, 23546, 34612, 23546, 23546, 40581, 34220, 23546, 41122, 29193, 49795, 34228, 47262, 37494, 29549, 41774, 37514, 42784, 22904, 45886, 37530, 38036, 37570, 36188, 37589, 23034, 37618, 28342, 23546, 23546, 23546, 23546, 50126, 23546, 23546, 23546, 23546, 23546, 48975, 28498, 44484, 47563, 28434, 44023, 37641, 37671, 39810, 30349, 22824, 39853, 47704, 29645, 22804, 49383, 22804, 37657, 33201, 23546, 23546, 50909, 37693, 23546, 32019, 38379, 23546, 23546, 23546, 48976, 47563, 47563, 46474, 32220, 37710, 22821, 22824, 22824, 49321, 37734, 37761, 35849, 22804, 22804, 37788, 37809, 29879, 33195, 23546, 37872, 23546, 23546, 37889, 23546, 23546, 23546, 47562, 27357, 47563, 47563, 27195, 22821, 40293, 22824, 22824, 22824, 30376, 34247, 22804, 22804, 22804, 29883, 33199, 37910, 31075, 23546, 37928, 47744, 48973, 37953, 47563, 47563, 37979, 38003, 22824, 22824, 38027, 38061, 22804, 22804, 38085, 47447, 23404, 23546, 28599, 23546, 47560, 31782, 47563, 23113, 38011, 22824, 33078, 33721, 22804, 31970, 23546, 21592, 23546, 22586, 47563, 50097, 23109, 22824, 40810, 22804, 22804, 38110, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 33290, 45056, 38132, 38158, 38179, 33552, 39426, 27505, 38215, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23648, 23546, 26527, 23546, 26305, 23546, 23546, 29594, 20530, 20539, 38250, 38264, 38273, 38289, 38300, 26364, 23546, 23948, 23546, 35799, 23546, 34320, 23546, 23546, 23546, 23948, 23546, 35554, 36579, 23947, 35559, 38316, 33588, 36393, 38336, 43066, 27800, 23546, 23546, 38357, 44844, 23546, 39344, 42555, 23546, 39071, 23546, 23546, 38375, 41192, 48530, 47563, 47812, 38395, 28750, 22824, 42121, 31482, 43762, 38449, 22804, 38419, 38440, 32050, 38473, 38509, 46688, 34783, 23546, 23546, 23546, 23546, 23546, 38530, 23546, 23546, 48975, 47883, 38550, 42949, 47563, 37135, 22823, 38568, 30084, 22824, 22824, 49439, 42031, 34293, 41837, 22804, 22804, 29885, 33201, 23546, 38929, 23546, 38602, 23546, 44369, 37873, 23791, 38621, 23546, 48976, 27031, 38642, 47563, 38659, 47564, 38683, 47916, 22824, 22824, 38702, 33843, 35849, 39277, 22804, 33804, 38724, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 36556, 23546, 23546, 23546, 23546, 47560, 38744, 47563, 30559, 22824, 22824, 46066, 22804, 22804, 31970, 23546, 23546, 49685, 22586, 47563, 47563, 23109, 47427, 22825, 22804, 35452, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 38761, 47561, 38782, 38802, 43621, 23464, 38824, 38844, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 38045, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23810, 23546, 46101, 23546, 29522, 38860, 33103, 38895, 38945, 38984, 38970, 38989, 38954, 39005, 39016, 26204, 23546, 24981, 39032, 39052, 39135, 26183, 26715, 27157, 23546, 39087, 39123, 35972, 23871, 39151, 32436, 39187, 39222, 39262, 39312, 39360, 27800, 27271, 23546, 23546, 40856, 29748, 35256, 26269, 47340, 39386, 28121, 33483, 41086, 39406, 48539, 39200, 45029, 47563, 29260, 30036, 22824, 47369, 43762, 41883, 39448, 22787, 22804, 32852, 39469, 27673, 33624, 23546, 39492, 23546, 23546, 30166, 23546, 19760, 23546, 25974, 48975, 39514, 47563, 47563, 47563, 37135, 37987, 39541, 30332, 22824, 22824, 49439, 34278, 22804, 48403, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 49277, 23546, 23546, 39561, 44662, 39580, 20000, 47563, 47563, 38745, 47563, 41583, 39601, 22824, 22824, 42751, 22824, 39625, 36344, 22804, 22804, 49650, 22804, 39663, 33195, 39390, 39701, 21803, 40964, 23546, 28563, 39737, 39764, 42864, 39780, 30015, 27711, 27195, 22821, 39796, 39832, 37838, 39869, 30376, 37543, 39886, 39910, 39936, 47724, 39958, 49087, 33227, 48840, 39980, 40013, 20680, 50204, 40049, 40067, 40083, 45419, 22824, 40109, 40125, 36765, 22804, 40151, 40167, 47447, 40217, 23546, 23546, 19121, 40241, 48114, 40263, 48445, 44596, 40286, 40309, 42808, 40330, 30581, 40353, 23546, 23546, 40374, 28485, 40396, 27517, 40433, 40468, 40722, 40488, 31964, 30114, 48477, 40517, 36058, 24761, 45115, 30673, 40537, 36549, 40555, 19020, 29663, 30673, 40603, 40652, 40668, 40708, 40752, 40779, 40802, 40826, 40849, 24756, 33030, 33551, 47559, 33030, 33552, 40872, 40899, 22729, 23448, 40923, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 40939, 26527, 23546, 35150, 40960, 23546, 26932, 40980, 40989, 41005, 41019, 41028, 41044, 41055, 26204, 41071, 27176, 35142, 41110, 22748, 41145, 23546, 41180, 29961, 41225, 35127, 41274, 41299, 41335, 41350, 41366, 41401, 41487, 41458, 41474, 41503, 23546, 18442, 27630, 46235, 23546, 41314, 19147, 41528, 40358, 23546, 23546, 45375, 22587, 47563, 36909, 41568, 47891, 27418, 38686, 27953, 41607, 41630, 22804, 23213, 41665, 46983, 39677, 36943, 23546, 45937, 23546, 37118, 23546, 39337, 41681, 33824, 35058, 38605, 23546, 41717, 41752, 28167, 41769, 47563, 43475, 41790, 42050, 41800, 22824, 22824, 41816, 41853, 50302, 41874, 22804, 49204, 29885, 47656, 41907, 23546, 38879, 36785, 23546, 23546, 23546, 23546, 23546, 39036, 48976, 47563, 46791, 34008, 47563, 47564, 22821, 22824, 44589, 46895, 22824, 22767, 35849, 22804, 41937, 38457, 22804, 29879, 33195, 23546, 23546, 49550, 23546, 45766, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 32301, 41958, 22824, 22824, 22824, 46046, 28243, 22804, 22804, 22804, 22804, 41977, 33199, 20951, 42005, 23546, 23546, 23546, 44350, 47563, 31827, 47563, 41591, 22824, 49433, 22824, 28884, 22804, 42026, 22804, 30403, 31211, 23546, 23546, 23546, 23546, 27328, 40247, 47563, 27241, 38708, 22824, 42285, 31924, 22804, 29685, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 22739, 46606, 49667, 46712, 38403, 42047, 44103, 22804, 44463, 42066, 42221, 42103, 42137, 42175, 42210, 42248, 42276, 42301, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 35697, 39426, 36136, 22729, 23448, 42329, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 26377, 26527, 23546, 23546, 42378, 33354, 42400, 20758, 23546, 26429, 42436, 42448, 42464, 42475, 26204, 23546, 23546, 25120, 35799, 23546, 23546, 23546, 31573, 31305, 23546, 23546, 31567, 25118, 23546, 48973, 37963, 23115, 42491, 47011, 42515, 27800, 23546, 42549, 23546, 44844, 23546, 38766, 18352, 23546, 39064, 23546, 23546, 22159, 22587, 48548, 38163, 45793, 48521, 47316, 42571, 42591, 47404, 42609, 44147, 39942, 22845, 35499, 47057, 42343, 42636, 23546, 42657, 23546, 42010, 42641, 26759, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 36917, 47563, 37135, 22823, 22824, 22824, 42693, 22824, 49439, 22804, 22804, 28847, 22804, 22804, 29885, 45066, 44270, 23546, 42713, 23546, 23546, 26553, 42677, 42730, 31574, 23546, 48976, 47563, 48931, 47563, 47563, 47564, 42748, 22824, 42767, 22824, 22824, 34180, 35849, 22804, 42800, 22804, 22804, 29879, 33195, 23546, 44983, 23546, 23546, 23546, 23546, 42824, 23546, 47562, 47563, 36034, 47563, 27749, 22821, 22824, 22824, 42844, 22824, 48373, 22804, 22804, 38192, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 18259, 23546, 23546, 42862, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 39325, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 48281, 42880, 42913, 28181, 33529, 39296, 42936, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 38514, 23546, 23546, 23546, 44073, 44076, 50916, 44069, 36233, 42971, 33598, 40201, 40539, 43066, 29275, 42987, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 43004, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 43023, 22824, 22824, 22824, 22824, 43497, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 30422, 47563, 23109, 38579, 22825, 32685, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 22195, 38234, 23546, 23546, 22088, 23546, 31645, 43040, 31695, 43090, 43103, 43112, 43128, 43139, 26204, 23546, 31341, 32732, 35799, 43366, 43155, 43175, 36087, 40692, 50768, 31673, 43193, 32904, 31522, 31081, 43243, 43271, 43287, 43315, 43342, 40683, 23546, 23546, 23546, 45381, 43358, 40568, 43382, 43400, 43418, 23546, 23546, 30119, 43208, 47563, 43442, 27364, 43462, 43491, 28908, 22824, 43513, 43557, 22804, 43588, 41858, 43607, 43637, 43676, 23546, 23546, 23546, 18266, 35576, 23546, 23546, 43699, 43717, 43736, 20331, 32703, 47563, 41378, 47563, 46720, 41989, 43754, 29628, 22824, 22824, 43651, 43778, 43812, 46171, 22804, 44212, 43831, 43879, 33201, 23546, 23546, 45346, 23546, 43914, 43941, 23546, 27809, 23863, 43976, 44003, 47563, 48620, 44039, 35181, 49990, 44092, 22824, 45449, 39545, 44119, 42697, 44138, 22804, 44163, 27998, 44211, 35734, 33195, 39171, 23546, 23546, 23067, 44228, 32012, 23546, 44255, 36870, 46433, 23003, 47563, 27195, 22821, 44297, 46134, 22824, 22824, 30376, 39647, 22804, 44322, 22804, 41442, 44340, 23546, 44366, 44385, 23546, 23546, 34339, 44404, 47563, 47563, 44422, 22824, 22824, 22824, 44438, 22804, 22804, 22804, 44454, 47447, 48298, 23546, 23546, 23546, 44479, 47563, 47563, 46130, 22824, 22824, 44500, 22804, 22804, 44520, 23546, 40027, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 38094, 49704, 44555, 44579, 44612, 44650, 23464, 24759, 33031, 33550, 44685, 30652, 34420, 36724, 24756, 33030, 33551, 47559, 33030, 45310, 44716, 44744, 32641, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 25786, 26527, 44778, 28976, 18999, 44795, 44824, 44860, 44808, 44885, 44899, 44911, 44927, 44938, 26204, 44954, 40587, 23546, 44971, 23546, 23546, 43960, 23546, 50132, 23546, 45006, 35089, 26325, 35096, 32207, 45025, 45045, 44306, 45082, 45103, 27800, 35987, 37200, 44669, 44844, 34640, 23546, 23546, 23546, 23546, 45137, 45172, 23546, 19324, 45188, 43446, 47563, 47563, 45233, 45249, 45268, 22824, 43762, 45291, 40314, 22804, 22804, 39677, 36943, 37912, 23546, 23546, 45326, 45362, 23546, 23546, 23546, 23546, 23546, 37055, 48975, 48512, 31834, 47563, 47563, 46028, 22823, 45397, 45415, 22824, 22824, 36333, 38728, 44324, 22804, 22804, 22804, 45435, 33201, 23546, 23546, 26251, 43720, 23546, 45465, 26758, 45484, 45504, 23546, 45539, 47563, 47563, 47285, 43856, 45576, 45600, 22824, 22824, 47994, 48169, 45624, 45661, 22804, 22804, 42152, 45681, 29879, 45697, 45713, 45733, 23546, 25942, 23546, 23546, 30214, 45754, 47562, 47563, 27730, 45789, 27195, 22821, 22824, 47619, 47969, 22824, 30376, 22804, 22804, 45809, 22804, 29883, 33199, 23546, 21039, 23546, 49467, 37049, 48973, 47563, 45851, 48716, 45584, 47934, 22824, 45868, 48003, 35869, 22804, 45910, 30403, 47447, 23546, 48332, 18869, 22345, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 32000, 21288, 23546, 45931, 45953, 47563, 37498, 23109, 22824, 40444, 22804, 34438, 36455, 45997, 44634, 19558, 46021, 50382, 46044, 28056, 22804, 34468, 46609, 35619, 30711, 46062, 46082, 23464, 24759, 33031, 33550, 19538, 36296, 49945, 23141, 46117, 38586, 45823, 48503, 46150, 46187, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23737, 26527, 23546, 23546, 34968, 23546, 46215, 26881, 26893, 46251, 46267, 46279, 46295, 46306, 26204, 46322, 23241, 25565, 35799, 25341, 42889, 46340, 22204, 44869, 46352, 46368, 46377, 46393, 46349, 46420, 46455, 46490, 46547, 46518, 46534, 32867, 46005, 19766, 34600, 44844, 46563, 23546, 26188, 46580, 41258, 46596, 46625, 46675, 46736, 46784, 46807, 46842, 38552, 46877, 45877, 46911, 46944, 36419, 46977, 46999, 47027, 27557, 39677, 37035, 47093, 47115, 35228, 23546, 47139, 47174, 23546, 47766, 23546, 49770, 47192, 20591, 47219, 47244, 47278, 38643, 47301, 41736, 47356, 47391, 47426, 31459, 49439, 36524, 39920, 40135, 22804, 35492, 33058, 47443, 23546, 20251, 43007, 37694, 47465, 46324, 47491, 47518, 23546, 47535, 47555, 39525, 47841, 47563, 34125, 47580, 47616, 47635, 39844, 22824, 37169, 48362, 35849, 47672, 47697, 22804, 41891, 47720, 33195, 23058, 47740, 23546, 45516, 47760, 23546, 47782, 18627, 47798, 50186, 47833, 47857, 27195, 47907, 47932, 47950, 47985, 48036, 39636, 46165, 37602, 50472, 50517, 37554, 27477, 48056, 18311, 23546, 35780, 48076, 48095, 44700, 47563, 47563, 48130, 48155, 37677, 22824, 48203, 48236, 49183, 22804, 48272, 47447, 18372, 48297, 48314, 48330, 41202, 45981, 33877, 34811, 48348, 48040, 48397, 48419, 37793, 31970, 48467, 23546, 23546, 48493, 46466, 31618, 34505, 49612, 47069, 35443, 43299, 48564, 28304, 47475, 19993, 48611, 37364, 48636, 48669, 43591, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 44177, 29729, 48685, 36498, 48701, 45275, 48737, 39426, 42307, 22729, 39685, 48765, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 48828, 23546, 23546, 48856, 23546, 35941, 30944, 30953, 48876, 30953, 30962, 48892, 48903, 26204, 23546, 23546, 23546, 40636, 23546, 26348, 23546, 23546, 23546, 23546, 26345, 23546, 38923, 23546, 48973, 48919, 48178, 48947, 38808, 37005, 31513, 38873, 23546, 23546, 44844, 23546, 23546, 27897, 48963, 23546, 23546, 23546, 23546, 48971, 46750, 47563, 47563, 34356, 48992, 22824, 22824, 22824, 36305, 49028, 22804, 22804, 22804, 49052, 44728, 49080, 23546, 49103, 45341, 23546, 23546, 42732, 48802, 47595, 38359, 35596, 48975, 47563, 49130, 41385, 43221, 47228, 22823, 48595, 46928, 41415, 49146, 49164, 22804, 49199, 49220, 45915, 29388, 37824, 33201, 23546, 25346, 23546, 26261, 23546, 23546, 23546, 49474, 23546, 23546, 48976, 33503, 47563, 47563, 47563, 47564, 49236, 37414, 22824, 22824, 22824, 22767, 49255, 36180, 22804, 22804, 22804, 29879, 33195, 49272, 23546, 49293, 23546, 23546, 23546, 23546, 28581, 36243, 47563, 47563, 47563, 27195, 49311, 22824, 22824, 22824, 22824, 37772, 22804, 22804, 22804, 22804, 29883, 46502, 23546, 23546, 50321, 46564, 23546, 30276, 23289, 47563, 47563, 37718, 49344, 22824, 22824, 30514, 49377, 22804, 22804, 42620, 47447, 39101, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 46439, 24761, 43524, 30673, 49399, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 49418, 45121, 44624, 47559, 33030, 33552, 39426, 32368, 49455, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 49490, 49547, 33412, 49525, 23546, 34105, 23546, 33409, 49544, 42420, 41283, 49566, 49577, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 49593, 35299, 27962, 22805, 43066, 27800, 23546, 33329, 27613, 44844, 23546, 23546, 23546, 23546, 23546, 32481, 23546, 23546, 22587, 32570, 47563, 46861, 47563, 27418, 49610, 22824, 32331, 43762, 42159, 22804, 27215, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 37318, 23546, 23546, 23546, 20322, 23546, 48975, 47563, 47563, 49628, 47563, 37135, 22823, 22824, 32615, 22824, 22824, 49439, 22804, 22804, 49645, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 49666, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 49683, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 49701, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 49720, 23546, 50953, 23546, 25809, 49755, 49786, 23546, 49811, 49825, 49837, 49853, 49864, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 27387, 22824, 49893, 38199, 49880, 34211, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 42672, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 49917, 23546, 23546, 23546, 22167, 47563, 47563, 47563, 47563, 47564, 49936, 22824, 22824, 22824, 22824, 22767, 49969, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 45149, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 49988, 47563, 50006, 22821, 22824, 48578, 22824, 41424, 30376, 22804, 39894, 22804, 32389, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26445, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 41512, 50052, 50063, 26204, 23546, 23546, 23546, 35799, 50079, 30464, 23546, 23546, 23546, 23546, 32774, 23546, 41129, 32770, 46701, 50096, 40191, 28190, 22805, 43066, 27800, 23546, 23546, 23546, 50113, 28719, 34485, 45773, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 29611, 47563, 27026, 27418, 22824, 35645, 28383, 43762, 22804, 22921, 22804, 48250, 39677, 50148, 50164, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 41250, 23546, 23546, 23546, 48976, 47563, 47563, 50184, 47563, 45852, 22821, 22824, 38786, 22824, 22824, 45252, 35849, 22804, 48256, 22804, 22804, 29879, 33195, 48079, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 50202, 47563, 47563, 27195, 22821, 50220, 22824, 22824, 22824, 30376, 48220, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 21798, 23546, 23546, 35799, 23546, 23546, 46652, 23546, 23546, 23546, 23546, 46656, 23546, 23546, 50246, 28439, 22824, 50294, 36350, 50281, 47331, 23546, 29448, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 35817, 22587, 47563, 47563, 47563, 27723, 27418, 22824, 22824, 27861, 43762, 22804, 22804, 22804, 48212, 39677, 36943, 23546, 50318, 23546, 23546, 23546, 23546, 23546, 23546, 37099, 23546, 23546, 48975, 38667, 47563, 36014, 47563, 37135, 22823, 50337, 22824, 46961, 22824, 49439, 28018, 22804, 22804, 50356, 22804, 29885, 33201, 23546, 43738, 23546, 23546, 23546, 23546, 23546, 38534, 23546, 23546, 48976, 47563, 50376, 47563, 47563, 47564, 50398, 41961, 50424, 22824, 22824, 22767, 50443, 28403, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 21488, 23546, 47562, 47563, 31747, 47563, 34161, 22821, 22824, 43024, 22824, 22824, 50464, 22804, 22804, 50488, 22804, 43844, 33199, 23546, 23546, 18921, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 31241, 23546, 23546, 39165, 23546, 29133, 47563, 47563, 33578, 22824, 22824, 50509, 22804, 22804, 31970, 23546, 49295, 23546, 22586, 47563, 31161, 23109, 50427, 22825, 22804, 41830, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 21483, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 46404, 21767, 21765, 32117, 22038, 50563, 21058, 21061, 50533, 22036, 50551, 50579, 50591, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 50607, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50637, 19916, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50655, 18544, 18567, 18590, 19934, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 22150, 23546, 21369, 20766, 50679, 50692, 50708, 50717, 49509, 50740, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23761, 23546, 23546, 23758, 25629, 19208, 50639, 19926, 50639, 50790, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 42087, 23546, 23546, 23546, 23546, 22568, 29910, 50839, 50872, 50878, 50849, 23148, 50894, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 50932, 23546, 23546, 22686, 23546, 23546, 23546, 22682, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50969, 18544, 18567, 18590, 21689, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 23546, 23489, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22457, 23546, 23546, 22482, 50993, 50998, 50998, 51019, 22480, 51014, 51035, 23546, 23546, 23546, 23546, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 51062, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50655, 18544, 18567, 18590, 19934, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 51082, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 51098, 20392, 51127, 20418, 50802, 51114, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 94503, 94503, 90406, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 1, 12290, 3, 0, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 362, 94503, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 0, 94503, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 69632, 73728, 94503, 94503, 94503, 94503, 94503, 65536, 94503, 0, 2183168, 0, 0, 0, 90406, 94503, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 2985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1631, 0, 0, 0, 0, 0, 1637, 0, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2904064, 2908160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 0, 2997, 0, 0, 0, 0, 3001, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 1191, 0, 0, 0, 0, 1107, 0, 0, 0, 2138112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2978, 0, 0, 0, 2424832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625536, 0, 0, 0, 0, 0, 172032, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 1, 12290, 3, 0, 2699264, 2715648, 0, 0, 2772992, 2805760, 2830336, 0, 2863104, 2920448, 0, 0, 0, 0, 0, 0, 0, 1114, 0, 0, 0, 0, 1118, 0, 0, 1121, 0, 2805760, 2920448, 0, 0, 0, 0, 0, 2920448, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 2179072, 2179072, 2179072, 2424832, 2433024, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2625536, 2805760, 2179072, 2830336, 2179072, 2179072, 2863104, 2179072, 2179072, 2179072, 2920448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2801664, 2813952, 2179072, 2838528, 2179072, 2179072, 2179072, 2179072, 2179072, 0, 914, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2805760, 2125824, 2830336, 2125824, 2125824, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2125824, 2457600, 2125824, 2125824, 2125824, 2125824, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2375680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 2408448, 0, 0, 2584576, 0, 0, 0, 0, 2838528, 0, 0, 2838528, 0, 0, 0, 0, 0, 2469888, 2506752, 2756608, 0, 0, 2580480, 0, 0, 0, 2396160, 2400256, 2412544, 0, 0, 2838528, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2408448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 914, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2502656, 0, 0, 3010560, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3125248, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2461696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2600960, 0, 2674688, 0, 2768896, 2777088, 2781184, 0, 2822144, 0, 0, 2883584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3055616, 0, 0, 0, 3080192, 3100672, 3104768, 0, 0, 0, 0, 3186688, 0, 0, 0, 0, 0, 0, 0, 3182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3003, 3004, 0, 2719744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3014656, 3207168, 0, 2691072, 0, 0, 0, 0, 0, 2818048, 2846720, 0, 2916352, 0, 0, 3002368, 0, 0, 3022848, 0, 0, 0, 0, 0, 2871296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2766, 0, 0, 0, 0, 0, 3215360, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2494464, 2179072, 2179072, 2514944, 2179072, 2179072, 2461696, 2465792, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2523136, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2699264, 2179072, 2715648, 2179072, 2723840, 2179072, 2732032, 2772992, 2179072, 2179072, 3100672, 2179072, 2179072, 3133440, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 391, 392, 0, 393, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 3504, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3399, 540, 540, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2461696, 2465792, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2523136, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2600960, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2641920, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2719744, 2125824, 2125824, 2125824, 2125824, 2125824, 2768896, 2777088, 2768896, 2777088, 2125824, 2797568, 2822144, 2125824, 2125824, 2125824, 2883584, 2125824, 2912256, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3133440, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 0, 0, 0, 0, 0, 0, 3011, 0, 0, 0, 0, 0, 0, 3018, 0, 0, 0, 0, 2605056, 0, 0, 0, 0, 2887680, 0, 2924544, 0, 0, 0, 0, 0, 0, 0, 1135, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162112, 3170304, 0, 0, 3219456, 3035136, 0, 0, 0, 0, 0, 3072000, 2650112, 2179072, 2179072, 2179072, 2707456, 2179072, 2736128, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2887680, 2179072, 2179072, 2543616, 2547712, 2179072, 2179072, 2596864, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2584576, 0, 0, 2809856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3088384, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 2112, 0, 0, 0, 0, 0, 1680, 1681, 0, 1683, 0, 0, 0, 0, 0, 0, 0, 540, 561, 540, 561, 540, 540, 561, 540, 585, 0, 0, 2576384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2420736, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 3121152, 3141632, 0, 0, 0, 2924544, 0, 2682880, 0, 0, 0, 0, 0, 0, 0, 1242, 1272, 1273, 0, 1242, 0, 540, 540, 540, 3112960, 2387968, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2453504, 2179072, 2473984, 2482176, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2126737, 2126737, 2503569, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2532241, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2605969, 2126737, 2924544, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3035136, 2179072, 2179072, 3072000, 2179072, 2179072, 2179072, 3137536, 2126737, 2126737, 2499473, 2126737, 2126737, 2126737, 2556817, 2565009, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3224465, 0, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 2446298, 2126810, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 0, 0, 0, 0, 0, 0, 3181, 0, 0, 0, 3184, 3185, 3186, 0, 0, 3189, 3194880, 2125824, 0, 0, 0, 0, 0, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2605056, 2125824, 2629632, 2125824, 2125824, 2650112, 2125824, 2125824, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 2125824, 2125824, 3072000, 2125824, 2125824, 3121152, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2125824, 2125824, 3190784, 2125824, 3170304, 2125824, 2125824, 3190784, 3194880, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3507, 540, 540, 540, 540, 540, 540, 0, 3145728, 0, 3203072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3314, 0, 540, 0, 3067904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 2895872, 0, 0, 0, 2445312, 0, 2842624, 0, 0, 0, 2637824, 0, 0, 0, 0, 432, 0, 0, 0, 329, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 0, 0, 0, 2621440, 0, 3182592, 2899968, 0, 2961408, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2445312, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2551808, 2179072, 2179072, 2179072, 2179072, 2179072, 3117056, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2126737, 2637824, 2125824, 2125824, 2125824, 2125824, 2727936, 2752512, 2125824, 2125824, 2125824, 2125824, 2842624, 2846720, 2125824, 2895872, 2916352, 2125824, 2125824, 2945024, 2125824, 2125824, 2994176, 2125824, 3002368, 2125824, 2125824, 3022848, 2125824, 3067904, 3084288, 3096576, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2442, 2443, 0, 0, 2446, 0, 0, 0, 0, 0, 2928640, 0, 0, 0, 3059712, 0, 2543616, 2666496, 0, 2633728, 0, 0, 0, 0, 0, 1697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 2494464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3211264, 2179072, 2928640, 2179072, 2179072, 2179072, 2998272, 2179072, 2179072, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 0, 0, 2126737, 2126737, 2126737, 2126737, 2126737, 2446225, 2126737, 2179072, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 0, 2125824, 2543616, 2547712, 2125824, 2125824, 2596864, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2928640, 2125824, 2125824, 2125824, 2998272, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2126811, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2424832, 2125824, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 3178496, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2441216, 0, 0, 0, 0, 0, 0, 3311, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2165, 540, 540, 540, 540, 0, 0, 0, 2740224, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 0, 0, 1244, 0, 0, 0, 0, 1247, 0, 1194, 0, 2646016, 2179072, 2179072, 2695168, 2756608, 2179072, 2179072, 2179072, 2932736, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3039232, 2179072, 3063808, 2179072, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2396160, 2400256, 2125824, 2125824, 2441216, 2125824, 2469888, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2613248, 2646016, 2125824, 2125824, 2695168, 2756608, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2396160, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2125824, 2506752, 2506752, 2506752, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 987, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3176, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 3158016, 2437120, 0, 2785280, 0, 0, 0, 2428928, 0, 3018752, 2764800, 2572288, 0, 0, 3051520, 2179072, 2179072, 2637824, 2179072, 2179072, 2179072, 2179072, 2727936, 2752512, 2179072, 2179072, 2179072, 2842624, 2846720, 2179072, 2916352, 2428928, 2437120, 2179072, 2486272, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2654208, 2678784, 2760704, 2764800, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 2043, 2044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2140, 0, 0, 0, 0, 0, 0, 2125824, 3018752, 2125824, 2125824, 2125824, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 24576, 987, 2125824, 2125824, 2125824, 2125824, 2424832, 2125824, 3149824, 2125824, 2179072, 3051520, 2125824, 3051520, 2125824, 3051520, 0, 2490368, 2498560, 0, 0, 0, 0, 0, 0, 304, 0, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 1713, 0, 0, 0, 0, 0, 0, 0, 0, 1727, 0, 0, 0, 0, 0, 0, 0, 0, 2068, 0, 0, 0, 0, 0, 0, 0, 0, 2095, 0, 0, 0, 0, 0, 0, 0, 0, 2107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2875392, 0, 0, 0, 3176, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 2125824, 2179072, 2416640, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 3108864, 3198976, 0, 0, 2748416, 2879488, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 296, 0, 0, 0, 296, 0, 297, 0, 0, 0, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 2592768, 0, 0, 0, 0, 433, 0, 0, 0, 453, 469, 469, 469, 469, 469, 469, 469, 469, 469, 479, 469, 469, 469, 469, 469, 469, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1918, 2125824, 2125824, 2125824, 2408448, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2449408, 0, 2535424, 3031040, 0, 0, 0, 0, 0, 1734, 0, 1736, 1710, 540, 540, 540, 540, 540, 540, 540, 540, 1816, 1818, 540, 540, 540, 540, 540, 1360, 0, 2859008, 0, 0, 2179072, 2449408, 2179072, 2535424, 2179072, 2609152, 2179072, 2859008, 2179072, 2179072, 2179072, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2527232, 0, 0, 0, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2804, 540, 540, 540, 540, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2527232, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2527232, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 1080, 1084, 0, 0, 1088, 2125824, 2125824, 2125824, 2125824, 3092480, 0, 0, 0, 0, 3026944, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2539520, 0, 2949120, 0, 0, 0, 0, 434, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 457, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 2179072, 2658304, 2973696, 2179072, 2125824, 2658304, 2973696, 2125824, 2125824, 2658304, 2973696, 2125824, 2711552, 0, 2560000, 2179072, 2179072, 2945024, 2179072, 2179072, 2994176, 2179072, 3002368, 2179072, 2179072, 3022848, 2179072, 3067904, 3084288, 3096576, 2179072, 2179072, 2600960, 2179072, 2179072, 2179072, 2179072, 2641920, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2719744, 2179072, 2179072, 2441216, 2179072, 2469888, 2179072, 2179072, 2179072, 2519040, 2179072, 2179072, 2179072, 2179072, 2588672, 2179072, 2613248, 2703360, 0, 0, 0, 0, 2977792, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 2560000, 2125824, 2560000, 2125824, 0, 2179072, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 2125824, 2457600, 2179072, 2179072, 2179072, 2179072, 2457600, 2125824, 2125824, 2125824, 2985984, 2985984, 2985984, 2985984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 458, 458, 111050, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 458, 111050, 111050, 111050, 111050, 111050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2738, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 184723, 184931, 184931, 184931, 0, 184931, 184931, 184931, 184931, 184931, 0, 0, 0, 0, 0, 184931, 0, 184931, 1, 12290, 3, 78112, 1059, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 296, 0, 297, 0, 2125824, 1059, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2750, 0, 0, 0, 0, 2755, 0, 300, 118784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 300, 300, 300, 300, 0, 0, 0, 0, 0, 300, 0, 300, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 33403, 297, 0, 2134016, 49791, 301, 0, 0, 0, 0, 0, 0, 225889, 225889, 225889, 225889, 225740, 225889, 225889, 225889, 225889, 225889, 225740, 225740, 225740, 225740, 225740, 225906, 225740, 225906, 1, 12290, 3, 0, 0, 0, 0, 249856, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 697, 698, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 296, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 57344, 0, 0, 0, 0, 0, 0, 0, 3506, 0, 540, 540, 540, 540, 540, 540, 540, 2530, 540, 540, 540, 540, 540, 540, 540, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 296, 0, 0, 0, 300, 0, 0, 0, 300, 119195, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3166, 3167, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 0, 0, 0, 0, 0, 122880, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 0, 122880, 0, 2105629, 12290, 3, 0, 0, 291, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 69632, 73728, 0, 416, 416, 0, 0, 65536, 416, 1092, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765, 0, 0, 0, 0, 0, 1824, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2551808, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 131072, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2507, 0, 0, 0, 0, 0, 131072, 0, 0, 131072, 131072, 0, 0, 0, 0, 0, 0, 131072, 0, 131072, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 131072, 131072, 131072, 131072, 0, 131072, 131072, 131072, 131072, 131072, 0, 0, 0, 0, 0, 131072, 0, 131072, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 135168, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 321, 0, 0, 0, 135168, 0, 0, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3174, 0, 0, 0, 0, 0, 0, 0, 135168, 135168, 135168, 135168, 135168, 135168, 135168, 0, 135168, 135168, 135168, 135168, 135168, 0, 0, 0, 0, 0, 135168, 0, 135168, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118784, 296, 0, 2183168, 0, 0, 0, 0, 0, 636, 637, 0, 2134016, 640, 641, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 1361, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 986, 2125824, 2125824, 2125824, 2125824, 2424832, 0, 301, 139264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 331, 301, 301, 301, 301, 0, 0, 0, 0, 0, 301, 0, 301, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 297, 0, 2183168, 0, 0, 0, 0, 0, 296, 33406, 0, 2134016, 300, 49794, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61440, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455, 0, 0, 0, 0, 0, 301, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2779, 0, 0, 0, 0, 0, 298, 298, 143728, 298, 298, 298, 143728, 69632, 73728, 298, 298, 143658, 298, 298, 65536, 298, 298, 0, 0, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 363, 298, 0, 143658, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 298, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 298, 298, 298, 143658, 368, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143658, 298, 298, 143658, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 298, 0, 298, 0, 298, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143658, 298, 143658, 143658, 143658, 143658, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143728, 298, 298, 298, 298, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143728, 143658, 143728, 143728, 143728, 143728, 143728, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 90406, 90406, 90406, 90406, 0, 94503, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 2200252, 2200252, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1663, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 0, 12290, 3, 0, 0, 2183168, 126976, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 1146880, 0, 1146880, 0, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, 0, 0, 540, 2163, 540, 540, 540, 540, 540, 540, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 345, 346, 347, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 25160, 0, 0, 159744, 0, 0, 0, 0, 25160, 25160, 25160, 159744, 25160, 25160, 25160, 25160, 25160, 159744, 159744, 159744, 159744, 25160, 159744, 25160, 1, 12290, 3, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 1, 12290, 3, 0, 167936, 167936, 167936, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3015, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 0, 0, 172032, 172032, 0, 172032, 0, 0, 172032, 0, 172032, 0, 172032, 0, 0, 0, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 1, 12290, 3, 0, 172032, 0, 172032, 172032, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 0, 0, 0, 0, 1, 286, 3, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 106496, 0, 0, 0, 0, 106496, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 1, 0, 3, 78112, 176128, 176128, 176128, 0, 0, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111050, 0, 0, 0, 0, 0, 78112, 290, 0, 634, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 1159168, 414, 414, 0, 0, 0, 0, 0, 414, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 0, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 959, 561, 585, 585, 585, 1490, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1498, 585, 585, 0, 0, 229376, 0, 0, 0, 0, 0, 0, 0, 0, 1686, 0, 0, 0, 0, 0, 0, 404, 404, 404, 404, 0, 404, 404, 404, 404, 404, 0, 0, 0, 0, 0, 404, 0, 404, 1, 12290, 3, 78112, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155072, 0, 0, 0, 0, 0, 0, 0, 2131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 561, 561, 561, 561, 561, 561, 2250, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 3295, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 716, 0, 0, 719, 0, 561, 561, 2287, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 585, 585, 585, 2347, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1514, 585, 585, 2372, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 2671, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1515, 585, 585, 0, 0, 0, 2994, 0, 0, 0, 2998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 540, 3035, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 910, 540, 3075, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1417, 3116, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1501, 0, 0, 3178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3187, 0, 0, 0, 0, 0, 2046, 0, 2149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 1, 12290, 3, 0, 540, 540, 540, 3203, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3211, 540, 540, 540, 540, 540, 2813, 540, 540, 2817, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2555, 540, 540, 540, 540, 540, 540, 3255, 585, 585, 585, 3258, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3266, 585, 561, 0, 1287, 585, 1467, 1376, 540, 540, 1339, 540, 540, 561, 561, 1430, 561, 0, 585, 585, 585, 585, 585, 288, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2427, 0, 0, 0, 0, 0, 0, 0, 0, 2465, 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, 0, 3309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3508, 540, 3509, 540, 540, 540, 3326, 3327, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 961, 561, 585, 585, 585, 3361, 585, 585, 585, 585, 3362, 3363, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 3387, 0, 0, 0, 0, 0, 2092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 561, 3416, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3425, 585, 585, 585, 585, 585, 585, 1492, 585, 585, 585, 585, 585, 585, 585, 1499, 585, 585, 585, 585, 3431, 585, 585, 585, 585, 3435, 540, 561, 585, 0, 0, 0, 0, 0, 0, 665, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 3172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 3450, 540, 540, 540, 540, 540, 2814, 540, 2816, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2233, 540, 540, 540, 540, 540, 0, 561, 561, 561, 3573, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3538, 585, 585, 3585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 3627, 561, 561, 585, 585, 0, 540, 561, 585, 0, 540, 561, 585, 0, 540, 561, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2662400, 0, 2813952, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2134756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 3, 0, 0, 0, 188416, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 540, 540, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 2169, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 3, 78112, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 192971, 0, 1, 12290, 3, 0, 192971, 192971, 192971, 0, 0, 192971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 192971, 192971, 192971, 192971, 192971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2801664, 0, 0, 0, 0, 2142208, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 299, 300, 301, 0, 0, 0, 0, 0, 0, 2797568, 0, 0, 0, 0, 0, 0, 0, 2850816, 2867200, 0, 0, 740, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 740, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 2029, 0, 2031, 0, 0, 0, 0, 740, 1184, 0, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 1583, 0, 1585, 0, 0, 0, 0, 0, 0, 0, 1661, 1662, 0, 0, 0, 0, 0, 0, 0, 0, 2727936, 0, 0, 0, 3084288, 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 352, 353, 354, 0, 0, 0, 1188, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1150976, 0, 0, 0, 0, 0, 0, 561, 561, 585, 585, 585, 585, 1559, 2029, 0, 0, 0, 0, 1565, 2031, 0, 0, 0, 0, 0, 2120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2130, 2033, 0, 2035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 337, 338, 561, 561, 2323, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2339, 585, 585, 2342, 0, 304, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 2136, 0, 2138, 0, 0, 0, 0, 0, 0, 0, 0, 791, 817, 0, 817, 812, 0, 0, 0, 0, 0, 0, 204800, 204800, 0, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 205104, 204800, 204800, 205103, 205104, 204800, 205103, 205103, 204800, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 2183801, 0, 0, 0, 0, 0, 296, 297, 151552, 2134016, 300, 301, 0, 212992, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 0, 2200253, 0, 0, 0, 0, 0, 0, 2932736, 2965504, 0, 0, 3076096, 0, 0, 2695168, 3174400, 2646016, 0, 914, 2126737, 2126737, 2126737, 2126737, 2425745, 2433937, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 0, 0, 987, 2126810, 2126810, 2126810, 2126810, 2425818, 2724753, 2126737, 2732945, 2773905, 2126737, 2126737, 2126737, 2806673, 2126737, 2831249, 2126737, 2126737, 2864017, 2126737, 2126737, 2126737, 2126737, 2126737, 2524049, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2601873, 2126737, 2126737, 2921361, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3117969, 2126737, 2126737, 2126737, 2126737, 2593681, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 3093393, 0, 0, 0, 0, 3026944, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2434010, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2626522, 2126810, 2126737, 0, 2179072, 2126810, 2126810, 2126737, 2457600, 2179072, 2179072, 2179072, 2179072, 2458513, 2126737, 2126737, 2126737, 2126737, 2126737, 2626449, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2700177, 2126737, 2716561, 2126737, 2806746, 2126810, 2831322, 2126810, 2126810, 2864090, 2126810, 2126810, 2126810, 2126810, 2921434, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2458586, 2126810, 2126810, 2126810, 2126810, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 395, 0, 0, 0, 321, 0, 0, 2126737, 2126737, 2126737, 2409361, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3126161, 2126737, 2126737, 2126737, 2802577, 2814865, 2126737, 2839441, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 2126810, 2663386, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2802650, 2814938, 2126810, 2839514, 0, 0, 0, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2462609, 2466705, 2126737, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 2769809, 2778001, 2126737, 2798481, 2823057, 2126737, 2126737, 2126737, 2884497, 2126737, 2913169, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2655121, 2679697, 2761617, 2765713, 2786193, 2855825, 2970513, 2126737, 3007377, 2126737, 3134353, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3208081, 2126737, 0, 0, 0, 0, 0, 325, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2462682, 2466778, 2126810, 2126810, 2126810, 2524122, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2601946, 2126810, 2126810, 2126810, 2585562, 2126810, 2126810, 2126810, 2126810, 2126810, 2618330, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2888666, 2126810, 2126810, 2925530, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2642906, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2720730, 2126810, 2126810, 2126810, 2126810, 2126810, 2769882, 2778074, 2126810, 2798554, 2823130, 2126810, 2126810, 2126810, 2884570, 2126810, 2913242, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3126234, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3208154, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 0, 0, 0, 2388881, 2126737, 2126737, 2421649, 2126737, 2126737, 2126737, 2126737, 2126737, 2454417, 2126737, 2474897, 2483089, 2630545, 2126737, 2126737, 2651025, 2126737, 2126737, 2126737, 2708369, 2126737, 2737041, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 985, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2552794, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2126737, 3072913, 2126737, 2126737, 3122065, 2126737, 2126737, 3142545, 2126737, 2126737, 2126737, 3171217, 2126737, 2126737, 3191697, 3195793, 2126737, 0, 0, 0, 0, 0, 0, 2388954, 2126810, 2126810, 2421722, 2126810, 2126810, 2126810, 2126810, 2126810, 3040218, 2126810, 3064794, 2126810, 2126810, 2126810, 2126810, 3101658, 2126810, 2126810, 3134426, 2126810, 2454490, 2126810, 2474970, 2483162, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2532314, 2126810, 2126810, 2126810, 2126810, 3036122, 2126810, 2126810, 3072986, 2126810, 2126810, 3122138, 2126810, 2126810, 3142618, 2126810, 2126810, 2126810, 3171290, 2126810, 2126810, 3191770, 3195866, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 3112960, 3219456, 2126737, 2126737, 3113873, 3220369, 2126810, 2126810, 3113946, 3220442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 2638737, 2126737, 2126737, 2126737, 2126737, 2728849, 2753425, 2126737, 2126737, 2126737, 2126737, 2843537, 2847633, 2126737, 2896785, 2917265, 2638810, 2126810, 2126810, 2126810, 2126810, 2728922, 2753498, 2126810, 2126810, 2126810, 2126810, 2843610, 2847706, 2126810, 2896858, 2917338, 2179072, 3178496, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2495377, 2126737, 2126737, 2515857, 2126737, 2126737, 2126737, 2126737, 3011473, 2126737, 2126737, 2126810, 2126810, 2503642, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3138522, 2126737, 2940928, 2941841, 2941914, 0, 0, 0, 0, 2126737, 2544529, 2548625, 2126737, 2126737, 2597777, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2552721, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2929553, 2126737, 2126737, 2126737, 2999185, 2126737, 2126737, 2126737, 2126737, 3060625, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3040145, 2126737, 3064721, 2126737, 2126737, 2126737, 2126737, 3101585, 2126737, 2126737, 3179409, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2495450, 2126810, 2126810, 2515930, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 2160, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 3525, 561, 2126810, 2544602, 2548698, 2126810, 2126810, 2597850, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 0, 2502656, 0, 0, 3010560, 2126810, 2929626, 2126810, 2126810, 2126810, 2999258, 2126810, 2126810, 2126810, 2126810, 3060698, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3118042, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2126810, 3179482, 2126737, 2179072, 2126810, 2126737, 2179072, 2179072, 2126737, 2126737, 2126810, 2126810, 2441216, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2397073, 2401169, 2126737, 2126737, 2442129, 2126737, 2470801, 2126737, 2126737, 2126737, 2126737, 2126737, 2663313, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 0, 0, 2126810, 2126810, 2126810, 2409434, 2519953, 2126737, 2126737, 2126737, 2126737, 2589585, 2126737, 2614161, 2646929, 2126737, 2126737, 2696081, 2757521, 2126737, 2126737, 2126737, 2126737, 2126737, 3138449, 2126810, 2126810, 2499546, 2126810, 2126810, 2126810, 2556890, 2565082, 2126810, 2126810, 2126737, 2933649, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3130257, 2126737, 2126737, 3154833, 3167121, 3175313, 2397146, 2401242, 2126810, 2126810, 2442202, 2126810, 2470874, 2126810, 2126810, 2126810, 2520026, 2126810, 2126810, 2126810, 2126810, 2589658, 2126810, 2126810, 2126810, 3011546, 2126810, 2126810, 2126737, 0, 0, 0, 0, 0, 0, 0, 2592768, 0, 0, 0, 0, 663, 0, 0, 666, 667, 0, 0, 0, 0, 0, 0, 0, 540, 571, 540, 571, 540, 540, 571, 540, 595, 2614234, 2647002, 2126810, 2126810, 2696154, 2757594, 2126810, 2126810, 2126810, 2126810, 2933722, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3224538, 2126737, 2179072, 2417626, 2126810, 2126737, 2179072, 2179072, 2126737, 2126737, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2126737, 2429841, 2438033, 2126737, 2487185, 2126737, 2126737, 2945937, 2126737, 2126737, 2995089, 2126737, 3003281, 2126737, 2126737, 3023761, 2126737, 3068817, 3085201, 3097489, 2126737, 2126737, 2888593, 2126737, 2126737, 2925457, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3036049, 2126737, 3019665, 2126737, 2126737, 2126737, 3150737, 2126810, 2429914, 2438106, 2126810, 2487258, 2126810, 2126810, 2126810, 2126810, 2126810, 2700250, 2126810, 2716634, 2126810, 2724826, 2126810, 2733018, 2773978, 2126810, 2126810, 2126810, 2126810, 3150810, 2126737, 2179072, 3051520, 2126737, 3052433, 2126810, 3052506, 0, 2490368, 2498560, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2126810, 2593754, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2449408, 0, 2535424, 3031040, 0, 0, 0, 0, 0, 2439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 2126737, 2450321, 2126737, 2536337, 2126737, 2610065, 2126737, 2859921, 2126737, 2126737, 2126737, 3031953, 2126810, 2450394, 2126810, 2536410, 2126810, 2610138, 2126810, 2859994, 2126810, 2126810, 2126810, 3032026, 2126737, 2527232, 0, 0, 0, 0, 0, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237568, 0, 0, 0, 0, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2528145, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2528218, 2126810, 2126810, 2946010, 2126810, 2126810, 2995162, 2126810, 3003354, 2126810, 2126810, 3023834, 2126810, 3068890, 3085274, 3097562, 2126810, 2126810, 2126810, 2606042, 2126810, 2630618, 2126810, 2126810, 2651098, 2126810, 2126810, 2126810, 2708442, 2126810, 2737114, 2126810, 2126810, 2126810, 2655194, 2679770, 2761690, 2765786, 2786266, 2855898, 2970586, 2126810, 3007450, 2126810, 3019738, 2126810, 2126810, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 3108864, 3198976, 0, 2405265, 2126737, 2126737, 2126737, 2126737, 3027857, 2405338, 2126810, 2126810, 2126810, 2126810, 3027930, 2539520, 0, 2949120, 0, 0, 0, 0, 695, 0, 0, 0, 0, 362, 362, 362, 0, 0, 704, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2049, 0, 0, 0, 0, 2179072, 2658304, 2973696, 2179072, 2126737, 2659217, 2974609, 2126737, 2126810, 2659290, 2974682, 2126810, 2711552, 0, 2560000, 2179072, 2179072, 3125248, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2560913, 2126737, 2560986, 2126810, 0, 2179072, 2126737, 2126810, 0, 2179072, 2126737, 2126810, 0, 2179072, 2126737, 2126810, 2126810, 3130330, 2126810, 2126810, 3154906, 3167194, 3175386, 2126737, 2506752, 2507738, 2507665, 2179072, 2179072, 2126737, 2126737, 2126737, 2642833, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2720657, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2585489, 2126737, 2126737, 2126737, 2126737, 2126737, 2618257, 2126737, 2985984, 2985984, 2986897, 2986970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 0, 0, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 1, 12290, 3, 0, 0, 0, 0, 0, 253952, 0, 0, 0, 253952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 688, 0, 0, 0, 0, 0, 98304, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 2662400, 0, 2813952, 297, 0, 300, 0, 0, 0, 300, 0, 301, 0, 0, 0, 301, 0, 0, 0, 301, 69632, 139679, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 3133440, 0, 98304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 300, 0, 301, 0, 0, 0, 2473984, 2478080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 914, 0, 0, 0, 0, 0, 2451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 301, 0, 0, 0, 0, 0, 914, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2531328, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2605056, 2125824, 3194880, 2125824, 987, 0, 0, 0, 987, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2887680, 2125824, 2125824, 2924544, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 349, 350, 0, 0, 0, 0, 2125824, 237568, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 358, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 217088, 2125824, 241664, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 131072, 131072, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 155648, 0, 0, 2183168, 0, 0, 270336, 0, 0, 296, 297, 0, 2134016, 300, 301, 200704, 0, 0, 0, 0, 0, 2462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, 0, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 180224, 0, 0, 0, 0, 0, 0, 0, 1726, 0, 0, 0, 0, 0, 0, 0, 0, 304, 304, 304, 0, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 20480, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2768896, 2777088, 2797568, 2822144, 2179072, 2179072, 2179072, 2883584, 2912256, 2179072, 2179072, 2179072, 2179072, 2179072, 2617344, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2662400, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2584576, 2125824, 2125824, 2125824, 2125824, 2125824, 2617344, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142208, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 2113823, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 293, 0, 0, 245760, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3039232, 2125824, 3063808, 2125824, 2125824, 2125824, 2125824, 3100672, 2125824, 2125824, 3133440, 2125824, 245760, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 122880, 122880, 0, 0, 274432, 274432, 274432, 274432, 0, 0, 0, 0, 0, 274432, 0, 274432, 1, 12290, 3, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 1195, 0, 0, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 0, 300, 301, 0, 0, 0, 0, 0, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200252, 2200252, 2200252, 0, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 2035, 0, 0, 0, 0, 0, 0, 0, 2055, 0, 2056, 0, 0, 0, 0, 0, 0, 0, 2067, 0, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 0, 0, 0, 0, 1104, 2483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 2993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 335, 0, 0, 0, 0, 1679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 78456, 290, 0, 0, 0, 0, 0, 296, 297, 0, 0, 300, 301, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1158, 0, 0, 0, 0, 0, 562, 562, 562, 562, 562, 562, 562, 586, 586, 586, 540, 586, 586, 586, 586, 586, 562, 562, 540, 562, 586, 562, 586, 1, 12290, 3, 78112, 0, 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 521, 521, 1, 12290, 3, 78113, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 1, 12290, 3, 0, 282624, 282624, 282624, 0, 0, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3178496, 2670592, 0, 2744320, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 3176, 0, 0, 2740224, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 0, 0, 2094, 0, 0, 0, 0, 0, 0, 0, 0, 683, 684, 685, 0, 0, 0, 689, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 302, 0, 0, 0, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3301, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 2875392, 0, 0, 0, 3381, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2748416, 2879488, 0, 3381, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2531328, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2605056, 2179072, 2629632, 2179072, 2179072, 0, 0, 0, 306, 0, 0, 0, 0, 0, 305, 0, 305, 306, 0, 305, 305, 0, 0, 0, 305, 305, 306, 306, 0, 0, 0, 0, 0, 0, 305, 405, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 306, 410, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 742, 0, 0, 0, 0, 742, 0, 748, 0, 0, 0, 0, 0, 0, 1192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 462, 462, 488, 488, 462, 488, 488, 488, 488, 488, 488, 488, 513, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 533, 488, 488, 488, 488, 488, 541, 563, 541, 563, 541, 541, 563, 541, 587, 563, 563, 563, 563, 563, 563, 563, 587, 587, 587, 541, 613, 613, 613, 613, 613, 587, 563, 563, 541, 563, 587, 563, 587, 1, 12290, 3, 78112, 0, 0, 645, 0, 0, 648, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 253952, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 353, 0, 351, 0, 472, 472, 472, 472, 472, 472, 472, 477, 472, 472, 472, 472, 472, 472, 472, 472, 472, 477, 472, 0, 768, 0, 0, 772, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 343, 342, 65536, 341, 0, 788, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 736, 0, 796, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 820, 0, 0, 648, 0, 0, 0, 0, 0, 837, 792, 0, 0, 0, 0, 0, 841, 842, 792, 792, 0, 0, 0, 0, 792, 736, 792, 0, 540, 540, 851, 855, 540, 540, 540, 540, 1345, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2181, 540, 540, 540, 540, 561, 561, 561, 921, 925, 561, 561, 561, 561, 561, 561, 951, 561, 956, 561, 963, 561, 966, 561, 561, 980, 561, 561, 0, 585, 585, 585, 994, 998, 585, 585, 585, 585, 585, 585, 1963, 1964, 1966, 585, 585, 585, 585, 585, 585, 585, 561, 2713, 585, 2715, 2716, 540, 540, 540, 540, 585, 585, 585, 1024, 585, 1029, 585, 1036, 585, 1039, 585, 585, 1053, 585, 585, 966, 0, 0, 0, 855, 585, 998, 925, 851, 1065, 894, 540, 540, 921, 1070, 966, 561, 0, 585, 585, 585, 585, 585, 78112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114688, 0, 241664, 258048, 0, 0, 0, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 673, 0, 540, 540, 1342, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 585, 585, 585, 1524, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1517, 585, 585, 585, 1433, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 3070, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 0, 0, 3662, 0, 0, 0, 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1103, 1104, 1105, 1106, 1654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 1693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 1732, 0, 0, 1733, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3030, 540, 540, 540, 540, 540, 540, 540, 1745, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1758, 540, 540, 540, 540, 540, 540, 2540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1329, 540, 540, 540, 540, 540, 540, 540, 540, 1795, 540, 540, 1798, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 900, 540, 540, 540, 540, 540, 540, 1810, 540, 540, 540, 540, 540, 1815, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1416, 561, 1825, 561, 561, 561, 561, 1831, 561, 561, 561, 561, 561, 1837, 561, 561, 561, 561, 561, 983, 561, 0, 585, 585, 585, 585, 585, 1002, 585, 1010, 561, 1892, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1904, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 2726, 0, 0, 2729, 2730, 561, 561, 1909, 561, 561, 561, 561, 561, 561, 561, 26027, 1919, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 3649, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 3231, 3232, 561, 1925, 585, 585, 585, 585, 585, 1931, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3596, 1944, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1540, 561, 561, 2025, 585, 585, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 2041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1132, 0, 0, 0, 2075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1135, 0, 2145, 0, 0, 0, 2143, 0, 0, 2150, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 1584, 0, 0, 0, 0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 1705, 0, 0, 540, 540, 2171, 540, 540, 2174, 540, 540, 540, 540, 540, 540, 2182, 540, 540, 540, 540, 540, 540, 2568, 540, 540, 540, 540, 2572, 540, 540, 540, 540, 540, 540, 1347, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2556, 540, 540, 540, 540, 540, 540, 540, 2201, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 2242, 540, 540, 540, 2214, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1805, 540, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2254, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2123, 0, 2125, 2126, 0, 0, 0, 0, 561, 2257, 561, 561, 561, 561, 561, 561, 2265, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 2952, 561, 2954, 561, 2299, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1438, 561, 2033, 0, 2035, 0, 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434, 0, 0, 0, 2475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1193, 0, 0, 0, 0, 2484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2493, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 2592, 561, 561, 561, 561, 561, 1408, 561, 561, 1412, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1008, 585, 2656, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2664, 585, 585, 585, 585, 585, 585, 2350, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2379, 585, 585, 585, 585, 585, 585, 585, 585, 2699, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1940, 585, 585, 2708, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 561, 561, 561, 3229, 561, 561, 561, 561, 561, 561, 585, 585, 585, 3352, 585, 585, 585, 3355, 585, 585, 2731, 0, 0, 0, 0, 0, 0, 2736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 0, 0, 2759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 540, 540, 540, 0, 0, 0, 2788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 0, 0, 0, 540, 540, 540, 2826, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2833, 540, 540, 540, 540, 1748, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1760, 540, 540, 540, 540, 1765, 540, 540, 540, 540, 540, 540, 540, 540, 1772, 540, 540, 540, 540, 561, 3406, 561, 561, 3408, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1009, 585, 561, 561, 561, 2860, 561, 561, 2864, 561, 561, 561, 561, 561, 561, 561, 561, 561, 944, 561, 561, 561, 561, 561, 561, 561, 2873, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2881, 561, 561, 0, 0, 0, 2649, 0, 1920, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2703, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2908, 585, 585, 2912, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2393, 2394, 585, 585, 585, 585, 585, 2921, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2929, 585, 585, 0, 0, 0, 3292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3297, 2955, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 305, 0, 0, 0, 2970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1588, 1589, 0, 0, 540, 540, 540, 540, 3036, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2546, 540, 540, 540, 561, 561, 561, 3076, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1436, 561, 561, 561, 585, 585, 585, 3117, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2356, 585, 2358, 0, 0, 0, 0, 3176, 3442, 0, 3444, 0, 0, 0, 0, 0, 540, 3451, 540, 540, 540, 540, 1796, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 905, 540, 540, 540, 540, 3453, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 3466, 561, 3468, 0, 0, 3501, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 3510, 540, 540, 540, 540, 540, 3204, 3205, 540, 540, 540, 540, 3209, 3210, 540, 540, 540, 540, 540, 1749, 1750, 540, 540, 540, 540, 1757, 540, 540, 540, 540, 540, 540, 1346, 540, 540, 540, 540, 540, 540, 1356, 540, 540, 307, 308, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, 2504, 0, 0, 0, 0, 0, 0, 0, 0, 2517, 0, 0, 0, 0, 0, 0, 0, 0, 2975, 0, 0, 0, 0, 0, 0, 0, 0, 2999, 0, 0, 0, 0, 0, 0, 0, 0, 3164, 0, 0, 0, 0, 0, 0, 0, 0, 3173, 0, 0, 0, 0, 0, 0, 0, 0, 3183, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 449, 418, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 532, 449, 532, 532, 532, 449, 532, 532, 532, 532, 449, 542, 564, 542, 564, 542, 542, 564, 542, 588, 564, 564, 564, 564, 564, 564, 564, 588, 588, 588, 542, 588, 588, 588, 588, 588, 564, 564, 616, 621, 588, 621, 627, 1, 12290, 3, 78112, 0, 1677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 540, 540, 540, 1811, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1377, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 1082, 1086, 0, 0, 1090, 585, 585, 585, 1993, 585, 585, 585, 585, 585, 1999, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 3551, 0, 3553, 0, 0, 0, 0, 0, 561, 561, 561, 561, 561, 2589, 561, 561, 561, 561, 2593, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2338, 585, 585, 585, 585, 585, 585, 585, 2657, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1971, 585, 585, 585, 2709, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 561, 561, 3228, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 2900, 585, 585, 585, 585, 585, 540, 3514, 540, 3516, 540, 540, 3518, 540, 561, 561, 561, 561, 561, 561, 561, 561, 1396, 1398, 561, 561, 561, 561, 561, 561, 3527, 561, 3529, 561, 561, 3531, 561, 585, 585, 585, 585, 585, 585, 585, 585, 3540, 585, 3542, 585, 585, 3544, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 147456, 0, 0, 0, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 365, 0, 382, 0, 348, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 420, 428, 419, 428, 0, 310, 428, 441, 450, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 484, 489, 489, 500, 489, 489, 489, 489, 489, 489, 489, 489, 515, 515, 528, 528, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 515, 529, 529, 529, 529, 529, 543, 565, 543, 565, 543, 543, 565, 543, 589, 565, 565, 565, 565, 565, 565, 565, 589, 589, 589, 612, 589, 589, 589, 589, 589, 614, 615, 615, 612, 615, 614, 615, 614, 1, 12290, 3, 78112, 0, 702, 0, 0, 0, 0, 0, 702, 0, 0, 0, 540, 540, 540, 540, 540, 3028, 540, 540, 540, 540, 540, 540, 540, 561, 967, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 2337, 585, 585, 585, 585, 2341, 585, 0, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3200, 0, 1150, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1102, 0, 0, 0, 1228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 0, 0, 540, 540, 1276, 1278, 540, 540, 540, 540, 540, 540, 540, 540, 1292, 540, 1297, 540, 540, 1301, 540, 540, 540, 540, 1812, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1823, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1378, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 1083, 1087, 0, 0, 1091, 540, 1304, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1302, 540, 1360, 914, 561, 561, 1364, 561, 1367, 561, 561, 561, 561, 561, 561, 561, 561, 1381, 561, 1386, 561, 561, 1390, 561, 561, 1393, 561, 561, 561, 561, 561, 561, 561, 561, 1431, 561, 561, 1435, 561, 561, 561, 561, 1484, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1942, 540, 1793, 1794, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 585, 585, 1946, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2005, 585, 585, 585, 1959, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2357, 585, 2102, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 379, 381, 0, 0, 0, 0, 0, 2133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1119, 0, 0, 2033, 0, 2035, 0, 0, 0, 0, 0, 0, 2428, 0, 0, 0, 0, 0, 0, 0, 2122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 0, 0, 2474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1133, 0, 0, 0, 0, 0, 0, 2760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 384, 0, 0, 2799, 0, 0, 0, 0, 0, 0, 0, 2803, 540, 540, 540, 540, 540, 540, 540, 1326, 540, 540, 540, 540, 540, 540, 540, 1339, 585, 2956, 0, 0, 0, 0, 0, 2962, 0, 0, 0, 0, 0, 0, 0, 2966, 0, 0, 0, 3008, 0, 0, 0, 0, 0, 0, 0, 0, 3017, 0, 0, 0, 0, 0, 383, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 3048, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1320, 3089, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1858, 3130, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1957, 540, 3225, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3414, 585, 585, 585, 3281, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 3157, 3513, 540, 540, 540, 540, 540, 540, 540, 561, 3521, 561, 3522, 561, 561, 561, 3526, 540, 540, 540, 3664, 561, 561, 561, 3666, 585, 585, 585, 3668, 0, 0, 540, 540, 540, 3560, 540, 540, 540, 540, 540, 540, 540, 540, 3568, 561, 321, 321, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 371, 0, 430, 436, 0, 442, 451, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 490, 490, 501, 490, 490, 490, 490, 490, 490, 490, 490, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 544, 566, 544, 566, 544, 544, 566, 544, 590, 566, 566, 566, 566, 566, 566, 566, 590, 590, 590, 544, 590, 590, 590, 590, 590, 566, 566, 544, 566, 590, 566, 590, 1, 12290, 3, 78112, 540, 540, 540, 874, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1822, 540, 1360, 585, 1017, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 1122, 0, 1124, 1125, 0, 0, 0, 1127, 1128, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 1159168, 0, 0, 0, 0, 1159168, 0, 0, 1166, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1634, 0, 0, 0, 1113, 0, 1253, 0, 0, 0, 0, 0, 1128, 0, 0, 0, 0, 0, 1236, 0, 0, 0, 0, 773, 774, 0, 0, 778, 779, 0, 675, 0, 0, 0, 0, 0, 0, 1598, 0, 0, 0, 0, 0, 0, 0, 0, 1605, 0, 0, 1268, 1127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 1277, 540, 540, 540, 1323, 540, 540, 1325, 540, 540, 1328, 540, 540, 540, 540, 540, 540, 540, 540, 2554, 540, 540, 540, 540, 540, 540, 2560, 1360, 914, 561, 561, 1365, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1400, 561, 561, 561, 561, 561, 561, 1404, 561, 561, 561, 561, 561, 561, 561, 1413, 561, 561, 1415, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 2655, 561, 1419, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1874, 561, 561, 561, 1443, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 1456, 585, 585, 0, 0, 3291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 1266, 585, 585, 585, 1504, 585, 585, 1506, 585, 585, 585, 1510, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 2020, 561, 561, 0, 0, 0, 1657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1675, 0, 0, 0, 585, 1991, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2695, 561, 2024, 585, 585, 585, 2028, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1586, 1587, 0, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 2035, 0, 0, 0, 0, 0, 2038, 0, 0, 2077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 0, 0, 0, 0, 0, 0, 2091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2807, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 2252, 561, 561, 561, 561, 561, 1447, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2017, 540, 540, 540, 2021, 561, 2256, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1875, 2272, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1890, 561, 561, 561, 2314, 561, 2316, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2340, 585, 585, 585, 2399, 585, 2401, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 540, 540, 2564, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3212, 540, 0, 0, 0, 561, 561, 561, 561, 2588, 561, 561, 561, 561, 561, 561, 561, 561, 1916, 561, 26027, 0, 585, 585, 585, 585, 0, 2757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 2834, 540, 540, 540, 540, 540, 540, 540, 2840, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2571, 540, 540, 540, 540, 540, 540, 2882, 561, 561, 561, 561, 561, 561, 561, 2888, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 2902, 585, 585, 585, 2930, 585, 585, 585, 585, 585, 585, 585, 2936, 585, 585, 585, 585, 585, 585, 585, 561, 540, 2714, 585, 561, 540, 540, 540, 540, 540, 540, 3226, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3074, 585, 585, 585, 585, 3282, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 3156, 0, 585, 585, 3369, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 2617344, 0, 0, 0, 0, 0, 2789376, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 3445, 0, 0, 0, 0, 540, 540, 540, 540, 3027, 540, 540, 540, 540, 3031, 540, 540, 540, 540, 540, 540, 3456, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3524, 561, 561, 561, 561, 3471, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3486, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3626, 540, 540, 540, 3515, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3413, 561, 561, 3528, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3113, 585, 585, 585, 3541, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 208896, 0, 0, 0, 0, 323, 324, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 1196, 0, 0, 0, 0, 322, 370, 325, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 322, 0, 0, 369, 369, 399, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 322, 452, 465, 465, 465, 465, 465, 465, 465, 478, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 491, 491, 465, 491, 491, 506, 508, 491, 491, 506, 491, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 534, 517, 517, 517, 517, 517, 545, 567, 545, 567, 545, 545, 567, 545, 591, 567, 567, 567, 567, 567, 567, 567, 591, 591, 591, 545, 591, 591, 591, 591, 591, 567, 567, 545, 567, 591, 567, 591, 1, 12290, 3, 78112, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 671, 0, 0, 0, 0, 0, 439, 0, 0, 0, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 557, 580, 557, 580, 557, 557, 580, 557, 604, 0, 0, 707, 708, 0, 0, 0, 0, 0, 714, 0, 0, 0, 718, 0, 720, 0, 769, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1209, 0, 0, 787, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1224, 0, 0, 0, 801, 0, 806, 0, 809, 0, 0, 0, 0, 806, 809, 0, 0, 0, 809, 0, 707, 0, 0, 826, 0, 0, 0, 0, 0, 826, 826, 829, 809, 806, 0, 0, 0, 0, 0, 0, 0, 789, 0, 801, 0, 818, 0, 0, 0, 0, 0, 2745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 811, 540, 540, 854, 540, 540, 0, 0, 0, 789, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 2142, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2819, 540, 540, 540, 540, 540, 0, 0, 0, 787, 0, 0, 0, 838, 818, 838, 0, 540, 540, 852, 540, 858, 540, 540, 871, 540, 881, 540, 886, 540, 540, 893, 896, 901, 540, 909, 540, 540, 540, 540, 540, 3215, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 895, 540, 540, 540, 540, 540, 561, 561, 561, 922, 561, 928, 561, 561, 941, 561, 561, 952, 561, 957, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 2653, 585, 585, 0, 0, 2959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2965, 0, 965, 968, 973, 561, 981, 561, 561, 0, 585, 585, 585, 995, 585, 1001, 585, 585, 0, 2958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 131072, 0, 0, 1014, 585, 585, 1025, 585, 1030, 585, 585, 1038, 1041, 1046, 585, 1054, 585, 585, 968, 0, 0, 0, 540, 585, 585, 561, 852, 540, 1066, 901, 540, 922, 561, 1071, 973, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 0, 0, 0, 0, 0, 1137, 1138, 0, 0, 0, 0, 1142, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 1182, 741, 0, 0, 0, 1134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 1303, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1318, 540, 540, 540, 540, 2173, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2558, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1372, 561, 561, 561, 561, 561, 1850, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1902, 1903, 561, 561, 561, 561, 561, 561, 1387, 561, 561, 561, 1392, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1432, 561, 561, 561, 561, 561, 1439, 561, 561, 561, 1421, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1437, 561, 0, 585, 585, 585, 1049, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 811, 0, 585, 585, 585, 585, 1463, 585, 585, 585, 585, 585, 585, 1478, 585, 585, 585, 1483, 0, 0, 1608, 1609, 1610, 0, 1612, 1613, 0, 0, 0, 0, 1618, 0, 0, 0, 0, 0, 679, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2144, 0, 0, 1640, 0, 0, 1643, 0, 1645, 0, 0, 0, 0, 0, 1651, 1652, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 540, 846, 540, 540, 540, 540, 540, 540, 3216, 540, 540, 540, 540, 540, 3221, 540, 3223, 540, 0, 1668, 0, 0, 1670, 0, 0, 0, 0, 1672, 1673, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 347, 345, 65536, 0, 1692, 0, 0, 0, 0, 0, 1698, 1699, 0, 1701, 1702, 1703, 0, 0, 0, 0, 0, 0, 810, 811, 0, 0, 0, 0, 811, 0, 0, 0, 1719, 0, 0, 0, 1723, 1724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 1715, 0, 0, 0, 1735, 1585, 1585, 1737, 540, 1739, 540, 1740, 540, 1742, 540, 540, 540, 1746, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1759, 540, 540, 540, 540, 540, 3318, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2557, 540, 540, 540, 540, 540, 540, 1763, 540, 540, 540, 540, 1767, 540, 1769, 540, 540, 540, 540, 540, 540, 540, 540, 2570, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3041, 540, 540, 540, 540, 540, 540, 540, 540, 1777, 1778, 1780, 540, 540, 540, 540, 540, 540, 1787, 1788, 540, 540, 1791, 1792, 540, 540, 540, 540, 540, 540, 540, 1800, 540, 540, 540, 1804, 540, 540, 540, 540, 540, 540, 2829, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1770, 540, 540, 540, 540, 540, 0, 1828, 561, 1830, 561, 561, 1832, 561, 1834, 561, 561, 561, 1838, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 2725, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 135168, 135168, 0, 0, 65536, 135168, 1859, 561, 1861, 561, 561, 561, 561, 561, 561, 561, 561, 1869, 1870, 1872, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 2652, 585, 585, 585, 585, 585, 585, 2390, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3124, 585, 585, 585, 585, 585, 561, 561, 561, 1894, 561, 561, 561, 1898, 561, 561, 561, 561, 561, 561, 561, 1906, 585, 1926, 585, 1928, 585, 585, 585, 1932, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 585, 1945, 585, 585, 585, 585, 1949, 585, 585, 585, 585, 1953, 585, 1955, 585, 585, 561, 3146, 3147, 3148, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 2488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2096, 0, 0, 0, 0, 0, 0, 1974, 1975, 1976, 585, 585, 1979, 1980, 585, 585, 585, 585, 585, 585, 585, 1988, 585, 561, 0, 1288, 585, 1468, 1377, 540, 540, 540, 1549, 540, 561, 561, 561, 1553, 585, 585, 1992, 585, 585, 585, 585, 585, 585, 585, 2000, 585, 585, 585, 585, 585, 561, 561, 540, 561, 585, 561, 585, 1, 12290, 3, 78112, 585, 585, 585, 585, 2011, 561, 540, 2014, 585, 561, 1792, 540, 2019, 540, 1886, 561, 0, 585, 585, 1040, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 1134592, 0, 0, 0, 0, 2023, 561, 1980, 585, 2027, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 2089, 0, 0, 0, 0, 2093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2119, 0, 2121, 0, 0, 0, 0, 0, 0, 0, 2129, 0, 0, 0, 0, 786, 0, 805, 0, 0, 0, 0, 540, 849, 540, 540, 540, 540, 540, 2216, 540, 540, 540, 540, 540, 540, 2221, 540, 540, 540, 540, 540, 540, 3633, 561, 561, 561, 561, 561, 561, 3639, 585, 585, 0, 0, 0, 2134, 0, 0, 0, 0, 2139, 0, 0, 0, 0, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2502656, 2179072, 2179072, 2179072, 2179072, 540, 2187, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1337, 540, 2211, 2212, 540, 540, 540, 540, 540, 540, 2219, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2582, 540, 540, 540, 0, 0, 0, 561, 561, 2258, 561, 2260, 561, 561, 561, 561, 561, 561, 2268, 561, 2270, 561, 561, 561, 561, 1426, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3343, 561, 561, 561, 561, 3344, 3345, 561, 561, 2343, 585, 2345, 585, 585, 585, 585, 585, 585, 2353, 585, 2355, 585, 585, 585, 585, 561, 0, 0, 0, 3648, 0, 540, 540, 540, 540, 3652, 540, 585, 585, 585, 585, 2389, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2705, 585, 585, 585, 585, 585, 585, 585, 2402, 585, 585, 2405, 2406, 585, 585, 561, 2177, 585, 2345, 2260, 540, 2414, 540, 540, 561, 2418, 561, 561, 585, 2422, 585, 585, 2029, 0, 2031, 0, 0, 0, 0, 795, 663, 844, 0, 0, 0, 0, 540, 848, 540, 540, 540, 540, 540, 1283, 540, 540, 540, 540, 540, 540, 1298, 540, 540, 540, 540, 540, 540, 2580, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 0, 0, 2450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0, 0, 0, 2459, 0, 0, 0, 0, 0, 2464, 0, 2466, 2467, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 371, 0, 65536, 0, 0, 2498, 0, 0, 0, 0, 0, 0, 0, 2505, 0, 0, 0, 0, 0, 0, 0, 2479, 0, 0, 0, 2481, 0, 0, 0, 0, 2561, 540, 540, 540, 2566, 540, 540, 540, 540, 540, 540, 540, 2573, 540, 540, 540, 540, 540, 540, 2838, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1296, 540, 540, 540, 540, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 2591, 561, 561, 561, 561, 561, 561, 2640, 561, 561, 561, 2643, 561, 561, 561, 561, 561, 561, 2886, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1867, 561, 561, 561, 561, 561, 561, 2621, 561, 561, 561, 561, 2625, 561, 561, 561, 2630, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 3661, 0, 0, 561, 2637, 561, 561, 561, 561, 561, 561, 561, 2642, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3427, 585, 2669, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3267, 2797, 2798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1741, 540, 0, 0, 2982, 2983, 0, 2984, 0, 2986, 0, 0, 0, 0, 2988, 0, 0, 0, 0, 0, 680, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2047, 0, 0, 0, 0, 0, 0, 0, 0, 3007, 0, 0, 2988, 0, 0, 3013, 3014, 0, 3016, 0, 0, 3019, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 3022, 540, 540, 540, 540, 540, 540, 3029, 540, 540, 540, 540, 540, 3033, 3062, 540, 561, 561, 561, 561, 561, 561, 3069, 561, 561, 561, 561, 561, 3073, 561, 0, 585, 585, 1042, 585, 585, 288, 1079, 0, 0, 1082, 1086, 0, 0, 1090, 3103, 561, 585, 585, 585, 585, 585, 585, 3110, 585, 585, 585, 585, 585, 3114, 585, 561, 0, 1543, 585, 1545, 1546, 540, 540, 1548, 540, 540, 561, 561, 1552, 561, 0, 585, 585, 1044, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 798, 3144, 585, 561, 540, 585, 561, 540, 3150, 561, 3152, 585, 3154, 0, 0, 0, 0, 0, 0, 825, 0, 819, 0, 664, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 221184, 0, 0, 0, 0, 65536, 0, 0, 0, 3160, 0, 0, 3163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 2806, 540, 540, 540, 3202, 540, 540, 540, 540, 540, 540, 540, 3207, 540, 540, 540, 540, 540, 540, 540, 540, 3040, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3322, 540, 540, 540, 540, 540, 540, 561, 3234, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1889, 561, 3245, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 3257, 585, 585, 585, 585, 585, 585, 585, 3262, 585, 585, 585, 585, 585, 561, 2013, 585, 2015, 2016, 540, 2018, 540, 540, 561, 2022, 561, 561, 561, 3349, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2667, 0, 3378, 3379, 0, 3176, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 384, 0, 0, 0, 3441, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 2167, 540, 540, 0, 0, 0, 0, 3503, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3512, 0, 0, 3557, 3558, 3559, 540, 540, 540, 3562, 540, 3564, 540, 540, 540, 540, 3569, 3570, 3571, 561, 561, 561, 3574, 561, 3576, 561, 561, 561, 561, 3581, 3582, 3583, 585, 561, 1203, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 585, 3586, 585, 3588, 585, 585, 585, 585, 3593, 0, 0, 0, 0, 0, 0, 0, 2747, 2748, 2749, 0, 0, 0, 0, 0, 0, 0, 2763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 1, 12290, 0, 0, 540, 3628, 540, 540, 540, 3632, 561, 561, 3634, 561, 561, 561, 3638, 585, 585, 3640, 585, 585, 585, 3644, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3563, 540, 3565, 540, 540, 540, 561, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 366, 0, 0, 0, 374, 376, 0, 0, 0, 0, 0, 0, 0, 344, 0, 402, 0, 0, 0, 0, 0, 402, 0, 0, 409, 0, 0, 0, 409, 69632, 73728, 0, 366, 366, 0, 421, 65536, 366, 0, 0, 366, 421, 498, 502, 498, 498, 507, 498, 498, 498, 507, 498, 421, 421, 327, 421, 0, 0, 421, 0, 421, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 546, 568, 546, 568, 546, 546, 568, 546, 592, 568, 568, 568, 568, 568, 568, 568, 592, 592, 592, 546, 592, 592, 592, 592, 592, 568, 568, 546, 568, 592, 568, 592, 1, 12290, 3, 78112, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1248, 0, 0, 540, 540, 540, 875, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2183, 540, 540, 561, 561, 915, 561, 561, 561, 561, 561, 561, 945, 561, 561, 561, 561, 561, 561, 585, 3421, 585, 585, 3423, 585, 585, 585, 585, 585, 585, 1018, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 540, 988, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3068, 561, 561, 561, 561, 561, 561, 561, 561, 932, 561, 561, 946, 561, 561, 561, 561, 561, 561, 934, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3240, 561, 561, 561, 561, 561, 561, 0, 0, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 1229, 0, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 540, 540, 540, 1281, 540, 540, 540, 540, 540, 1293, 540, 540, 540, 540, 540, 540, 540, 540, 3054, 3056, 540, 540, 540, 3059, 540, 3061, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 1370, 561, 561, 561, 561, 561, 1382, 585, 585, 1461, 585, 585, 585, 585, 585, 1473, 585, 585, 585, 585, 585, 585, 585, 585, 2914, 585, 585, 585, 585, 585, 585, 585, 585, 3122, 585, 585, 585, 585, 585, 585, 585, 585, 3136, 3138, 585, 585, 585, 3141, 585, 3143, 0, 1720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134, 0, 1990, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1972, 585, 585, 585, 2373, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2370, 585, 585, 585, 585, 2698, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2383, 585, 0, 0, 0, 3161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1688, 0, 0, 0, 561, 561, 3235, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 2325, 0, 3663, 540, 540, 540, 3665, 561, 561, 561, 3667, 585, 585, 585, 0, 0, 540, 540, 540, 2526, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3058, 540, 540, 540, 422, 422, 0, 422, 431, 0, 422, 0, 422, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 492, 492, 466, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 547, 569, 547, 569, 547, 547, 569, 547, 593, 569, 569, 569, 569, 569, 569, 569, 593, 593, 593, 547, 593, 593, 593, 593, 593, 569, 569, 547, 569, 593, 569, 593, 1, 12290, 3, 78112, 0, 0, 0, 0, 2159, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3032, 540, 540, 540, 540, 540, 2202, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2208, 540, 540, 2413, 540, 540, 540, 2417, 561, 561, 561, 2421, 585, 585, 585, 0, 0, 0, 0, 3293, 0, 0, 0, 0, 0, 3296, 0, 0, 0, 2458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1250, 2967, 0, 0, 0, 2971, 0, 0, 0, 0, 0, 2977, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 418, 0, 65536, 0, 0, 2992, 0, 0, 2995, 0, 0, 0, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 367, 367, 0, 0, 65536, 367, 0, 0, 0, 3023, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2222, 540, 540, 540, 540, 3049, 540, 540, 540, 540, 540, 540, 540, 540, 3057, 540, 540, 3060, 540, 540, 540, 540, 2189, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2583, 0, 0, 0, 540, 540, 3063, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 2326, 0, 561, 561, 3090, 561, 561, 561, 561, 561, 561, 561, 561, 3098, 561, 561, 3101, 561, 0, 585, 585, 1045, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 1102, 1101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 1275, 540, 561, 561, 3104, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2666, 585, 585, 585, 3131, 585, 585, 585, 585, 585, 585, 585, 585, 3139, 585, 585, 3142, 585, 585, 585, 585, 585, 1930, 585, 585, 585, 585, 585, 585, 585, 585, 1941, 585, 585, 585, 585, 585, 1948, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3263, 585, 585, 585, 585, 0, 0, 0, 0, 3179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 3192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 2808, 3201, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1359, 540, 3213, 540, 540, 540, 540, 540, 540, 540, 3218, 540, 3220, 540, 540, 540, 540, 540, 540, 561, 3227, 561, 561, 561, 3230, 561, 561, 561, 561, 561, 982, 561, 0, 585, 585, 585, 585, 999, 585, 585, 585, 561, 561, 3246, 561, 3248, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 3537, 585, 585, 585, 585, 3256, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3278, 585, 585, 3268, 585, 585, 585, 585, 585, 585, 585, 585, 3274, 585, 3276, 585, 585, 561, 3370, 540, 3371, 561, 3372, 585, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 540, 540, 3328, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3233, 561, 561, 561, 561, 3340, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3346, 561, 0, 994, 1075, 1039, 585, 585, 78112, 1079, 0, 0, 1081, 1085, 0, 0, 1089, 3358, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3364, 585, 585, 585, 585, 585, 585, 585, 1981, 1982, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2951, 540, 2953, 561, 561, 561, 3654, 3655, 561, 561, 585, 585, 3658, 3659, 585, 585, 0, 0, 0, 0, 0, 0, 1126, 0, 0, 0, 1130, 1131, 0, 0, 0, 0, 0, 0, 1141, 0, 1143, 0, 0, 362, 362, 0, 0, 0, 691, 0, 0, 0, 0, 696, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1154, 0, 0, 0, 0, 0, 1160, 0, 1162, 0, 758, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 758, 758, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 585, 999, 926, 540, 540, 540, 540, 910, 561, 561, 561, 561, 561, 1880, 1881, 1882, 561, 561, 1885, 1886, 561, 561, 561, 561, 561, 1896, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2603, 561, 2605, 561, 561, 561, 982, 0, 585, 585, 585, 585, 1055, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 375, 0, 378, 0, 0, 0, 378, 0, 0, 0, 0, 1709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1619, 0, 0, 585, 585, 585, 2010, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 3066, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2600, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 987, 585, 585, 585, 585, 585, 0, 2039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1178, 0, 540, 540, 540, 2172, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2238, 2584, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2255, 0, 0, 0, 0, 2461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 3288, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1184, 1184, 561, 561, 561, 561, 3350, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2939, 585, 585, 585, 585, 3368, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 394, 0, 0, 467, 467, 485, 493, 493, 485, 493, 493, 493, 493, 493, 493, 493, 493, 518, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 535, 526, 526, 526, 526, 526, 548, 570, 548, 570, 548, 548, 570, 548, 594, 570, 570, 570, 570, 570, 570, 570, 594, 594, 594, 548, 594, 594, 594, 594, 594, 570, 570, 548, 570, 594, 570, 594, 1, 12290, 3, 78112, 767, 0, 0, 771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1704, 0, 0, 0, 821, 0, 0, 0, 798, 0, 0, 821, 0, 0, 0, 0, 0, 821, 821, 0, 0, 0, 0, 805, 0, 0, 786, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 839, 794, 0, 0, 839, 0, 0, 0, 0, 808, 0, 0, 692, 0, 0, 672, 0, 692, 0, 813, 675, 676, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 540, 867, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 911, 540, 540, 540, 540, 2215, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1756, 540, 540, 540, 540, 983, 0, 585, 585, 585, 1077, 1056, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 412, 412, 0, 0, 0, 0, 0, 412, 0, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1621, 0, 0, 1241, 0, 0, 0, 0, 0, 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, 0, 540, 1305, 540, 540, 540, 540, 540, 540, 540, 1313, 540, 540, 540, 540, 540, 540, 540, 540, 3332, 540, 561, 561, 561, 561, 561, 561, 935, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3094, 561, 3096, 561, 561, 561, 561, 561, 561, 1340, 540, 540, 1344, 540, 540, 540, 540, 540, 1350, 540, 540, 540, 1357, 540, 540, 540, 540, 540, 3458, 540, 3460, 3461, 540, 3463, 540, 561, 561, 561, 561, 561, 2262, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1399, 561, 561, 561, 561, 561, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1375, 561, 561, 561, 561, 1848, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2868, 561, 561, 561, 561, 561, 1441, 561, 561, 561, 1448, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 1998, 585, 585, 585, 585, 585, 2003, 585, 585, 1485, 585, 585, 585, 585, 585, 585, 585, 1493, 585, 585, 585, 585, 585, 585, 585, 585, 3261, 585, 585, 585, 585, 585, 585, 585, 585, 3272, 585, 585, 585, 585, 585, 585, 585, 585, 3283, 540, 585, 561, 540, 540, 561, 561, 585, 1522, 585, 585, 1526, 585, 585, 585, 585, 585, 1532, 585, 585, 585, 1539, 585, 585, 585, 585, 585, 1996, 1997, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1531, 585, 585, 585, 585, 585, 585, 0, 0, 0, 1595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1716, 0, 0, 0, 0, 0, 1656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1665, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1653, 0, 0, 0, 1722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1729, 0, 0, 0, 0, 0, 0, 1706, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3398, 540, 3400, 540, 561, 561, 1893, 561, 561, 561, 561, 561, 561, 1901, 561, 561, 561, 561, 561, 561, 1410, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1428, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1917, 26027, 0, 1922, 585, 1924, 585, 561, 561, 561, 1910, 1912, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 585, 2335, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 3622, 0, 3624, 0, 0, 540, 585, 585, 585, 585, 1978, 585, 585, 585, 585, 585, 585, 585, 585, 1987, 585, 585, 585, 585, 585, 585, 2934, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2407, 561, 540, 585, 585, 561, 585, 585, 585, 585, 1995, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2004, 2006, 0, 0, 0, 2078, 0, 0, 0, 2081, 0, 0, 0, 0, 0, 2087, 0, 0, 0, 0, 0, 2774, 0, 0, 0, 2778, 0, 2780, 0, 0, 0, 0, 0, 0, 2746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 2103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1265, 0, 0, 0, 0, 561, 561, 561, 561, 561, 2249, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1519, 585, 585, 2346, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2919, 585, 2448, 0, 0, 0, 0, 0, 0, 0, 0, 2453, 0, 0, 2456, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 2460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2471, 0, 0, 0, 2485, 2486, 0, 0, 2489, 0, 0, 2492, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 417, 417, 0, 0, 65536, 417, 0, 0, 2499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2510, 0, 0, 0, 0, 815, 0, 812, 795, 0, 0, 817, 0, 667, 0, 791, 0, 0, 0, 0, 1096, 0, 0, 1098, 0, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 540, 2524, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1789, 540, 540, 540, 540, 540, 2551, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2559, 540, 540, 2562, 540, 540, 540, 540, 540, 540, 2569, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3323, 540, 540, 540, 540, 540, 540, 2576, 540, 540, 540, 2579, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 561, 2586, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3254, 561, 561, 561, 585, 585, 585, 585, 585, 2672, 585, 585, 585, 585, 585, 585, 2677, 585, 585, 585, 585, 561, 0, 3646, 0, 0, 0, 540, 540, 540, 540, 540, 540, 2529, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2842, 540, 540, 540, 540, 540, 585, 585, 585, 2683, 585, 585, 585, 585, 585, 585, 2690, 585, 585, 585, 585, 585, 585, 585, 2351, 585, 585, 585, 585, 585, 585, 585, 585, 1508, 585, 585, 585, 585, 585, 585, 585, 585, 2697, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2704, 585, 585, 585, 2707, 0, 0, 0, 0, 2735, 0, 0, 0, 0, 0, 0, 0, 2739, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 2528, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2234, 540, 540, 540, 540, 0, 540, 540, 540, 2811, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2821, 540, 540, 540, 540, 540, 2836, 540, 540, 540, 2839, 540, 2841, 540, 540, 540, 540, 540, 540, 540, 540, 3520, 561, 561, 561, 561, 561, 561, 561, 1450, 26027, 1360, 987, 585, 585, 585, 585, 585, 2845, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 2853, 561, 561, 561, 561, 561, 1913, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 2333, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1050, 585, 585, 585, 585, 561, 561, 2858, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2284, 561, 561, 561, 2874, 2875, 561, 561, 561, 561, 2878, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1005, 585, 561, 561, 561, 2884, 561, 561, 561, 2887, 561, 2889, 561, 561, 561, 561, 561, 561, 1449, 561, 26027, 1360, 987, 1453, 585, 585, 585, 585, 2893, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 2901, 585, 585, 585, 585, 585, 585, 585, 3121, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 3285, 561, 3287, 585, 2906, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3367, 585, 585, 2922, 2923, 585, 585, 585, 585, 2926, 585, 585, 585, 585, 585, 585, 585, 585, 3592, 561, 0, 0, 0, 0, 3595, 0, 585, 585, 585, 2932, 585, 585, 585, 2935, 585, 2937, 585, 585, 585, 585, 585, 585, 585, 1933, 585, 585, 585, 585, 1939, 585, 585, 585, 2941, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 2963, 0, 0, 0, 0, 0, 585, 585, 2957, 0, 0, 2960, 2961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 3009, 0, 0, 3012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200253, 151552, 2200253, 0, 0, 0, 151552, 540, 540, 540, 540, 3037, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3325, 540, 540, 540, 540, 540, 540, 540, 3051, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3465, 561, 561, 561, 561, 561, 561, 3077, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1887, 1888, 561, 561, 561, 561, 561, 561, 3092, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3480, 585, 585, 585, 585, 561, 561, 585, 585, 585, 585, 3108, 585, 585, 585, 585, 3112, 585, 585, 585, 585, 585, 585, 585, 3135, 585, 3137, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3552, 0, 0, 0, 585, 585, 585, 3118, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1512, 585, 585, 585, 585, 585, 585, 585, 3133, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2917, 585, 585, 2920, 0, 0, 3168, 3169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2071, 0, 0, 0, 540, 540, 540, 540, 3329, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3412, 561, 561, 3336, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2285, 3347, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3354, 585, 585, 585, 585, 585, 585, 2404, 585, 585, 585, 585, 561, 2178, 585, 2346, 2261, 3389, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2534, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 3447, 3448, 0, 540, 540, 540, 540, 2527, 540, 540, 540, 540, 2531, 540, 540, 540, 540, 540, 540, 540, 1312, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1784, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3473, 561, 3475, 3476, 561, 3478, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254413, 0, 0, 0, 0, 0, 585, 585, 585, 3488, 585, 3490, 3491, 585, 3493, 585, 3495, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 313, 314, 314, 419, 420, 65536, 427, 585, 585, 3617, 585, 3618, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 904, 540, 561, 561, 561, 976, 561, 561, 585, 585, 3673, 3674, 3675, 3676, 0, 540, 561, 585, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 1563, 0, 0, 0, 1569, 0, 0, 0, 0, 0, 2789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, 0, 0, 0, 571, 571, 571, 571, 571, 571, 571, 595, 595, 595, 540, 595, 595, 595, 595, 595, 571, 571, 540, 571, 595, 571, 595, 1, 12290, 3, 78112, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1707, 0, 0, 2040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, 2170, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2253, 561, 561, 561, 561, 926, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2307, 561, 561, 561, 2310, 400, 0, 0, 0, 0, 378, 0, 69632, 73728, 0, 0, 0, 0, 423, 65536, 0, 0, 0, 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1687, 0, 1689, 0, 0, 423, 423, 0, 423, 0, 437, 423, 0, 423, 468, 468, 468, 475, 468, 468, 468, 468, 468, 468, 468, 468, 475, 468, 468, 468, 468, 468, 468, 468, 468, 482, 468, 494, 494, 468, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 537, 549, 572, 549, 572, 549, 549, 572, 549, 596, 572, 572, 572, 572, 572, 572, 572, 596, 596, 596, 549, 596, 596, 596, 596, 596, 572, 572, 549, 572, 596, 572, 596, 1, 12290, 3, 78112, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, 0, 830, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 742, 661, 0, 0, 0, 0, 0, 540, 847, 540, 540, 540, 540, 540, 540, 3330, 540, 540, 540, 561, 561, 561, 561, 561, 3335, 861, 540, 540, 540, 540, 540, 540, 540, 540, 540, 897, 540, 540, 540, 540, 540, 540, 540, 1799, 540, 540, 540, 540, 540, 540, 1807, 540, 561, 561, 916, 561, 561, 561, 931, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2266, 561, 561, 561, 561, 561, 561, 0, 0, 0, 540, 989, 585, 561, 540, 540, 897, 540, 540, 561, 561, 969, 561, 561, 561, 561, 561, 0, 585, 585, 989, 585, 585, 585, 1004, 585, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1101, 1102, 0, 0, 0, 0, 0, 0, 1203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 0, 0, 540, 540, 540, 1308, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3222, 540, 540, 1360, 914, 561, 1363, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1376, 1383, 561, 561, 561, 1444, 561, 561, 561, 561, 26027, 1360, 987, 585, 1454, 585, 585, 585, 585, 585, 585, 2659, 585, 585, 2662, 2663, 585, 585, 585, 585, 585, 585, 585, 2712, 540, 585, 585, 561, 540, 540, 540, 540, 585, 585, 1488, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3128, 585, 1521, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1535, 585, 585, 585, 585, 585, 585, 2673, 585, 585, 585, 2676, 585, 585, 2678, 585, 2679, 561, 585, 585, 1521, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 1826, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1841, 1842, 585, 585, 2009, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 1849, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2880, 561, 561, 561, 561, 561, 2063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2074, 540, 540, 2226, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 2854, 561, 561, 561, 561, 561, 561, 2301, 561, 561, 561, 561, 561, 561, 2306, 561, 561, 561, 561, 561, 561, 3079, 561, 561, 561, 561, 561, 3085, 561, 561, 3088, 2311, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 2654, 585, 585, 585, 585, 585, 2374, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3140, 585, 585, 585, 585, 2386, 585, 585, 585, 585, 585, 585, 2391, 585, 585, 585, 585, 585, 2396, 585, 585, 585, 585, 585, 2012, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 2624, 561, 561, 561, 561, 561, 561, 2632, 561, 561, 561, 561, 561, 2288, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2631, 561, 561, 561, 561, 561, 2435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2114, 0, 0, 0, 0, 2476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 2732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1590, 1591, 0, 0, 0, 2772, 0, 0, 0, 0, 2777, 0, 0, 0, 0, 0, 0, 0, 540, 562, 540, 562, 540, 540, 562, 540, 586, 540, 540, 2810, 540, 540, 540, 540, 540, 540, 2818, 540, 540, 540, 540, 540, 540, 540, 889, 540, 540, 540, 540, 907, 540, 540, 540, 540, 540, 540, 540, 2849, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1836, 561, 561, 561, 561, 561, 2857, 561, 561, 561, 561, 561, 561, 2865, 561, 561, 561, 561, 561, 561, 561, 561, 3081, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2897, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 1467, 1474, 585, 585, 585, 585, 585, 585, 585, 585, 3621, 0, 0, 0, 0, 0, 0, 540, 2905, 585, 585, 585, 585, 585, 585, 2913, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1983, 585, 585, 1986, 585, 585, 585, 585, 585, 585, 585, 2945, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 3376, 0, 585, 3280, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 3155, 0, 0, 585, 585, 585, 3587, 585, 3589, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 2791, 0, 0, 0, 2793, 0, 0, 0, 0, 0, 0, 0, 0, 3600, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1314, 540, 540, 540, 540, 3607, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3614, 585, 585, 585, 585, 585, 585, 2686, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1045, 585, 585, 585, 585, 585, 972, 561, 3653, 561, 561, 561, 561, 585, 3657, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 1204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 345, 469, 469, 469, 453, 453, 469, 453, 453, 453, 453, 453, 453, 453, 453, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 550, 573, 550, 573, 550, 550, 573, 550, 597, 573, 573, 573, 573, 573, 573, 573, 597, 597, 597, 550, 597, 597, 597, 597, 597, 573, 573, 550, 573, 597, 573, 597, 1, 12290, 3, 78112, 862, 540, 540, 876, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1315, 540, 540, 540, 585, 1019, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 3498, 0, 0, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1607, 0, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2111, 0, 0, 0, 540, 1341, 540, 540, 540, 540, 540, 1348, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3333, 561, 561, 561, 561, 561, 585, 585, 585, 585, 1505, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3365, 585, 585, 585, 585, 585, 1523, 585, 585, 585, 585, 585, 1530, 585, 585, 585, 585, 585, 585, 585, 1468, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2378, 585, 585, 585, 585, 585, 585, 561, 585, 585, 585, 1557, 585, 1079, 0, 1561, 0, 0, 0, 1567, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1573, 0, 0, 0, 1579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 1695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2127, 0, 0, 0, 540, 1762, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1358, 540, 1843, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1854, 561, 561, 561, 561, 561, 561, 3239, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3578, 561, 561, 585, 585, 585, 585, 0, 2064, 2065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 2135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 2186, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1808, 540, 540, 2213, 540, 540, 540, 540, 2218, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1754, 540, 540, 540, 540, 540, 540, 2240, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1401, 561, 561, 2298, 561, 561, 561, 561, 2303, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3083, 561, 561, 561, 561, 561, 585, 585, 585, 2388, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1938, 585, 585, 585, 3034, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2210, 0, 0, 0, 3380, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1175, 0, 0, 0, 0, 540, 540, 3404, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2282, 561, 561, 561, 561, 561, 561, 561, 3419, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1049, 585, 585, 585, 585, 561, 540, 3454, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3523, 561, 561, 561, 3469, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 3484, 385, 387, 337, 0, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2057, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1139, 1140, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 438, 0, 444, 0, 470, 470, 470, 470, 470, 470, 470, 551, 574, 551, 574, 551, 551, 574, 551, 598, 480, 470, 470, 470, 499, 476, 499, 499, 499, 499, 499, 499, 499, 499, 470, 470, 476, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 480, 470, 481, 480, 470, 470, 470, 470, 574, 574, 574, 574, 574, 574, 574, 598, 598, 598, 551, 598, 598, 598, 598, 598, 574, 574, 551, 574, 598, 574, 598, 1, 12290, 3, 78112, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2153, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 0, 0, 1223, 0, 0, 0, 0, 0, 0, 663, 0, 791, 0, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 2972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2097, 0, 2099, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 717, 0, 0, 0, 831, 0, 0, 0, 663, 834, 0, 791, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 2996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2429, 2430, 0, 0, 0, 0, 863, 540, 540, 877, 540, 540, 540, 888, 540, 540, 540, 540, 906, 540, 540, 540, 540, 540, 1311, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2843, 540, 540, 540, 540, 561, 561, 917, 561, 561, 561, 933, 561, 561, 947, 561, 561, 561, 561, 960, 561, 0, 995, 585, 1076, 1046, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2686976, 2736128, 0, 0, 2531328, 2707456, 0, 3190784, 561, 561, 561, 978, 561, 561, 561, 0, 585, 585, 990, 585, 585, 585, 1006, 585, 585, 585, 585, 585, 2349, 585, 585, 585, 585, 2354, 585, 585, 585, 585, 585, 585, 585, 2377, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 585, 1020, 585, 585, 585, 585, 1033, 585, 585, 585, 585, 1051, 585, 585, 585, 561, 540, 585, 561, 3149, 540, 3151, 561, 3153, 585, 0, 0, 0, 0, 0, 0, 1660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 990, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3067, 561, 561, 561, 561, 3071, 561, 561, 561, 561, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2431, 0, 2433, 0, 1238, 0, 0, 0, 0, 1270, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 3561, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 540, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1491, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1495, 585, 585, 585, 585, 561, 585, 585, 1556, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1100, 0, 0, 0, 0, 0, 0, 1622, 0, 0, 1625, 0, 1627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, 540, 540, 540, 540, 859, 540, 1744, 540, 540, 540, 540, 540, 540, 540, 540, 1755, 540, 540, 540, 540, 540, 540, 540, 2176, 540, 540, 2180, 540, 540, 540, 2184, 540, 561, 561, 561, 1847, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2294, 561, 561, 561, 0, 0, 2117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 0, 0, 0, 0, 2148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 0, 0, 0, 0, 0, 0, 0, 561, 561, 561, 561, 2248, 561, 561, 561, 561, 561, 561, 561, 561, 3095, 3097, 561, 561, 561, 3100, 561, 3102, 561, 561, 2313, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 2651, 585, 585, 585, 585, 585, 585, 585, 2660, 585, 585, 585, 585, 585, 2665, 585, 585, 2398, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 2410, 585, 561, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 3669, 540, 3670, 0, 2436, 0, 0, 0, 0, 0, 0, 2441, 0, 0, 0, 2444, 2445, 0, 0, 0, 0, 0, 3010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, 2497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2506, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 163840, 0, 0, 0, 0, 65536, 0, 2512, 0, 0, 0, 0, 2515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2523, 540, 2536, 2537, 540, 540, 540, 540, 540, 2542, 540, 2544, 540, 540, 540, 540, 2548, 561, 2595, 561, 561, 2598, 2599, 561, 561, 561, 561, 561, 2604, 561, 2606, 561, 561, 561, 561, 1863, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2890, 561, 561, 561, 561, 561, 561, 561, 2610, 561, 561, 561, 561, 561, 561, 561, 561, 2616, 561, 561, 561, 561, 561, 2276, 561, 561, 2279, 561, 561, 561, 561, 561, 561, 561, 1915, 561, 561, 26027, 1920, 585, 585, 585, 585, 2636, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2608, 2668, 585, 2670, 585, 585, 585, 585, 2674, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2675, 585, 585, 585, 585, 585, 585, 2680, 585, 585, 585, 585, 585, 585, 585, 585, 2688, 585, 585, 585, 585, 585, 585, 585, 1950, 585, 585, 585, 585, 1954, 585, 585, 585, 2696, 585, 585, 585, 585, 2700, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1494, 585, 585, 585, 585, 585, 561, 2720, 561, 561, 585, 2722, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 2770, 0, 0, 0, 2773, 0, 0, 2776, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1691, 0, 2786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2795, 0, 0, 0, 0, 0, 3171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1245, 0, 0, 0, 0, 0, 540, 2825, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1773, 540, 540, 2835, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2844, 540, 540, 2847, 540, 540, 2850, 540, 0, 0, 2851, 561, 561, 561, 561, 561, 561, 1851, 561, 561, 561, 561, 1855, 561, 561, 561, 561, 561, 2883, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2892, 561, 561, 2895, 561, 561, 2898, 561, 0, 0, 2899, 585, 585, 585, 585, 585, 585, 585, 1965, 585, 585, 585, 1970, 585, 585, 585, 585, 585, 2931, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2940, 585, 585, 2943, 585, 585, 2946, 585, 561, 2948, 585, 2949, 2950, 540, 540, 561, 561, 561, 561, 1878, 561, 561, 561, 561, 1884, 561, 561, 561, 561, 561, 561, 936, 561, 561, 561, 561, 561, 561, 561, 561, 561, 984, 0, 585, 585, 585, 585, 585, 585, 1007, 585, 0, 2968, 2969, 0, 0, 0, 0, 2974, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 331, 331, 0, 0, 0, 0, 3020, 0, 0, 540, 540, 3025, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3043, 540, 540, 540, 540, 540, 540, 540, 3050, 540, 540, 3052, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1352, 540, 540, 540, 540, 540, 561, 561, 561, 3091, 561, 561, 3093, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2602, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 3106, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1496, 585, 585, 585, 1500, 585, 585, 585, 3132, 585, 585, 3134, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1040, 585, 585, 585, 585, 585, 967, 3158, 0, 0, 0, 3162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 0, 1225, 0, 3190, 0, 0, 3193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 2166, 540, 540, 540, 540, 540, 3214, 540, 540, 540, 540, 540, 540, 540, 3219, 540, 540, 540, 540, 540, 540, 540, 2541, 540, 2543, 540, 540, 540, 540, 540, 540, 540, 540, 2581, 540, 540, 540, 540, 0, 2584, 0, 561, 561, 561, 3236, 3237, 561, 561, 561, 561, 561, 3241, 561, 561, 561, 561, 561, 561, 3250, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 3536, 585, 585, 585, 585, 561, 561, 561, 3247, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 3481, 585, 3483, 585, 585, 585, 585, 3269, 585, 585, 585, 585, 585, 585, 585, 585, 3275, 585, 585, 585, 585, 585, 585, 2701, 585, 585, 585, 585, 585, 585, 585, 2706, 585, 0, 0, 3308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 856, 540, 585, 3359, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1057, 561, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 3386, 0, 0, 0, 0, 0, 1169, 0, 1171, 0, 0, 0, 0, 1176, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 585, 3429, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 3437, 0, 0, 0, 0, 0, 3300, 0, 3176, 3302, 0, 0, 3305, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 703, 0, 0, 3440, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 3452, 540, 540, 540, 540, 3457, 540, 540, 540, 540, 3462, 540, 540, 561, 561, 3467, 561, 0, 997, 1037, 585, 1048, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 783, 0, 0, 561, 561, 561, 3472, 561, 561, 561, 561, 3477, 561, 561, 585, 585, 3482, 585, 585, 585, 585, 585, 585, 3259, 3260, 585, 585, 585, 585, 3264, 3265, 585, 585, 585, 585, 585, 585, 3120, 585, 585, 585, 585, 585, 3126, 585, 585, 3129, 585, 585, 3487, 585, 585, 585, 585, 3492, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 167936, 0, 0, 0, 0, 65536, 0, 3499, 0, 0, 0, 0, 0, 3505, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3397, 540, 540, 540, 540, 540, 540, 540, 540, 3517, 540, 540, 3519, 561, 561, 561, 561, 561, 561, 561, 561, 3252, 561, 561, 561, 561, 561, 561, 585, 561, 561, 561, 3530, 561, 561, 3532, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1042, 585, 585, 585, 585, 585, 969, 585, 585, 3543, 585, 585, 3545, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, 362, 362, 0, 1147, 0, 540, 540, 3629, 3630, 540, 540, 561, 561, 561, 3635, 3636, 561, 561, 585, 585, 585, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 3641, 3642, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3395, 540, 540, 540, 540, 540, 540, 3401, 561, 561, 585, 585, 0, 540, 561, 585, 0, 540, 561, 585, 3681, 3682, 3683, 3684, 339, 340, 341, 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2469, 0, 2470, 0, 342, 342, 343, 342, 0, 341, 342, 445, 454, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 486, 495, 495, 503, 495, 505, 495, 495, 505, 505, 495, 505, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 552, 575, 552, 575, 552, 552, 575, 552, 599, 575, 575, 575, 575, 575, 575, 575, 599, 599, 599, 552, 599, 599, 599, 599, 599, 575, 575, 552, 575, 599, 575, 599, 1, 12290, 3, 78112, 0, 0, 0, 646, 0, 0, 0, 0, 651, 652, 653, 654, 655, 656, 657, 0, 0, 0, 0, 1144, 0, 0, 1259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2957312, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 699, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 800, 0, 0, 0, 0, 721, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 0, 0, 0, 646, 752, 753, 754, 0, 0, 0, 0, 0, 760, 761, 0, 0, 0, 0, 0, 0, 1271, 0, 0, 0, 0, 0, 0, 540, 540, 540, 3026, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2220, 540, 540, 540, 540, 540, 0, 761, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1219, 0, 0, 0, 0, 0, 0, 0, 723, 0, 692, 814, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 558, 581, 558, 581, 558, 558, 581, 558, 605, 0, 754, 823, 824, 0, 0, 0, 0, 0, 0, 754, 0, 0, 828, 699, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 835, 0, 0, 0, 692, 699, 0, 0, 692, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 540, 540, 853, 857, 860, 540, 868, 540, 540, 882, 884, 887, 540, 540, 540, 898, 902, 540, 540, 540, 540, 540, 540, 1766, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1786, 540, 540, 540, 540, 540, 561, 561, 561, 923, 927, 930, 561, 938, 561, 561, 561, 953, 955, 958, 561, 561, 561, 561, 1879, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2641, 561, 561, 561, 561, 561, 561, 561, 561, 2648, 0, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2717, 540, 540, 540, 585, 585, 585, 1026, 1028, 1031, 585, 585, 585, 1043, 1047, 585, 585, 585, 585, 970, 0, 0, 0, 1060, 585, 1062, 1063, 853, 540, 898, 902, 1068, 923, 561, 970, 974, 561, 561, 561, 561, 0, 585, 585, 585, 996, 1000, 1003, 585, 1011, 1073, 0, 996, 585, 1043, 1047, 1078, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 560, 583, 560, 583, 560, 560, 583, 560, 607, 0, 0, 1199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 1231, 0, 0, 0, 0, 1236, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 422, 65536, 0, 540, 1322, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1331, 540, 540, 1338, 540, 540, 540, 540, 2228, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 2852, 561, 561, 561, 561, 561, 561, 561, 561, 1422, 561, 561, 1429, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2879, 561, 561, 561, 561, 561, 561, 561, 1442, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 2925, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 3436, 0, 3438, 0, 585, 1503, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1513, 585, 585, 1520, 1667, 0, 1669, 0, 0, 0, 1671, 0, 748, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 0, 1602, 0, 0, 0, 0, 0, 0, 540, 1738, 540, 540, 540, 540, 540, 540, 540, 2584, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1839, 561, 561, 561, 1743, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2238, 540, 1776, 540, 540, 1781, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1353, 540, 540, 540, 540, 0, 561, 1829, 561, 561, 561, 561, 561, 561, 1835, 561, 561, 561, 561, 561, 561, 1864, 561, 561, 561, 1868, 561, 561, 1873, 561, 561, 1907, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 1923, 585, 585, 585, 585, 585, 585, 3270, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1968, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1929, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1511, 585, 585, 585, 585, 585, 1958, 585, 585, 585, 1962, 585, 585, 1967, 585, 585, 585, 585, 585, 585, 585, 1469, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2392, 585, 585, 585, 2395, 585, 585, 0, 1086, 0, 0, 0, 2034, 0, 1090, 0, 0, 0, 2036, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 585, 585, 585, 585, 2362, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1534, 585, 585, 585, 585, 2585, 0, 1826, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2271, 585, 585, 585, 2710, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 1814, 540, 540, 540, 540, 1820, 540, 540, 540, 1360, 0, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1649, 0, 0, 0, 0, 585, 585, 585, 585, 2924, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1937, 585, 585, 585, 585, 561, 561, 3338, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1857, 561, 561, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 3385, 0, 0, 0, 0, 0, 0, 1628, 1629, 1630, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 362, 0, 0, 0, 0, 0, 0, 3402, 540, 540, 540, 561, 561, 561, 3407, 561, 561, 561, 561, 3411, 561, 561, 561, 561, 1391, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1414, 561, 561, 561, 561, 561, 561, 3417, 561, 561, 561, 585, 585, 585, 3422, 585, 585, 585, 585, 3426, 585, 585, 585, 585, 585, 2375, 2376, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1476, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3432, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 1644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 3446, 0, 0, 0, 540, 540, 540, 3392, 540, 540, 540, 540, 3396, 540, 540, 540, 540, 540, 540, 540, 3039, 540, 540, 540, 540, 540, 3045, 540, 540, 540, 540, 3455, 540, 540, 540, 3459, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 2626, 561, 561, 561, 561, 561, 561, 2633, 561, 561, 561, 561, 3470, 561, 561, 561, 3474, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 3111, 585, 585, 585, 585, 585, 585, 3485, 585, 585, 585, 3489, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3603, 540, 3604, 540, 540, 540, 561, 561, 585, 585, 0, 540, 561, 585, 3677, 3678, 3679, 3680, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 0, 1562, 0, 0, 0, 1568, 0, 0, 0, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 300, 0, 0, 0, 0, 386, 0, 0, 0, 390, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 344, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 521, 521, 521, 521, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 553, 576, 553, 576, 553, 553, 576, 553, 600, 576, 576, 576, 576, 576, 576, 576, 600, 600, 600, 553, 600, 600, 600, 600, 600, 576, 576, 617, 622, 600, 622, 628, 1, 12290, 3, 78112, 561, 561, 561, 979, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2927, 585, 585, 585, 585, 585, 585, 0, 0, 0, 540, 1061, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3238, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1433, 561, 561, 561, 561, 561, 1107, 0, 0, 0, 0, 1112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1190, 0, 0, 0, 0, 0, 561, 561, 561, 1389, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2308, 2309, 561, 561, 561, 1403, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2296, 2297, 1440, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 2947, 540, 585, 585, 561, 540, 540, 561, 561, 1574, 0, 0, 0, 1580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1664, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1620, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2110, 0, 0, 0, 0, 561, 561, 561, 1877, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2322, 0, 0, 0, 2052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2155, 0, 2116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1676, 0, 2241, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2295, 561, 561, 561, 561, 2274, 561, 561, 561, 561, 2278, 561, 2280, 561, 561, 561, 561, 561, 561, 1897, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1397, 561, 561, 561, 561, 561, 561, 2359, 585, 585, 585, 585, 2363, 585, 2365, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3123, 585, 3125, 585, 585, 585, 585, 0, 0, 0, 2500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2494, 2495, 0, 0, 561, 2622, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2607, 561, 0, 3021, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2533, 540, 0, 0, 0, 0, 3176, 3382, 0, 0, 3384, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3391, 540, 540, 3393, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1785, 540, 540, 540, 1790, 540, 0, 0, 0, 0, 3176, 0, 3443, 0, 0, 0, 0, 0, 3449, 540, 540, 540, 540, 540, 1782, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2832, 540, 540, 540, 540, 864, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 912, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2447, 0, 0, 1624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2060, 0, 0, 1827, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2620, 345, 345, 347, 345, 0, 0, 345, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 3310, 0, 0, 3312, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 3410, 561, 561, 561, 561, 561, 0, 0, 0, 345, 345, 347, 345, 345, 345, 345, 345, 345, 512, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 554, 577, 554, 577, 554, 554, 577, 554, 601, 577, 577, 577, 577, 577, 577, 577, 601, 601, 601, 554, 601, 601, 601, 601, 601, 577, 577, 554, 577, 601, 577, 601, 1, 12290, 3, 78112, 0, 722, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2508, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1690, 0, 0, 0, 811, 0, 0, 810, 0, 0, 0, 0, 0, 755, 0, 0, 819, 0, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 0, 1181, 540, 540, 540, 540, 540, 1797, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3464, 561, 561, 561, 561, 540, 540, 872, 540, 540, 540, 540, 890, 892, 540, 540, 903, 540, 540, 540, 540, 540, 540, 2175, 540, 2177, 540, 540, 540, 540, 540, 540, 2185, 561, 561, 918, 924, 561, 561, 561, 561, 942, 561, 561, 561, 561, 561, 962, 964, 561, 561, 975, 561, 561, 561, 561, 0, 585, 585, 991, 997, 585, 585, 585, 585, 585, 585, 585, 3271, 585, 585, 585, 585, 585, 585, 3277, 585, 1015, 585, 585, 585, 585, 585, 1035, 1037, 585, 585, 1048, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 3650, 3651, 540, 540, 0, 0, 0, 540, 991, 585, 561, 854, 892, 540, 903, 540, 924, 964, 561, 975, 0, 0, 0, 1151, 0, 1153, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1706, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1731, 0, 1212, 1213, 0, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 540, 540, 1307, 1309, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1316, 540, 540, 1319, 540, 540, 1343, 540, 540, 540, 540, 540, 540, 540, 540, 1354, 1355, 540, 540, 540, 540, 540, 1813, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 1360, 914, 561, 561, 561, 1366, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1921, 585, 585, 585, 585, 561, 561, 1420, 561, 561, 561, 561, 561, 561, 561, 1434, 561, 561, 561, 561, 561, 561, 3342, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3080, 561, 561, 561, 561, 561, 561, 561, 561, 2319, 561, 561, 561, 561, 0, 0, 0, 561, 561, 561, 1445, 1446, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 1457, 585, 585, 585, 585, 585, 2403, 585, 585, 585, 585, 585, 561, 2409, 585, 2411, 2412, 585, 1487, 1489, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3366, 585, 585, 585, 585, 1525, 585, 585, 585, 585, 585, 585, 585, 585, 1536, 1537, 585, 585, 585, 585, 585, 585, 3434, 585, 561, 540, 561, 585, 0, 0, 0, 3439, 585, 1542, 0, 540, 585, 585, 561, 540, 1547, 540, 540, 1550, 561, 1551, 561, 561, 561, 561, 1895, 561, 561, 561, 1900, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 988, 585, 585, 585, 585, 585, 1554, 585, 1555, 585, 585, 1558, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2069, 0, 0, 0, 0, 2073, 0, 0, 1678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2037, 0, 0, 0, 1694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2072, 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2051, 0, 0, 561, 561, 561, 561, 561, 561, 1833, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 561, 1908, 561, 561, 561, 561, 1914, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 2334, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2938, 585, 585, 585, 585, 585, 585, 585, 1927, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1055, 585, 561, 585, 585, 585, 1994, 585, 585, 585, 585, 585, 585, 585, 585, 2002, 585, 585, 585, 585, 585, 585, 2711, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 2217, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1802, 540, 540, 540, 540, 540, 585, 2008, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 2261, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2891, 561, 561, 561, 561, 0, 2076, 0, 0, 0, 0, 0, 0, 0, 0, 2084, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 266240, 0, 0, 0, 0, 65536, 0, 2088, 0, 0, 2090, 0, 0, 0, 0, 0, 0, 0, 2098, 0, 0, 0, 0, 0, 0, 1725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 2146, 0, 0, 0, 2146, 0, 0, 2151, 2152, 0, 0, 0, 0, 0, 0, 0, 274432, 274432, 274432, 0, 274432, 274432, 274432, 274432, 274432, 2156, 0, 0, 0, 0, 0, 0, 0, 2162, 540, 540, 540, 540, 540, 2168, 540, 540, 540, 540, 2538, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1821, 540, 540, 1360, 540, 2200, 540, 2203, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2209, 540, 540, 540, 540, 2578, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 2244, 561, 561, 561, 561, 561, 561, 2251, 561, 561, 561, 561, 561, 561, 3351, 585, 585, 585, 585, 585, 585, 585, 3356, 585, 561, 561, 2300, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2323, 0, 0, 0, 2329, 585, 585, 585, 585, 585, 585, 2336, 585, 585, 585, 585, 585, 585, 585, 1470, 585, 585, 585, 585, 1480, 585, 585, 585, 585, 585, 2360, 585, 585, 585, 585, 585, 585, 2366, 585, 2368, 585, 2371, 585, 585, 585, 585, 585, 585, 3546, 0, 0, 3549, 3550, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2912256, 0, 3207168, 2465792, 0, 0, 2385, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1989, 2472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2480, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 1, 12290, 3, 0, 0, 0, 0, 0, 2514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2522, 0, 0, 0, 0, 1575, 0, 0, 0, 0, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 172032, 0, 0, 0, 0, 65536, 0, 561, 561, 2596, 561, 561, 561, 561, 561, 2601, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 992, 585, 585, 585, 585, 585, 585, 2681, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1956, 585, 2719, 561, 561, 561, 2721, 585, 585, 585, 2723, 2724, 0, 0, 0, 0, 0, 0, 0, 2801, 0, 0, 0, 540, 2805, 540, 540, 540, 2742, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2100, 0, 0, 0, 0, 2758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2128, 0, 0, 540, 2809, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2223, 2224, 540, 2846, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 561, 2855, 561, 2856, 561, 2894, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 585, 2903, 585, 2904, 585, 2942, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 3374, 0, 0, 3377, 0, 0, 0, 540, 3024, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1771, 540, 540, 540, 540, 561, 561, 585, 3105, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2369, 585, 585, 585, 585, 585, 3145, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 2066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 297, 0, 0, 0, 0, 0, 0, 0, 3390, 540, 540, 540, 540, 3394, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2179, 540, 540, 540, 540, 540, 540, 540, 3403, 540, 540, 3405, 561, 561, 561, 561, 3409, 561, 561, 561, 561, 561, 561, 2277, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3082, 561, 3084, 561, 561, 561, 561, 561, 561, 561, 3418, 561, 561, 3420, 585, 585, 585, 585, 3424, 585, 585, 585, 585, 585, 585, 585, 3591, 585, 561, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 3303, 0, 0, 0, 0, 3307, 0, 585, 585, 585, 585, 585, 3433, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1129, 0, 0, 0, 0, 0, 0, 0, 3500, 0, 3502, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 3511, 540, 540, 540, 540, 2812, 540, 2815, 540, 540, 540, 540, 2820, 540, 540, 540, 2823, 540, 540, 540, 540, 3631, 540, 561, 561, 561, 561, 561, 3637, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 0, 1564, 0, 0, 0, 1570, 0, 585, 585, 3643, 585, 561, 3645, 0, 3647, 0, 0, 540, 540, 540, 540, 540, 540, 540, 1286, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3208, 540, 540, 540, 540, 540, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2496, 398, 0, 0, 0, 0, 0, 365, 373, 401, 0, 0, 0, 0, 0, 365, 0, 0, 393, 0, 0, 0, 0, 348, 0, 0, 365, 0, 393, 0, 406, 408, 0, 0, 365, 373, 0, 69632, 73728, 0, 0, 0, 0, 424, 65536, 0, 0, 0, 0, 1596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 424, 424, 0, 424, 0, 408, 424, 447, 455, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 644, 0, 406, 0, 496, 496, 0, 496, 496, 496, 496, 496, 496, 496, 496, 522, 522, 522, 522, 455, 455, 455, 530, 455, 531, 455, 455, 522, 536, 522, 522, 522, 522, 538, 555, 578, 555, 578, 555, 555, 578, 555, 602, 578, 578, 578, 608, 608, 608, 578, 602, 602, 602, 555, 602, 602, 602, 602, 602, 578, 578, 618, 623, 602, 623, 629, 1, 12290, 3, 78112, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2769, 0, 0, 0, 694, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 2440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142, 2143, 0, 540, 540, 540, 878, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1332, 540, 540, 540, 561, 561, 919, 561, 561, 561, 561, 561, 561, 948, 950, 561, 561, 561, 561, 561, 561, 3575, 561, 3577, 561, 561, 561, 585, 585, 585, 585, 0, 0, 1563, 0, 0, 0, 0, 0, 1569, 0, 585, 1021, 1023, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 3496, 0, 3497, 0, 0, 0, 0, 0, 540, 992, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3341, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3579, 561, 585, 585, 585, 585, 0, 0, 0, 1098, 1230, 0, 0, 0, 0, 0, 0, 1237, 0, 0, 0, 0, 0, 0, 2452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1242, 1251, 540, 540, 1280, 540, 540, 540, 1284, 540, 540, 1295, 540, 540, 1299, 540, 540, 540, 540, 540, 2229, 540, 2231, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1840, 561, 561, 1360, 914, 561, 561, 561, 561, 561, 561, 1369, 561, 561, 561, 1373, 561, 561, 1384, 561, 561, 1388, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2324, 0, 0, 561, 561, 1405, 561, 561, 561, 1409, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3612, 3613, 561, 585, 585, 585, 585, 585, 1460, 585, 585, 585, 1464, 585, 585, 1475, 585, 585, 1479, 585, 585, 585, 585, 585, 585, 1032, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 3625, 0, 540, 0, 1623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1636, 0, 0, 0, 0, 1626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2058, 2059, 0, 2061, 2062, 1638, 0, 0, 0, 1642, 0, 0, 0, 1646, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1145, 362, 362, 0, 0, 1148, 561, 1844, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2635, 561, 561, 561, 561, 1862, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2869, 561, 561, 2872, 2007, 585, 585, 585, 585, 561, 1752, 585, 1938, 1844, 540, 540, 540, 540, 561, 561, 561, 561, 2275, 561, 561, 561, 561, 561, 561, 2281, 561, 2283, 561, 2286, 0, 0, 2056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2154, 0, 0, 0, 0, 0, 2118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2520, 0, 0, 0, 0, 2132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, 2463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158, 0, 0, 2161, 0, 540, 540, 2164, 540, 540, 540, 540, 540, 540, 540, 3053, 540, 3055, 540, 540, 540, 540, 540, 540, 540, 540, 2232, 540, 540, 2235, 2236, 540, 540, 0, 540, 540, 540, 2227, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2242, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 561, 561, 2246, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 1455, 585, 1458, 561, 2312, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 2650, 585, 585, 585, 585, 585, 585, 561, 3547, 3548, 0, 0, 0, 0, 0, 0, 3554, 0, 585, 585, 2331, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2381, 2382, 585, 585, 585, 585, 2387, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2397, 540, 540, 2415, 2416, 561, 561, 2419, 2420, 585, 585, 2423, 2424, 0, 1563, 0, 1569, 0, 1575, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 0, 2438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 2513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2519, 0, 0, 0, 0, 0, 0, 2478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2565, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1333, 540, 540, 540, 585, 585, 2682, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2693, 585, 585, 585, 585, 585, 585, 3590, 585, 585, 561, 0, 3594, 0, 0, 0, 0, 0, 0, 2516, 2466, 0, 0, 0, 0, 0, 2521, 0, 0, 2824, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2239, 561, 561, 561, 561, 2885, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1395, 561, 561, 561, 561, 561, 561, 561, 561, 1430, 561, 561, 561, 561, 561, 561, 561, 561, 2866, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 2933, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1985, 585, 585, 585, 585, 0, 3177, 0, 0, 0, 3180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1601, 1602, 0, 0, 0, 0, 0, 0, 0, 0, 3194, 0, 0, 0, 0, 0, 0, 3197, 0, 3199, 540, 540, 540, 540, 880, 540, 885, 540, 891, 540, 894, 540, 540, 908, 540, 540, 540, 540, 540, 3038, 540, 540, 540, 540, 540, 540, 540, 540, 3046, 540, 585, 3289, 3290, 0, 0, 0, 0, 3294, 0, 0, 0, 0, 0, 0, 0, 0, 1099, 0, 0, 0, 0, 0, 0, 0, 540, 540, 3316, 540, 540, 540, 3319, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1819, 540, 540, 540, 540, 1360, 561, 3337, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2646, 561, 3415, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3115, 3428, 585, 3430, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 2503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 336, 290, 0, 0, 0, 0, 3555, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3566, 540, 540, 561, 3064, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2617, 561, 561, 561, 561, 561, 3608, 561, 3609, 561, 561, 561, 561, 561, 561, 561, 585, 585, 3615, 585, 585, 585, 585, 585, 2658, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1952, 585, 585, 585, 585, 585, 3616, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 1067, 911, 561, 561, 561, 1072, 407, 353, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 1146, 0, 0, 472, 483, 472, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 523, 523, 527, 527, 527, 527, 472, 472, 472, 472, 472, 477, 472, 472, 527, 523, 527, 527, 527, 527, 539, 556, 579, 556, 579, 556, 556, 579, 556, 603, 579, 579, 579, 579, 579, 579, 579, 603, 603, 603, 556, 603, 603, 603, 603, 603, 579, 579, 619, 624, 603, 624, 630, 1, 12290, 3, 78112, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2101, 0, 738, 0, 0, 0, 644, 738, 0, 744, 745, 644, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 807, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 644, 0, 0, 0, 802, 0, 807, 0, 793, 0, 822, 0, 0, 0, 665, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 362, 0, 0, 0, 1134592, 0, 0, 0, 793, 793, 0, 644, 0, 0, 793, 807, 845, 0, 540, 850, 540, 540, 540, 540, 540, 2539, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3324, 540, 540, 540, 540, 540, 869, 873, 879, 883, 540, 540, 540, 540, 540, 899, 540, 540, 540, 540, 540, 540, 540, 3206, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2205, 540, 540, 540, 540, 540, 540, 561, 561, 920, 561, 561, 561, 561, 939, 943, 949, 561, 954, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 0, 2728, 0, 0, 1016, 1022, 585, 1027, 585, 585, 585, 585, 585, 1044, 585, 585, 585, 585, 585, 1058, 0, 0, 0, 540, 993, 585, 561, 540, 540, 899, 540, 540, 561, 561, 971, 561, 561, 561, 561, 561, 0, 585, 585, 993, 585, 585, 585, 585, 1012, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2784, 0, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1211, 1227, 0, 0, 1099, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 1674, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2753, 2754, 0, 1252, 1200, 0, 1233, 1255, 0, 1258, 0, 0, 0, 0, 0, 1130, 0, 0, 0, 0, 0, 1597, 0, 0, 0, 1600, 0, 0, 1603, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3320, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1801, 540, 540, 540, 1806, 540, 540, 0, 1267, 0, 0, 0, 0, 0, 1267, 0, 0, 1149, 1267, 0, 1274, 540, 540, 540, 540, 1282, 540, 540, 540, 1291, 540, 540, 540, 540, 540, 540, 540, 540, 2204, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2830, 540, 540, 540, 540, 540, 540, 540, 1279, 540, 540, 540, 540, 1285, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2194, 540, 540, 540, 540, 540, 540, 1306, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1317, 540, 540, 540, 540, 540, 2567, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2545, 540, 540, 540, 540, 1321, 540, 540, 540, 540, 540, 540, 540, 1327, 540, 540, 540, 1334, 1336, 540, 540, 540, 540, 1310, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1335, 540, 540, 540, 1360, 914, 1362, 561, 561, 561, 561, 1368, 561, 561, 561, 561, 1374, 561, 561, 561, 561, 1407, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2293, 561, 561, 561, 561, 561, 561, 1406, 561, 561, 561, 561, 1411, 561, 561, 561, 561, 561, 561, 561, 561, 1852, 561, 561, 561, 561, 561, 561, 561, 561, 1866, 561, 561, 561, 561, 561, 561, 561, 1418, 561, 561, 561, 1425, 1427, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1865, 561, 561, 561, 561, 561, 561, 561, 561, 1883, 561, 561, 561, 561, 561, 561, 561, 1459, 585, 585, 585, 585, 1465, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1533, 585, 585, 585, 585, 585, 1486, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1497, 585, 585, 585, 585, 585, 585, 1034, 585, 585, 585, 585, 1052, 585, 585, 585, 561, 1502, 585, 585, 585, 585, 585, 585, 585, 585, 1509, 585, 585, 585, 1516, 1518, 585, 585, 585, 585, 585, 2685, 585, 585, 585, 585, 2689, 585, 585, 585, 2694, 585, 561, 0, 1290, 1544, 1470, 1379, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3249, 561, 3251, 561, 561, 561, 561, 561, 561, 561, 585, 3534, 585, 3535, 585, 585, 585, 3539, 585, 0, 1575, 0, 0, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1632, 0, 0, 0, 0, 0, 1592, 1593, 0, 0, 0, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 1639, 0, 0, 0, 0, 0, 0, 0, 1647, 1648, 0, 0, 0, 0, 0, 0, 0, 2387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2987, 0, 0, 0, 0, 0, 2990, 0, 1655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2482, 0, 0, 0, 1721, 0, 0, 0, 0, 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, 300, 300, 300, 300, 0, 300, 300, 300, 300, 300, 540, 540, 540, 1747, 540, 540, 540, 540, 1753, 540, 540, 540, 540, 540, 540, 540, 540, 1817, 540, 540, 540, 540, 540, 540, 1360, 540, 540, 540, 1764, 540, 540, 540, 540, 1768, 540, 540, 540, 540, 540, 540, 540, 540, 2178, 540, 540, 540, 540, 540, 540, 540, 540, 1287, 1294, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1779, 540, 540, 1783, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2206, 2207, 540, 540, 540, 540, 1809, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1379, 561, 0, 1074, 585, 585, 1050, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 1106, 0, 0, 0, 0, 0, 0, 1210, 0, 561, 1845, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1856, 561, 561, 561, 561, 1423, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3253, 561, 561, 561, 561, 585, 561, 1860, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1871, 561, 561, 561, 561, 1424, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1920, 585, 585, 585, 585, 1876, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3244, 561, 561, 585, 2026, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 2079, 2080, 0, 0, 2082, 2083, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 3306, 0, 0, 0, 0, 0, 0, 2105, 0, 0, 0, 0, 2108, 2109, 0, 0, 0, 0, 0, 0, 301, 301, 301, 301, 0, 301, 301, 301, 301, 301, 2115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 2147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2781, 0, 0, 0, 0, 0, 2157, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 540, 2225, 540, 540, 540, 540, 2230, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 1696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2070, 0, 0, 0, 0, 0, 2242, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2618, 561, 561, 561, 561, 561, 2259, 561, 561, 2263, 561, 561, 561, 2267, 561, 561, 561, 561, 561, 561, 3610, 561, 3611, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 2030, 0, 1082, 0, 0, 0, 2032, 585, 2344, 585, 585, 2348, 585, 585, 585, 2352, 585, 585, 585, 585, 585, 585, 585, 1528, 585, 585, 585, 585, 585, 585, 1538, 585, 585, 585, 585, 2361, 585, 585, 2364, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1935, 1936, 585, 585, 585, 585, 1943, 585, 585, 2400, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 2718, 540, 540, 0, 0, 0, 2437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2794, 0, 0, 0, 0, 2473, 0, 0, 0, 2477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2511, 0, 540, 540, 2525, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2532, 540, 540, 540, 540, 1324, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1330, 540, 540, 540, 540, 540, 540, 2550, 540, 540, 2552, 540, 2553, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2193, 540, 540, 2196, 540, 540, 540, 540, 2563, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2574, 540, 540, 540, 540, 2827, 2828, 540, 540, 540, 540, 2831, 540, 540, 540, 540, 540, 540, 540, 1751, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1351, 540, 540, 540, 540, 540, 540, 0, 0, 0, 561, 561, 2587, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2264, 561, 561, 561, 561, 2269, 561, 561, 561, 2594, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2871, 561, 561, 2609, 561, 561, 561, 2612, 561, 561, 2614, 561, 2615, 561, 561, 561, 561, 561, 929, 561, 937, 561, 561, 561, 561, 561, 561, 561, 561, 2629, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2623, 561, 561, 2627, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2290, 2291, 561, 561, 561, 561, 561, 561, 561, 0, 2327, 585, 585, 585, 585, 585, 585, 585, 1507, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 3284, 540, 3286, 561, 561, 561, 561, 2638, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3099, 561, 561, 561, 0, 0, 2733, 2734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3002, 0, 0, 0, 2785, 0, 2787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2432, 0, 0, 0, 0, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3217, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3042, 540, 3044, 540, 540, 540, 540, 540, 540, 2848, 540, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 2318, 561, 561, 561, 561, 561, 0, 0, 0, 561, 561, 2859, 561, 2862, 561, 561, 561, 561, 2867, 561, 561, 561, 2870, 561, 561, 561, 561, 2302, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 940, 561, 561, 561, 561, 561, 561, 561, 561, 1394, 561, 561, 561, 561, 561, 561, 561, 1402, 561, 561, 561, 2896, 561, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 1529, 585, 585, 585, 585, 585, 585, 585, 585, 2661, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2907, 585, 2910, 585, 585, 585, 585, 2915, 585, 585, 585, 2918, 585, 585, 585, 585, 585, 1527, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2367, 585, 585, 585, 585, 585, 585, 585, 585, 2944, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 3373, 0, 0, 0, 3375, 0, 0, 2980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2979, 2991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3005, 0, 3006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2989, 0, 561, 561, 561, 561, 3078, 561, 561, 561, 561, 561, 561, 561, 561, 3086, 561, 561, 561, 561, 2315, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 2327, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3273, 585, 585, 585, 585, 585, 585, 561, 561, 585, 585, 585, 3107, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1969, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3119, 585, 585, 585, 585, 585, 585, 585, 585, 3127, 585, 585, 585, 585, 585, 1901, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 3065, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3479, 585, 585, 585, 585, 585, 0, 3159, 0, 0, 0, 0, 0, 0, 0, 3165, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 3304, 0, 0, 0, 0, 0, 0, 3191, 0, 0, 0, 0, 0, 0, 3195, 3196, 0, 0, 0, 0, 540, 540, 3601, 540, 3602, 540, 540, 540, 540, 540, 540, 540, 540, 1752, 540, 540, 540, 540, 540, 540, 540, 540, 1349, 540, 540, 540, 540, 540, 540, 540, 540, 1288, 540, 540, 540, 540, 540, 540, 540, 540, 1289, 540, 540, 540, 540, 540, 540, 540, 540, 1290, 540, 540, 540, 540, 1300, 540, 540, 3279, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 561, 561, 2611, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2304, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1853, 561, 561, 561, 561, 561, 561, 540, 540, 540, 540, 3317, 540, 540, 540, 3321, 540, 540, 540, 540, 540, 540, 540, 540, 2192, 540, 540, 540, 540, 540, 540, 2198, 561, 561, 561, 3339, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2628, 561, 561, 561, 561, 561, 561, 561, 561, 2305, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3348, 561, 561, 561, 585, 585, 585, 585, 585, 3353, 585, 585, 585, 3357, 561, 561, 3572, 561, 561, 561, 561, 561, 561, 561, 561, 3580, 585, 585, 585, 3584, 3597, 0, 3598, 3599, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3605, 3606, 540, 540, 540, 540, 2837, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1803, 540, 540, 540, 540, 585, 585, 585, 585, 585, 3619, 3620, 585, 561, 0, 0, 3623, 0, 0, 0, 540, 585, 585, 561, 540, 540, 895, 540, 540, 561, 561, 967, 561, 561, 3671, 585, 3672, 0, 540, 561, 585, 0, 540, 561, 585, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 1559, 0, 0, 0, 1565, 0, 0, 0, 1571, 2033, 0, 0, 0, 0, 1577, 2035, 0, 0, 0, 0, 0, 0, 0, 1682, 0, 1684, 0, 0, 0, 0, 0, 0, 0, 1712, 0, 0, 1715, 0, 0, 0, 0, 0, 355, 356, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2762, 0, 0, 0, 0, 0, 0, 0, 2768, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3198, 0, 540, 540, 473, 473, 487, 0, 0, 487, 356, 356, 356, 509, 356, 356, 356, 356, 473, 473, 580, 580, 580, 580, 580, 580, 580, 604, 604, 604, 557, 604, 604, 604, 604, 604, 580, 580, 557, 580, 604, 580, 604, 1, 12290, 3, 78112, 540, 870, 540, 540, 540, 540, 540, 540, 540, 540, 540, 904, 540, 540, 540, 540, 540, 540, 2191, 540, 540, 540, 540, 2195, 540, 2197, 540, 540, 561, 561, 976, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 1013, 1197, 0, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 1371, 561, 561, 561, 1380, 561, 561, 561, 561, 2639, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2644, 561, 561, 561, 561, 585, 585, 585, 1462, 585, 585, 585, 1471, 585, 585, 585, 585, 585, 585, 585, 585, 1472, 585, 1477, 585, 585, 1481, 585, 585, 1541, 561, 0, 1291, 585, 1471, 1380, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 2727, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 1582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2737, 0, 0, 0, 0, 0, 2741, 0, 1607, 0, 0, 0, 0, 0, 0, 0, 1615, 1616, 0, 0, 0, 0, 0, 0, 303, 204800, 204800, 0, 205103, 204800, 1, 12290, 3, 0, 1761, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1774, 1891, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3087, 561, 561, 561, 561, 1911, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 585, 1466, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2928, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1947, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2001, 585, 585, 585, 585, 585, 585, 585, 1960, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1973, 0, 0, 2243, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2634, 561, 561, 2328, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2384, 0, 0, 0, 0, 2425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2085, 2086, 0, 0, 0, 0, 2449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3175, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 2590, 561, 561, 561, 561, 561, 561, 2289, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2292, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2861, 561, 2863, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2877, 561, 561, 561, 561, 561, 561, 561, 561, 1899, 561, 561, 561, 561, 561, 1905, 561, 585, 585, 585, 2909, 585, 2911, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1984, 585, 585, 585, 585, 585, 585, 585, 3360, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1056, 585, 561, 0, 3556, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3567, 540, 561, 561, 561, 561, 2876, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 561, 561, 561, 561, 3656, 561, 585, 585, 585, 585, 3660, 585, 0, 0, 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147354, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2509, 0, 0, 357, 0, 367, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2457, 0, 0, 581, 581, 581, 581, 581, 581, 581, 605, 605, 605, 558, 605, 605, 605, 605, 605, 581, 581, 558, 581, 605, 581, 605, 1, 12290, 3, 78112, 865, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2575, 1385, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3243, 561, 1775, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3047, 585, 585, 585, 585, 1961, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2380, 585, 585, 585, 585, 2756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3315, 0, 2981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3188, 0, 3298, 0, 3299, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3388, 0, 0, 0, 0, 358, 359, 360, 361, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 702, 0, 0, 0, 0, 359, 0, 358, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 425, 65536, 0, 0, 0, 0, 1710, 1711, 0, 0, 0, 1714, 0, 0, 0, 0, 0, 1718, 425, 425, 0, 425, 0, 359, 425, 0, 456, 0, 0, 0, 0, 0, 0, 0, 1102, 0, 0, 0, 0, 1263, 1264, 0, 0, 0, 0, 0, 497, 497, 0, 504, 504, 504, 504, 510, 511, 504, 504, 524, 524, 524, 524, 456, 456, 456, 456, 456, 456, 456, 456, 524, 524, 524, 524, 524, 524, 524, 559, 582, 559, 582, 559, 559, 582, 559, 606, 582, 582, 582, 582, 582, 582, 582, 606, 606, 606, 559, 606, 606, 606, 606, 606, 582, 582, 620, 625, 606, 625, 631, 1, 12290, 3, 78112, 0, 0, 0, 540, 585, 585, 561, 540, 540, 900, 540, 540, 561, 561, 972, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 1934, 585, 585, 585, 585, 585, 585, 585, 0, 0, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2740, 0, 0, 0, 0, 0, 561, 2245, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3533, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3494, 561, 0, 0, 0, 0, 0, 0, 585, 2330, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1482, 585, 585, 540, 2549, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2237, 0, 540, 540, 2577, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 1611, 0, 0, 1614, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2891776, 0, 0, 0, 0, 0, 2392064, 583, 583, 583, 583, 583, 583, 583, 607, 607, 607, 560, 607, 607, 607, 607, 607, 583, 583, 560, 583, 607, 583, 607, 1, 12290, 3, 78112, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 866, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3224, 1136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 1659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 786, 561, 585, 585, 585, 585, 585, 1079, 1560, 0, 0, 0, 1566, 0, 0, 0, 1572, 0, 0, 0, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3313, 0, 0, 540, 2199, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2547, 540, 2535, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2822, 540, 561, 561, 561, 2597, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2317, 561, 561, 2320, 2321, 561, 561, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 743, 540, 540, 540, 540, 540, 540, 540, 3331, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3072, 561, 561, 561, 0, 0, 0, 540, 585, 585, 561, 1064, 540, 540, 905, 540, 1069, 561, 561, 977, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 1951, 585, 585, 585, 585, 585, 585, 585, 0, 0, 1594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2767, 0, 0, 561, 561, 1846, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2645, 561, 561, 585, 585, 585, 1977, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2692, 585, 585, 585, 540, 540, 540, 2188, 540, 2190, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 3334, 561, 561, 0, 0, 0, 561, 561, 561, 2247, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2613, 561, 561, 561, 561, 561, 561, 561, 2619, 561, 561, 2273, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3242, 561, 561, 0, 585, 585, 585, 2332, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2408, 540, 585, 585, 561, 561, 2647, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 2687, 585, 585, 2691, 585, 585, 585, 585, 585, 585, 585, 585, 2684, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2916, 585, 585, 585, 585, 561, 561, 585, 585, 585, 585, 585, 3109, 585, 585, 585, 585, 585, 585, 585, 585, 2702, 585, 585, 585, 585, 585, 585, 585, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225706, 0, 0, 1134592, 0, 0, 0, 1134592, 1134592, 0, 0, 1134592, 0, 0, 1134592, 0, 1134592, 0, 0, 0, 1134592, 1135005, 1135005, 0, 0, 0, 0, 0, 1135005, 0, 1134592, 1134592, 0, 0, 0, 0, 1135202, 1135202, 1135202, 1135202, 1134592, 1135202, 1135202, 1135202, 1135202, 1135202, 0, 1134592, 1134592, 1134592, 1134592, 1135202, 1134592, 1135202, 1, 12290, 3, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 1138688, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2125824, 2126738, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 987, 2125824, 2125824, 2125824, 2125824, 2424832, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 457, 457, 1147354, 457, 457, 457, 457, 457, 457, 457, 457, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2792, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 1147354, 1147354, 1147354, 1147405, 1147405, 1147354, 1147405, 1147405, 1, 12290, 3, 0, 0, 0, 0, 2042, 0, 0, 2045, 2046, 0, 0, 0, 2050, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 1142784, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3137536, 2125824, 2940928, 2940928, 2940928, 0, 0, 0, 0, 0, 0, 305, 440, 448, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 1159168, 0, 0, 1159168, 0, 1159168, 1159168, 0, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2802, 0, 540, 540, 540, 540, 540, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1, 12290, 3, 0, 0, 0, 0, 2053, 0, 2054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 799, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163264, 0, 0, 0, 0, 0, 155648, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 913, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 1452, 2125824, 2125824, 2125824, 2125824, 2424832, 106496, 0, 106496, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2782, 2783, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163840, 0, 0, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 0, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 2875392, 0, 0, 0, 0, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2654208, 2678784, 2760704, 2764800, 2785280, 2854912, 2969600, 2125824, 3006464, 2125824, 3018752, 2125824, 2125824\n +[ 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22007, 18176, 18196, 18196, 18196, 18203, 18196, 18196, 18196, 18196, 18230, 18196, 18196, 18196, 18196, 18219, 18196, 18180, 18246, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 18411, 20907, 20920, 20932, 20944, 22539, 18416, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 37625, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 21008, 21032, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21632, 21055, 23546, 23546, 23546, 21178, 23546, 23546, 23916, 42362, 21241, 23546, 23546, 23546, 23546, 19298, 47203, 21077, 21110, 23546, 23546, 23546, 35799, 23546, 23546, 21194, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 21229, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21358, 21323, 23546, 23546, 23546, 26152, 23546, 23546, 27593, 23546, 21369, 29482, 21257, 21282, 21273, 21304, 21317, 21346, 20967, 23546, 23546, 23546, 28947, 23546, 23546, 21385, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 20711, 21423, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 21446, 26048, 18745, 18766, 18771, 20561, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23540, 23546, 23546, 23546, 25880, 23545, 23546, 31245, 23546, 21468, 23534, 21504, 23546, 21511, 23546, 21527, 21539, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 196 + +]]></string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAA4=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="14" aka="AAAAAAAAAA4="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>32, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 21567, 23546, 23546, 23546, 31874, 23546, 23546, 21586, 23546, 23546, 21608, 21620, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 35211, 23546, 23546, 23546, 23546, 23546, 23546, 23424, 21648, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 21681, 18544, 18567, 18590, 50977, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21736, 21705, 23546, 23546, 23546, 44539, 23546, 23546, 24265, 25689, 25607, 23546, 23546, 23546, 23546, 26450, 47502, 21724, 21752, 23546, 23546, 23546, 35799, 23546, 23546, 21783, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 20237, 21819, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21551, 21857, 21913, 21913, 21913, 21864, 21908, 21913, 21918, 21967, 21842, 21949, 21880, 21961, 21896, 21934, 21983, 21995, 20967, 23546, 23546, 23546, 26225, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 22023, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 28636, 23546, 23546, 23546, 25912, 50946, 23546, 50080, 50952, 21369, 28635, 23546, 22054, 22060, 22076, 22111, 22121, 22137, 23546, 23546, 23546, 30755, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 22183, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 27655, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 51066, 39748, 22869, 22242, 22228, 22245, 22261, 22277, 22288, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 20285, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 18648, 40763, 24585, 22304, 22324, 22304, 22338, 24585, 22308, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 22361, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 22386, 23546, 23546, 23546, 25841, 18403, 23546, 19576, 22382, 44281, 22402, 22429, 22434, 22434, 22450, 22385, 22413, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22473, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 25653, 22498, 22518, 22498, 22532, 25653, 22502, 22555, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27132, 23546, 42897, 23546, 44844, 38626, 22584, 22361, 37471, 23546, 23546, 23546, 23546, 22587, 47563, 46856, 47563, 47563, 22603, 35356, 22824, 22824, 34828, 22804, 22621, 22804, 22804, 33187, 36943, 23546, 23546, 23546, 23546, 23546, 26071, 23546, 22641, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 43701, 32739, 23546, 23546, 23546, 23546, 23546, 29474, 22702, 23546, 33124, 44563, 47563, 47563, 47563, 47564, 22719, 35350, 22824, 22764, 22824, 22767, 35689, 22783, 22804, 22803, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 27587, 23546, 23546, 47562, 46826, 47563, 47563, 27195, 22821, 42846, 22824, 22824, 22824, 30376, 22804, 22841, 22804, 22804, 29883, 33199, 23546, 23546, 21430, 23546, 49502, 48973, 47563, 47563, 36153, 45209, 22824, 22824, 39816, 27834, 22804, 22804, 43796, 30403, 39964, 23546, 23546, 22861, 23546, 47560, 22885, 47563, 23113, 22903, 22824, 33078, 22920, 22804, 38116, 23546, 23546, 22937, 29174, 22980, 47563, 34384, 42527, 22825, 23019, 22804, 31964, 47447, 46606, 23083, 36624, 23105, 32340, 30673, 23131, 36549, 23164, 40907, 43074, 23200, 23229, 23275, 36645, 36686, 33550, 48975, 23107, 30672, 23141, 39417, 23313, 23334, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 24855, 21369, 23546, 23546, 23546, 23546, 23546, 20980, 20992, 23383, 23546, 23546, 23546, 35799, 23546, 23546, 23420, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 23440, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 18368, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 26071, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23485, 23546, 23546, 23546, 26606, 23546, 23546, 23546, 23546, 21369, 28080, 23505, 23528, 23563, 23575, 28081, 23512, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 30821, 23546, 37478, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23598, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23184, 21369, 23546, 23546, 23546, 23546, 23546, 22653, 22665, 23615, 23546, 23546, 23546, 35799, 23546, 23546, 23644, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 23664, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 23688, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 48779, 23733, 23546, 23546, 23546, 23546, 34921, 23753, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 23777, 48792, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 41753, 22821, 22824, 22824, 22824, 22824, 44122, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 34866, 22821, 22824, 22824, 22824, 22824, 23826, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 39721, 23546, 23546, 23546, 30797, 25982, 23546, 23546, 23849, 21369, 20313, 44188, 23887, 23893, 23909, 23546, 49114, 23932, 23546, 23546, 23546, 36603, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 24187, 24465, 24820, 25200, 24258, 18282, 18849, 18305, 23964, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 23993, 24116, 24017, 24046, 24001, 24088, 25090, 24132, 24812, 24103, 24159, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 24182, 25436, 24884, 24206, 24190, 24890, 24819, 24363, 24227, 24819, 24414, 24143, 25214, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 24243, 24030, 25425, 24281, 24706, 24308, 24337, 24350, 24389, 24405, 24517, 24423, 25208, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 24439, 19364, 24455, 25063, 24489, 24505, 24533, 25266, 24373, 24545, 24561, 24577, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 19809, 24679, 24601, 25048, 19406, 24473, 24617, 25251, 25017, 24736, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 24633, 24673, 24695, 24722, 24779, 24801, 24836, 23977, 20842, 20016, 18679, 20827, 20042, 24871, 24906, 24935, 24951, 25006, 25411, 25295, 20159, 20175, 20206, 25033, 24292, 25079, 25281, 25106, 20376, 20392, 19394, 24919, 24657, 20462, 19676, 24211, 24785, 32258, 19353, 24647, 24966, 20473, 24060, 25136, 20616, 25172, 25188, 25236, 24072, 25311, 25362, 25396, 25452, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 21328, 23546, 23546, 23546, 25841, 25477, 23546, 23546, 25472, 32915, 25493, 25501, 25501, 25501, 25517, 21330, 25540, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 25581, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20499, 25597, 18792, 18808, 18830, 23628, 18814, 25623, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 21016, 25645, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 25669, 25705, 25721, 19477, 25754, 19498, 25737, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 18708, 21452, 19692, 19708, 20143, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 50535, 23259, 25770, 25770, 25770, 25779, 21123, 21135, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 25220, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25802, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21147, 20888, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 22959, 25825, 25825, 25825, 25834, 20891, 22964, 25857, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 27140, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25873, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25552, 25561, 23546, 23546, 23546, 26852, 23546, 23546, 23546, 23546, 21369, 33245, 25896, 25896, 25896, 25905, 36950, 33250, 25928, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 22366, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25964, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 25998, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26099, 23546, 23546, 23546, 23546, 25841, 21661, 23546, 23546, 21094, 43925, 23546, 23546, 23546, 21665, 26069, 21092, 26087, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 31389, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 26115, 26145, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 43987, 26168, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 26285, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 26302, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 26321, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 19867, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 26341, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 26341, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 23049, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26364, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 19293, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 31312, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 37937, 26399, 26410, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 26426, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26445, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 41698, 26466, 26486, 26508, 26520, 41701, 26470, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 38227, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 26543, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 23546, 23424, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 28554, 23546, 26577, 26583, 26599, 47449, 44239, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 26622, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 26638, 20392, 51127, 20418, 50802, 26654, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 27306, 23546, 23546, 23546, 26527, 26683, 26714, 28322, 26699, 26731, 50814, 50823, 26775, 26789, 26801, 26817, 26829, 26204, 26845, 23599, 23546, 25326, 21171, 35898, 34903, 26868, 26909, 26948, 33311, 26979, 26959, 26995, 27011, 45967, 27047, 27063, 27101, 27117, 34536, 27156, 23546, 23546, 44844, 41240, 34846, 23546, 42415, 27173, 27664, 23546, 42356, 28101, 47563, 47563, 47563, 27192, 27418, 22824, 22824, 42533, 43762, 22804, 22804, 22804, 27211, 27231, 36943, 23546, 44839, 40944, 23546, 27267, 27287, 46640, 23546, 27304, 35519, 43402, 27322, 27344, 47563, 47563, 27380, 27403, 27436, 31453, 22824, 33011, 27464, 27493, 27533, 27556, 22804, 38069, 35418, 30315, 27573, 26241, 27609, 23546, 44532, 27629, 39107, 50620, 23546, 45009, 27646, 31107, 27698, 47563, 27746, 27765, 23297, 27785, 27825, 36368, 22824, 27859, 48139, 23833, 27991, 44504, 49256, 22804, 43572, 23672, 27877, 42988, 25683, 23546, 27893, 27913, 46094, 23546, 21213, 44018, 47563, 30489, 32462, 27941, 34820, 22824, 45399, 49012, 28821, 27978, 22804, 22804, 28014, 28034, 49064, 28072, 35792, 28097, 51046, 28117, 50856, 22994, 28137, 47563, 41728, 28206, 28229, 22824, 41433, 28267, 28290, 22804, 34572, 28320, 28338, 23546, 23546, 39715, 47560, 28358, 45550, 23113, 28379, 35308, 33078, 28399, 36714, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 41649, 28419, 28455, 40472, 38341, 28471, 38828, 40452, 28791, 24756, 33030, 27540, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 28526, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 34078, 28545, 23546, 28652, 28658, 28674, 28690, 28701, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 26963, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22605, 35842, 45303, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 46230, 50621, 28718, 23546, 28717, 23546, 48975, 47563, 47563, 47563, 27769, 28735, 22823, 22824, 22824, 22824, 49361, 49439, 22804, 22804, 22804, 22804, 28781, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 18289, 23546, 23546, 44779, 49528, 23546, 36898, 47563, 47563, 47563, 40417, 28807, 22824, 22824, 22824, 50340, 31197, 28844, 22804, 22804, 22804, 28863, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 21205, 28900, 28924, 28940, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 28963, 23546, 23546, 26527, 23546, 28992, 23546, 29010, 36977, 29029, 29038, 29054, 29069, 29081, 29097, 29109, 26204, 23546, 23546, 33645, 49739, 23546, 28529, 23546, 23546, 31365, 23546, 23546, 23546, 35995, 23546, 29125, 31167, 22824, 29149, 40337, 48749, 32108, 23546, 29172, 23546, 44844, 29190, 42384, 23546, 31347</string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAA8=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="15" aka="AAAAAAAAAA8="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>, 50774, 29209, 23546, 25948, 29214, 29230, 29291, 47563, 47563, 29309, 29325, 22824, 22824, 45608, 49036, 29349, 22804, 22804, 39677, 36943, 30220, 23546, 23546, 47099, 23546, 22095, 50621, 37205, 27682, 23546, 23546, 48975, 28152, 40051, 47563, 29366, 37135, 45217, 46920, 46953, 36665, 22824, 49439, 49901, 29385, 29404, 34563, 22804, 29885, 40883, 26241, 23546, 23546, 47600, 23546, 23546, 29423, 23546, 29445, 23546, 48976, 47563, 47563, 47563, 44406, 47564, 22821, 22824, 22824, 49328, 42575, 22767, 35849, 22804, 22804, 39288, 28274, 50448, 23672, 29464, 23546, 23546, 23546, 29498, 42828, 23546, 23546, 47562, 47563, 47563, 46820, 29369, 22821, 22824, 22824, 37856, 22824, 28821, 22804, 22804, 30184, 22804, 29883, 33199, 23546, 23546, 29517, 23546, 47519, 29538, 47563, 46768, 47563, 41728, 22824, 49353, 22824, 41433, 22804, 41641, 22804, 27843, 29565, 23546, 23546, 23546, 29581, 33988, 49629, 29610, 50265, 49148, 29627, 30732, 37573, 29644, 31970, 23546, 23546, 28626, 22586, 47563, 47563, 29661, 22824, 47375, 22804, 22804, 29679, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 45087, 23089, 29701, 47077, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 27251, 29717, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 21570, 23546, 23546, 26527, 23546, 29745, 24166, 23546, 32508, 29764, 29773, 29789, 29803, 29812, 29828, 29839, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 34673, 34671, 23546, 38486, 38493, 29855, 28213, 35842, 29875, 43066, 27800, 23546, 40629, 29901, 44844, 23546, 29926, 30774, 23546, 23546, 41541, 20026, 29946, 29989, 29293, 38320, 30005, 40270, 30031, 42116, 30052, 30082, 30100, 49972, 39453, 30135, 41942, 39677, 36943, 23546, 23546, 23546, 42078, 23546, 30162, 50621, 23546, 23546, 23546, 39564, 48975, 47563, 47563, 47563, 48721, 37135, 22823, 22824, 22824, 22824, 42777, 49439, 22804, 22804, 22804, 22804, 30182, 30146, 30200, 30236, 23546, 23546, 23546, 30252, 30271, 50620, 23546, 23546, 45468, 23469, 31420, 34156, 47563, 47563, 45201, 30292, 30331, 30348, 22824, 22824, 30365, 29156, 29407, 22804, 22804, 22804, 30399, 23672, 23807, 23546, 23546, 23546, 23546, 45523, 28572, 23546, 33872, 47563, 47563, 30419, 29369, 30438, 22824, 22824, 48645, 22824, 31904, 22804, 22804, 50360, 22804, 30539, 33199, 49920, 23546, 30462, 23546, 50724, 48973, 36270, 47563, 30480, 41728, 35391, 22824, 30505, 41433, 50493, 22804, 30530, 30403, 47447, 49732, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23251, 23546, 22586, 47563, 47563, 30555, 22824, 36108, 22804, 22804, 30575, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 30597, 46609, 47561, 23111, 30673, 39296, 30622, 30648, 30668, 30689, 19013, 30707, 30727, 30748, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23547, 30771, 23546, 26527, 25156, 30790, 23546, 30813, 24321, 30837, 30846, 30862, 30876, 30888, 30904, 30915, 26204, 22703, 30931, 26561, 35799, 30978, 26921, 26341, 27925, 30994, 31013, 31032, 31061, 31045, 31097, 31131, 31147, 31183, 31227, 31261, 31277, 39237, 39476, 31293, 33748, 31328, 22212, 31363, 31381, 41158, 23546, 23546, 40033, 23546, 22587, 32449, 31405, 47817, 28510, 31441, 31475, 46890, 31498, 30304, 31538, 22625, 36744, 47681, 39677, 36943, 23698, 29973, 31554, 29930, 31590, 23708, 31634, 39997, 31661, 48812, 31689, 31711, 31727, 31763, 31798, 31814, 29245, 31850, 40093, 31890, 34721, 31940, 35662, 31956, 31986, 27076, 32035, 32066, 32093, 32133, 26241, 50755, 23546, 43683, 23546, 32169, 19239, 32192, 32249, 22951, 24750, 43255, 32274, 47563, 32292, 45560, 22821, 32317, 22824, 42593, 48588, 50230, 35849, 32356, 22804, 45665, 32384, 32405, 32421, 23807, 25150, 32478, 32497, 47176, 23546, 32524, 45835, 36145, 40407, 31425, 32550, 44054, 32586, 34739, 22824, 32631, 32657, 30066, 33080, 32683, 47042, 40501, 29883, 33199, 23546, 45717, 33237, 23546, 23546, 32701, 31115, 42955, 32563, 41728, 45894, 41614, 32608, 41433, 33712, 42499, 35727, 30403, 47447, 28590, 32719, 48060, 32755, 32790, 42232, 33671, 32806, 37745, 39609, 32837, 40736, 33730, 32892, 32931, 32953, 19435, 22586, 32974, 48106, 28046, 33009, 33027, 33047, 48381, 35461, 47447, 40617, 22585, 47563, 50257, 22824, 33074, 36473, 36549, 33096, 40786, 36807, 32667, 39296, 33119, 43227, 48451, 49953, 33140, 24763, 23318, 45645, 33156, 33172, 33217, 47559, 33030, 30691, 33266, 33282, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 33306, 23546, 26527, 33327, 33345, 25456, 24849, 33370, 33400, 23546, 33386, 33428, 33437, 33453, 33464, 26204, 23546, 23546, 33480, 35799, 23546, 23546, 23546, 23546, 27288, 23546, 23546, 34477, 23546, 34484, 31605, 33499, 33519, 43660, 33545, 33568, 27800, 23546, 33621, 23546, 44844, 33621, 23546, 23546, 30997, 23546, 33640, 34051, 23546, 22587, 33661, 47563, 47563, 47563, 33687, 22824, 22824, 22824, 43762, 33703, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 33746, 48975, 47563, 47563, 47563, 43863, 37135, 22823, 22824, 22824, 22824, 34733, 49439, 22804, 22804, 22804, 22804, 33764, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 20258, 23546, 48976, 47563, 47563, 46759, 47563, 47564, 22821, 22824, 22824, 37850, 22824, 22767, 35849, 22804, 22804, 33781, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 43159, 23546, 47562, 47563, 47563, 31773, 29369, 22821, 22824, 22824, 49239, 22824, 28821, 22804, 22804, 22804, 33801, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 33820, 23546, 23546, 22586, 44762, 47563, 23109, 33840, 22825, 34299, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 23335, 32233, 42307, 22729, 33859, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 32176, 23546, 23546, 41552, 33893, 33902, 33918, 33924, 33940, 33956, 33967, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 37894, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 28765, 41920, 23546, 23546, 44844, 23546, 23546, 23546, 39585, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 43177, 23546, 23546, 45738, 48975, 47563, 47563, 47563, 47563, 37135, 41960, 22824, 22824, 22824, 22824, 47410, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 20340, 23546, 23178, 20358, 23546, 23546, 20360, 33983, 47563, 47563, 34004, 47563, 47564, 22821, 22824, 36824, 22824, 22824, 22767, 35849, 22804, 33785, 22804, 22804, 29879, 34024, 23546, 23546, 23546, 34050, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 32147, 47539, 23546, 48973, 47563, 47563, 39206, 45209, 22824, 22824, 43898, 27834, 22804, 22804, 34943, 30403, 47447, 34067, 47158, 34094, 23546, 34121, 32984, 34141, 34177, 43533, 34196, 34244, 36447, 34263, 31970, 28608, 23546, 34315, 34336, 34355, 34372, 28875, 33605, 34412, 34436, 34454, 31964, 47447, 46606, 43054, 32993, 34501, 34521, 30673, 34552, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 43326, 34588, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 41690, 23546, 26286, 34628, 23546, 23546, 23546, 34692, 23546, 34693, 23546, 23546, 34656, 34689, 40521, 22887, 37164, 34396, 43815, 34709, 34755, 23546, 23546, 29501, 44844, 26383, 30255, 23546, 23546, 41921, 23546, 23546, 23546, 22587, 47563, 47563, 32276, 47563, 27418, 22824, 22824, 35655, 43762, 22804, 22804, 35850, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 34780, 43953, 48975, 47563, 47563, 47563, 47563, 29859, 22823, 22824, 22824, 22824, 22824, 30446, 22804, 22804, 22804, 22804, 22804, 34799, 33201, 23546, 34844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 42714, 48976, 34862, 47563, 47563, 47563, 47564, 34882, 22824, 22824, 22824, 22824, 22767, 30383, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 34898, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 49594, 27195, 22821, 22824, 22824, 22824, 49007, 30376, 22804, 22804, 22804, 28251, 29883, 33199, 23546, 23546, 45156, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 28617, 23546, 48860, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 48020, 34919, 46606, 50168, 47563, 35289, 22824, 34937, 22804, 34959, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 26217, 23546, 26527, 28994, 29429, 32937, 21397, 21407, 19607, 19616, 34984, 34999, 35011, 35027, 35038, 26204, 23546, 23546, 23546, 21159, 35548, 23546, 23546, 29013, 35054, 32876, 23546, 35263, 35074, 35112, 39498, 35166, 47961, 27448, 49402, 46199, 35202, 23546, 23546, 23546, 38910, 23546, 47123, 35227, 23546, 23546, 23546, 35244, 44990, 22587, 44754, 35279, 47563, 35324, 35372, 48187, 22824, 29333, 35407, 49176, 35434, 22804, 35477, 39677, 36943, 23546, 35515, 50019, 41319, 42187, 35535, 23546, 19253, 43384, 35575, 35592, 35612, 35186, 47563, 42920, 37391, 20600, 22823, 35386, 22824, 40181, 35635, 35678, 29350, 22804, 33765, 35713, 35750, 48433, 33201, 23546, 23546, 23546, 23546, 35766, 20349, 35815, 44388, 23546, 23546, 40380, 47253, 47563, 47563, 41209, 36250, 35833, 43893, 22824, 22824, 48653, 43541, 43789, 35866, 22804, 22804, 31917, 36853, 33195, 23546, 19730, 35885, 35914, 32534, 35930, 35957, 45488, 36011, 28363, 36030, 36050, 36074, 36103, 39870, 50408, 42260, 32597, 45635, 22804, 36124, 36169, 36204, 27085, 31863, 36220, 46659, 44955, 21826, 38142, 32958, 36266, 47872, 36286, 36321, 36366, 36384, 36409, 36435, 36471, 36489, 36514, 36540, 36572, 23546, 23546, 18340, 36595, 30632, 36619, 36640, 39370, 36661, 36681, 36702, 36740, 36760, 31970, 23546, 36781, 18841, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 34034, 46606, 22585, 31741, 36801, 36823, 36840, 38424, 36549, 46609, 36869, 23111, 30673, 39296, 36886, 35338, 36933, 36966, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 42313, 47646, 36993, 39426, 42307, 22729, 23448, 37021, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 39988, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 50028, 21708, 39996, 40225, 24990, 37071, 37082, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 31016, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 27420, 22824, 43762, 22804, 22804, 48012, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 25524, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 37098, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 37115, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 37134, 47563, 47563, 47563, 47564, 37151, 22824, 22824, 22824, 22824, 22767, 28828, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 41164, 23546, 26527, 23546, 34764, 23546, 19155, 37185, 37221, 37234, 37250, 37256, 37272, 37288, 37299, 26204, 23546, 37315, 23546, 35799, 23546, 43426, 26746, 23546, 23546, 37335, 23546, 32153, 42194, 37334, 37351, 37380, 37407, 37443, 40833, 37430, 32821, 37459, 23546, 23546, 34612, 23546, 23546, 40581, 34220, 23546, 41122, 29193, 49795, 34228, 47262, 37494, 29549, 41774, 37514, 42784, 22904, 45886, 37530, 38036, 37570, 36188, 37589, 23034, 37618, 28342, 23546, 23546, 23546, 23546, 50126, 23546, 23546, 23546, 23546, 23546, 48975, 28498, 44484, 47563, 28434, 44023, 37641, 37671, 39810, 30349, 22824, 39853, 47704, 29645, 22804, 49383, 22804, 37657, 33201, 23546, 23546, 50909, 37693, 23546, 32019, 38379, 23546, 23546, 23546, 48976, 47563, 47563, 46474, 32220, 37710, 22821, 22824, 22824, 49321, 37734, 37761, 35849, 22804, 22804, 37788, 37809, 29879, 33195, 23546, 37872, 23546, 23546, 37889, 23546, 23546, 23546, 47562, 27357, 47563, 47563, 27195, 22821, 40293, 22824, 22824, 22824, 30376, 34247, 22804, 22804, 22804, 29883, 33199, 37910, 31075, 23546, 37928, 47744, 48973, 37953, 47563, 47563, 37979, 38003, 22824, 22824, 38027, 38061, 22804, 22804, 38085, 47447, 23404, 23546, 28599, 23546, 47560, 31782, 47563, 23113, 38011, 22824, 33078, 33721, 22804, 31970, 23546, 21592, 23546, 22586, 47563, 50097, 23109, 22824, 40810, 22804, 22804, 38110, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 33290, 45056, 38132, 38158, 38179, 33552, 39426, 27505, 38215, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23648, 23546, 26527, 23546, 26305, 23546, 23546, 29594, 20530, 20539, 38250, 38264, 38273, 38289, 38300, 26364, 23546, 23948, 23546, 35799, 23546, 34320, 23546, 23546, 23546, 23948, 23546, 35554, 36579, 23947, 35559, 38316, 33588, 36393, 38336, 43066, 27800, 23546, 23546, 38357, 44844, 23546, 39344, 42555, 23546, 39071, 23546, 23546, 38375, 41192, 48530, 47563, 47812, 38395, 28750, 22824, 42121, 31482, 43762, 38449, 22804, 38419, 38440, 32050, 38473, 38509, 46688, 34783, 23546, 23546, 23546, 23546, 23546, 38530, 23546, 23546, 48975, 47883, 38550, 42949, 47563, 37135, 22823, 38568, 30084, 22824, 22824, 49439, 42031, 34293, 41837, 22804, 22804, 29885, 33201, 23546, 38929, 23546, 38602, 23546, 44369, 37873, 23791, 38621, 23546, 48976, 27031, 38642, 47563, 38659, 47564, 38683, 47916, 22824, 22824, 38702, 33843, 35849, 39277, 22804, 33804, 38724, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 36556, 23546, 23546, 23546, 23546, 47560, 38744, 47563, 30559, 22824, 22824, 46066, 22804, 22804, 31970, 23546, 23546, 49685, 22586, 47563, 47563, 23109, 47427, 22825, 22804, 35452, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 38761, 47561, 38782, 38802, 43621, 23464, 38824, 38844, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 38045, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23810, 23546, 46101, 23546, 29522, 38860, 33103, 38895, 38945, 38984, 38970, 38989, 38954, 39005, 39016, 26204, 23546, 24981, 39032, 39052, 39135, 26183, 26715, 27157, 23546, 39087, 39123, 35972, 23871, 39151, 32436, 39187, 39222, 39262, 39312, 39360, 27800, 27271, 23546, 23546, 40856, 29748, 35256, 26269, 47340, 39386, 28121, 33483, 41086, 39406, 48539, 39200, 45029, 47563, 29260, 30036, 22824, 47369, 43762, 41883, 39448, 22787, 22804, 32852, 39469, 27673, 33624, 23546, 39492, 23546, 23546, 30166, 23546, 19760, 23546, 25974, 48975, 39514, 47563, 47563, 47563, 37135, 37987, 39541, 30332, 22824, 22824, 49439, 34278, 22804, 48403, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 49277, 23546, 23546, 39561, 44662, 39580, 20000, 47563, 47563, 38745, 47563, 41583, 39601, 22824, 22824, 42751, 22824, 39625, 36344, 22804, 22804, 49650, 22804, 39663, 33195, 39390, 39701, 21803, 40964, 23546, 28563, 39737, 39764, 42864, 39780, 30015, 27711, 27195, 22821, 39796, 39832, 37838, 39869, 30376, 37543, 39886, 39910, 39936, 47724, 39958, 49087, 33227, 48840, 39980, 40013, 20680, 50204, 40049, 40067, 40083, 45419, 22824, 40109, 40125, 36765, 22804, 40151, 40167, 47447, 40217, 23546, 23546, 19121, 40241, 48114, 40263, 48445, 44596, 40286, 40309, 42808, 40330, 30581, 40353, 23546, 23546, 40374, 28485, 40396, 27517, 40433, 40468, 40722, 40488, 31964, 30114, 48477, 40517, 36058, 24761, 45115, 30673, 40537, 36549, 40555, 19020, 29663, 30673, 40603, 40652, 40668, 40708, 40752, 40779, 40802, 40826, 40849, 24756, 33030, 33551, 47559, 33030, 33552, 40872, 40899, 22729, 23448, 40923, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 40939, 26527, 23546, 35150, 40960, 23546, 26932, 40980, 40989, 41005, 41019, 41028, 41044, 41055, 26204, 41071, 27176, 35142, 41110, 22748, 41145, 23546, 41180, 29961, 41225, 35127, 41274, 41299, 41335, 41350, 41366, 41401, 41487, 41458, 41474, 41503, 23546, 18442, 27630, 46235, 23546, 41314, 19147, 41528, 40358, 23546, 23546, 45375, 22587, 47563, 36909, 41568, 47891, 27418, 38686, 27953, 41607, 41630, 22804, 23213, 41665, 46983, 39677, 36943, 23546, 45937, 23546, 37118, 23546, 39337, 41681, 33824, 35058, 38605, 23546, 41717, 41752, 28167, 41769, 47563, 43475, 41790, 42050, 41800, 22824, 22824, 41816, 41853, 50302, 41874, 22804, 49204, 29885, 47656, 41907, 23546, 38879, 36785, 23546, 23546, 23546, 23546, 23546, 39036, 48976, 47563, 46791, 34008, 47563, 47564, 22821, 22824, 44589, 46895, 22824, 22767, 35849, 22804, 41937, 38457, 22804, 29879, 33195, 23546, 23546, 49550, 23546, 45766, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 32301, 41958, 22824, 22824, 22824, 46046, 28243, 22804, 22804, 22804, 22804, 41977, 33199, 20951, 42005, 23546, 23546, 23546, 44350, 47563, 31827, 47563, 41591, 22824, 49433, 22824, 28884, 22804, 42026, 22804, 30403, 31211, 23546, 23546, 23546, 23546, 27328, 40247, 47563, 27241, 38708, 22824, 42285, 31924, 22804, 29685, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 22739, 46606, 49667, 46712, 38403, 42047, 44103, 22804, 44463, 42066, 42221, 42103, 42137, 42175, 42210, 42248, 42276, 42301, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 35697, 39426, 36136, 22729, 23448, 42329, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 26377, 26527, 23546, 23546, 42378, 33354, 42400, 20758, 23546, 26429, 42436, 42448, 42464, 42475, 26204, 23546, 23546, 25120, 35799, 23546, 23546, 23546, 31573, 31305, 23546, 23546, 31567, 25118, 23546, 48973, 37963, 23115, 42491, 47011, 42515, 27800, 23546, 42549, 23546, 44844, 23546, 38766, 18352, 23546, 39064, 23546, 23546, 22159, 22587, 48548, 38163, 45793, 48521, 47316, 42571, 42591, 47404, 42609, 44147, 39942, 22845, 35499, 47057, 42343, 42636, 23546, 42657, 23546, 42010, 42641, 26759, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 36917, 47563, 37135, 22823, 22824, 22824, 42693, 22824, 49439, 22804, 22804, 28847, 22804, 22804, 29885, 45066, 44270, 23546, 42713, 23546, 23546, 26553, 42677, 42730, 31574, 23546, 48976, 47563, 48931, 47563, 47563, 47564, 42748, 22824, 42767, 22824, 22824, 34180, 35849, 22804, 42800, 22804, 22804, 29879, 33195, 23546, 44983, 23546, 23546, 23546, 23546, 42824, 23546, 47562, 47563, 36034, 47563, 27749, 22821, 22824, 22824, 42844, 22824, 48373, 22804, 22804, 38192, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 18259, 23546, 23546, 42862, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 39325, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 48281, 42880, 42913, 28181, 33529, 39296, 42936, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 38514, 23546, 23546, 23546, 44073, 44076, 50916, 44069, 36233, 42971, 33598, 40201, 40539, 43066, 29275, 42987, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 43004, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 43023, 22824, 22824, 22824, 22824, 43497, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 30422, 47563, 23109, 38579, 22825, 32685, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 22195, 38234, 23546, 23546, 22088, 23546, 31645, 43040, 31695, 43090, 43103, 43112, 43128, 43139, 26204, 23546, 31341, 32732, 35799, 43366, 43155, 43175, 36087, 40692, 50768, 31673, 43193, 32904, 31522, 31081, 43243, 43271, 43287, 43315, 43342, 40683, 23546, 23546, 23546, 45381, 43358, 40568, 43382, 43400, 43418, 23546, 23546, 30119, 43208, 47563, 43442, 27364, 43462, 43491, 28908, 22824, 43513, 43557, 22804, 43588, 41858, 43607, 43637, 43676, 23546, 23546, 23546, 18266, 35576, 23546, 23546, 43699, 43717, 43736, 20331, 32703, 47563, 41378, 47563, 46720, 41989, 43754, 29628, 22824, 22824, 43651, 43778, 43812, 46171, 22804, 44212, 43831, 43879, 33201, 23546, 23546, 45346, 23546, 43914, 43941, 23546, 27809, 23863, 43976, 44003, 47563, 48620, 44039, 35181, 49990, 44092, 22824, 45449, 39545, 44119, 42697, 44138, 22804, 44163, 27998, 44211, 35734, 33195, 39171, 23546, 23546, 23067, 44228, 32012, 23546, 44255, 36870, 46433, 23003, 47563, 27195, 22821, 44297, 46134, 22824, 22824, 30376, 39647, 22804, 44322, 22804, 41442, 44340, 23546, 44366, 44385, 23546, 23546, 34339, 44404, 47563, 47563, 44422, 22824, 22824, 22824, 44438, 22804, 22804, 22804, 44454, 47447, 48298, 23546, 23546, 23546, 44479, 47563, 47563, 46130, 22824, 22824, 44500, 22804, 22804, 44520, 23546, 40027, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 38094, 49704, 44555, 44579, 44612, 44650, 23464, 24759, 33031, 33550, 44685, 30652, 34420, 36724, 24756, 33030, 33551, 47559, 33030, 45310, 44716, 44744, 32641, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 25786, 26527, 44778, 28976, 18999, 44795, 44824, 44860, 44808, 44885, 44899, 44911, 44927, 44938, 26204, 44954, 40587, 23546, 44971, 23546, 23546, 43960, 23546, 50132, 23546, 45006, 35089, 26325, 35096, 32207, 45025, 45045, 44306, 45082, 45103, 27800, 35987, 37200, 44669, 44844, 34640, 23546, 23546, 23546, 23546, 45137, 45172, 23546, 19324, 45188, 43446, 47563, 47563, 45233, 45249, 45268, 22824, 43762, 45291, 40314, 22804, 22804, 39677, 36943, 37912, 23546, 23546, 45326, 45362, 23546, 23546, 23546, 23546, 23546, 37055, 48975, 48512, 31834, 47563, 47563, 46028, 22823, 45397, 45415, 22824, 22824, 36333, 38728, 44324, 22804, 22804, 22804, 45435, 33201, 23546, 23546, 26251, 43720, 23546, 45465, 26758, 45484, 45504, 23546, 45539, 47563, 47563, 47285, 43856, 45576, 45600, 22824, 22824, 47994, 48169, 45624, 45661, 22804, 22804, 42152, 45681, 29879, 45697, 45713, 45733, 23546, 25942, 23546, 23546, 30214, 45754, 47562, 47563, 27730, 45789, 27195, 22821, 22824, 47619, 47969, 22824, 30376, 22804, 22804, 45809, 22804, 29883, 33199, 23546, 21039, 23546, 49467, 37049, 48973, 47563, 45851, 48716, 45584, 47934, 22824, 45868, 48003, 35869, 22804, 45910, 30403, 47447, 23546, 48332, 18869, 22345, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 32000, 21288, 23546, 45931, 45953, 47563, 37498, 23109, 22824, 40444, 22804, 34438, 36455, 45997, 44634, 19558, 46021, 50382, 46044, 28056, 22804, 34468, 46609, 35619, 30711, 46062, 46082, 23464, 24759, 33031, 33550, 19538, 36296, 49945, 23141, 46117, 38586, 45823, 48503, 46150, 46187, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23737, 26527, 23546, 23546, 34968, 23546, 46215, 26881, 26893, 46251, 46267, 46279, 46295, 46306, 26204, 46322, 23241, 25565, 35799, 25341, 42889, 46340, 22204, 44869, 46352, 46368, 46377, 46393, 46349, 46420, 46455, 46490, 46547, 46518, 46534, 32867, 46005, 19766, 34600, 44844, 46563, 23546, 26188, 46580, 41258, 46596, 46625, 46675, 46736, 46784, 46807, 46842, 38552, 46877, 45877, 46911, 46944, 36419, 46977, 46999, 47027, 27557, 39677, 37035, 47093, 47115, 35228, 23546, 47139, 47174, 23546, 47766, 23546, 49770, 47192, 20591, 47219, 47244, 47278, 38643, 47301, 41736, 47356, 47391, 47426, 31459, 49439, 36524, 39920, 40135, 22804, 35492, 33058, 47443, 23546, 20251, 43007, 37694, 47465, 46324, 47491, 47518, 23546, 47535, 47555, 39525, 47841, 47563, 34125, 47580, 47616, 47635, 39844, 22824, 37169, 48362, 35849, 47672, 47697, 22804, 41891, 47720, 33195, 23058, 47740, 23546, 45516, 47760, 23546, 47782, 18627, 47798, 50186, 47833, 47857, 27195, 47907, 47932, 47950, 47985, 48036, 39636, 46165, 37602, 50472, 50517, 37554, 27477, 48056, 18311, 23546, 35780, 48076, 48095, 44700, 47563, 47563, 48130, 48155, 37677, 22824, 48203, 48236, 49183, 22804, 48272, 47447, 18372, 48297, 48314, 48330, 41202, 45981, 33877, 34811, 48348, 48040, 48397, 48419, 37793, 31970, 48467, 23546, 23546, 48493, 46466, 31618, 34505, 49612, 47069, 35443, 43299, 48564, 28304, 47475, 19993, 48611, 37364, 48636, 48669, 43591, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 44177, 29729, 48685, 36498, 48701, 45275, 48737, 39426, 42307, 22729, 39685, 48765, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 48828, 23546, 23546, 48856, 23546, 35941, 30944, 30953, 48876, 30953, 30962, 48892, 48903, 26204, 23546, 23546, 23546, 40636, 23546, 26348, 23546, 23546, 23546, 23546, 26345, 23546, 38923, 23546, 48973, 48919, 48178, 48947, 38808, 37005, 31513, 38873, 23546, 23546, 44844, 23546, 23546, 27897, 48963, 23546, 23546, 23546, 23546, 48971, 46750, 47563, 47563, 34356, 48992, 22824, 22824, 22824, 36305, 49028, 22804, 22804, 22804, 49052, 44728, 49080, 23546, 49103, 45341, 23546, 23546, 42732, 48802, 47595, 38359, 35596, 48975, 47563, 49130, 41385, 43221, 47228, 22823, 48595, 46928, 41415, 49146, 49164, 22804, 49199, 49220, 45915, 29388, 37824, 33201, 23546, 25346, 23546, 26261, 23546, 23546, 23546, 49474, 23546, 23546, 48976, 33503, 47563, 47563, 47563, 47564, 49236, 37414, 22824, 22824, 22824, 22767, 49255, 36180, 22804, 22804, 22804, 29879, 33195, 49272, 23546, 49293, 23546, 23546, 23546, 23546, 28581, 36243, 47563, 47563, 47563, 27195, 49311, 22824, 22824, 22824, 22824, 37772, 22804, 22804, 22804, 22804, 29883, 46502, 23546, 23546, 50321, 46564, 23546, 30276, 23289, 47563, 47563, 37718, 49344, 22824, 22824, 30514, 49377, 22804, 22804, 42620, 47447, 39101, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 46439, 24761, 43524, 30673, 49399, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 49418, 45121, 44624, 47559, 33030, 33552, 39426, 32368, 49455, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 49490, 49547, 33412, 49525, 23546, 34105, 23546, 33409, 49544, 42420, 41283, 49566, 49577, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 49593, 35299, 27962, 22805, 43066, 27800, 23546, 33329, 27613, 44844, 23546, 23546, 23546, 23546, 23546, 32481, 23546, 23546, 22587, 32570, 47563, 46861, 47563, 27418, 49610, 22824, 32331, 43762, 42159, 22804, 27215, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 37318, 23546, 23546, 23546, 20322, 23546, 48975, 47563, 47563, 49628, 47563, 37135, 22823, 22824, 32615, 22824, 22824, 49439, 22804, 22804, 49645, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 49666, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 49683, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 49701, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 49720, 23546, 50953, 23546, 25809, 49755, 49786, 23546, 49811, 49825, 49837, 49853, 49864, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 27387, 22824, 49893, 38199, 49880, 34211, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 42672, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 49917, 23546, 23546, 23546, 22167, 47563, 47563, 47563, 47563, 47564, 49936, 22824, 22824, 22824, 22824, 22767, 49969, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 45149, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 49988, 47563, 50006, 22821, 22824, 48578, 22824, 41424, 30376, 22804, 39894, 22804, 32389, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26445, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 41512, 50052, 50063, 26204, 23546, 23546, 23546, 35799, 50079, 30464, 23546, 23546, 23546, 23546, 32774, 23546, 41129, 32770, 46701, 50096, 40191, 28190, 22805, 43066, 27800, 23546, 23546, 23546, 50113, 28719, 34485, 45773, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 29611, 47563, 27026, 27418, 22824, 35645, 28383, 43762, 22804, 22921, 22804, 48250, 39677, 50148, 50164, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 41250, 23546, 23546, 23546, 48976, 47563, 47563, 50184, 47563, 45852, 22821, 22824, 38786, 22824, 22824, 45252, 35849, 22804, 48256, 22804, 22804, 29879, 33195, 48079, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 50202, 47563, 47563, 27195, 22821, 50220, 22824, 22824, 22824, 30376, 48220, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 21798, 23546, 23546, 35799, 23546, 23546, 46652, 23546, 23546, 23546, 23546, 46656, 23546, 23546, 50246, 28439, 22824, 50294, 36350, 50281, 47331, 23546, 29448, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 35817, 22587, 47563, 47563, 47563, 27723, 27418, 22824, 22824, 27861, 43762, 22804, 22804, 22804, 48212, 39677, 36943, 23546, 50318, 23546, 23546, 23546, 23546, 23546, 23546, 37099, 23546, 23546, 48975, 38667, 47563, 36014, 47563, 37135, 22823, 50337, 22824, 46961, 22824, 49439, 28018, 22804, 22804, 50356, 22804, 29885, 33201, 23546, 43738, 23546, 23546, 23546, 23546, 23546, 38534, 23546, 23546, 48976, 47563, 50376, 47563, 47563, 47564, 50398, 41961, 50424, 22824, 22824, 22767, 50443, 28403, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 21488, 23546, 47562, 47563, 31747, 47563, 34161, 22821, 22824, 43024, 22824, 22824, 50464, 22804, 22804, 50488, 22804, 43844, 33199, 23546, 23546, 18921, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 31241, 23546, 23546, 39165, 23546, 29133, 47563, 47563, 33578, 22824, 22824, 50509, 22804, 22804, 31970, 23546, 49295, 23546, 22586, 47563, 31161, 23109, 50427, 22825, 22804, 41830, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 21483, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 46404, 21767, 21765, 32117, 22038, 50563, 21058, 21061, 50533, 22036, 50551, 50579, 50591, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 50607, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50637, 19916, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50655, 18544, 18567, 18590, 19934, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 22150, 23546, 21369, 20766, 50679, 50692, 50708, 50717, 49509, 50740, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23761, 23546, 23546, 23758, 25629, 19208, 50639, 19926, 50639, 50790, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 42087, 23546, 23546, 23546, 23546, 22568, 29910, 50839, 50872, 50878, 50849, 23148, 50894, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 50932, 23546, 23546, 22686, 23546, 23546, 23546, 22682, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50969, 18544, 18567, 18590, 21689, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 23546, 23489, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22457, 23546, 23546, 22482, 50993, 50998, 50998, 51019, 22480, 51014, 51035, 23546, 23546, 23546, 23546, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 51062, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50655, 18544, 18567, 18590, 19934, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 51082, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 51098, 20392, 51127, 20418, 50802, 51114, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 94503, 94503, 90406, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 1, 12290, 3, 0, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 362, 94503, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 0, 94503, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 69632, 73728, 94503, 94503, 94503, 94503, 94503, 65536, 94503, 0, 2183168, 0, 0, 0, 90406, 94503, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 2985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1631, 0, 0, 0, 0, 0, 1637, 0, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2904064, 2908160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 0, 2997, 0, 0, 0, 0, 3001, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 1191, 0, 0, 0, 0, 1107, 0, 0, 0, 2138112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2978, 0, 0, 0, 2424832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625536, 0, 0, 0, 0, 0, 172032, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 1, 12290, 3, 0, 2699264, 2715648, 0, 0, 2772992, 2805760, 2830336, 0, 2863104, 2920448, 0, 0, 0, 0, 0, 0, 0, 1114, 0, 0, 0, 0, 1118, 0, 0, 1121, 0, 2805760, 2920448, 0, 0, 0, 0, 0, 2920448, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 2179072, 2179072, 2179072, 2424832, 2433024, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2625536, 2805760, 2179072, 2830336, 2179072, 2179072, 2863104, 2179072, 2179072, 2179072, 2920448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2801664, 2813952, 2179072, 2838528, 2179072, 2179072, 2179072, 2179072, 2179072, 0, 914, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2805760, 2125824, 2830336, 2125824, 2125824, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2125824, 2457600, 2125824, 2125824, 2125824, 2125824, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2375680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 2408448, 0, 0, 2584576, 0, 0, 0, 0, 2838528, 0, 0, 2838528, 0, 0, 0, 0, 0, 2469888, 2506752, 2756608, 0, 0, 2580480, 0, 0, 0, 2396160, 2400256, 2412544, 0, 0, 2838528, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2408448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 914, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2502656, 0, 0, 3010560, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3125248, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2461696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2600960, 0, 2674688, 0, 2768896, 2777088, 2781184, 0, 2822144, 0, 0, 2883584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3055616, 0, 0, 0, 3080192, 3100672, 3104768, 0, 0, 0, 0, 3186688, 0, 0, 0, 0, 0, 0, 0, 3182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3003, 3004, 0, 2719744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3014656, 3207168, 0, 2691072, 0, 0, 0, 0, 0, 2818048, 2846720, 0, 2916352, 0, 0, 3002368, 0, 0, 3022848, 0, 0, 0, 0, 0, 2871296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2766, 0, 0, 0, 0, 0, 3215360, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2494464, 2179072, 2179072, 2514944, 2179072, 2179072, 2461696, 2465792, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2523136, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2699264, 2179072, 2715648, 2179072, 2723840, 2179072, 2732032, 2772992, 2179072, 2179072, 3100672, 2179072, 2179072, 3133440, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 391, 392, 0, 393, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 3504, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3399, 540, 540, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2461696, 2465792, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2523136, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2600960, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2641920, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2719744, 2125824, 2125824, 2125824, 2125824, 2125824, 2768896, 2777088, 2768896, 2777088, 2125824, 2797568, 2822144, 2125824, 2125824, 2125824, 2883584, 2125824, 2912256, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3133440, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 0, 0, 0, 0, 0, 0, 3011, 0, 0, 0, 0, 0, 0, 3018, 0, 0, 0, 0, 2605056, 0, 0, 0, 0, 2887680, 0, 2924544, 0, 0, 0, 0, 0, 0, 0, 1135, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162112, 3170304, 0, 0, 3219456, 3035136, 0, 0, 0, 0, 0, 3072000, 2650112, 2179072, 2179072, 2179072, 2707456, 2179072, 2736128, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2887680, 2179072, 2179072, 2543616, 2547712, 2179072, 2179072, 2596864, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2584576, 0, 0, 2809856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3088384, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 2112, 0, 0, 0, 0, 0, 1680, 1681, 0, 1683, 0, 0, 0, 0, 0, 0, 0, 540, 561, 540, 561, 540, 540, 561, 540, 585, 0, 0, 2576384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2420736, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 3121152, 3141632, 0, 0, 0, 2924544, 0, 2682880, 0, 0, 0, 0, 0, 0, 0, 1242, 1272, 1273, 0, 1242, 0, 540, 540, 540, 3112960, 2387968, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2453504, 2179072, 2473984, 2482176, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2126737, 2126737, 2503569, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2532241, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2605969, 2126737, 2924544, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3035136, 2179072, 2179072, 3072000, 2179072, 2179072, 2179072, 3137536, 2126737, 2126737, 2499473, 2126737, 2126737, 2126737, 2556817, 2565009, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3224465, 0, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 2446298, 2126810, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 0, 0, 0, 0, 0, 0, 3181, 0, 0, 0, 3184, 3185, 3186, 0, 0, 3189, 3194880, 2125824, 0, 0, 0, 0, 0, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2605056, 2125824, 2629632, 2125824, 2125824, 2650112, 2125824, 2125824, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 2125824, 2125824, 3072000, 2125824, 2125824, 3121152, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2125824, 2125824, 3190784, 2125824, 3170304, 2125824, 2125824, 3190784, 3194880, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3507, 540, 540, 540, 540, 540, 540, 0, 3145728, 0, 3203072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3314, 0, 540, 0, 3067904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 2895872, 0, 0, 0, 2445312, 0, 2842624, 0, 0, 0, 2637824, 0, 0, 0, 0, 432, 0, 0, 0, 329, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 0, 0, 0, 2621440, 0, 3182592, 2899968, 0, 2961408, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2445312, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2551808, 2179072, 2179072, 2179072, 2179072, 2179072, 3117056, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2126737, 2637824, 2125824, 2125824, 2125824, 2125824, 2727936, 2752512, 2125824, 2125824, 2125824, 2125824, 2842624, 2846720, 2125824, 2895872, 2916352, 2125824, 2125824, 2945024, 2125824, 2125824, 2994176, 2125824, 3002368, 2125824, 2125824, 3022848, 2125824, 3067904, 3084288, 3096576, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2442, 2443, 0, 0, 2446, 0, 0, 0, 0, 0, 2928640, 0, 0, 0, 3059712, 0, 2543616, 2666496, 0, 2633728, 0, 0, 0, 0, 0, 1697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 2494464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3211264, 2179072, 2928640, 2179072, 2179072, 2179072, 2998272, 2179072, 2179072, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 0, 0, 2126737, 2126737, 2126737, 2126737, 2126737, 2446225, 2126737, 2179072, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 0, 2125824, 2543616, 2547712, 2125824, 2125824, 2596864, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2928640, 2125824, 2125824, 2125824, 2998272, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2126811, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2424832, 2125824, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 3178496, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2441216, 0, 0, 0, 0, 0, 0, 3311, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2165, 540, 540, 540, 540, 0, 0, 0, 2740224, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 0, 0, 1244, 0, 0, 0, 0, 1247, 0, 1194, 0, 2646016, 2179072, 2179072, 2695168, 2756608, 2179072, 2179072, 2179072, 2932736, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3039232, 2179072, 3063808, 2179072, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2396160, 2400256, 2125824, 2125824, 2441216, 2125824, 2469888, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2613248, 2646016, 2125824, 2125824, 2695168, 2756608, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2396160, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2125824, 2506752, 2506752, 2506752, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 987, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3176, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 3158016, 2437120, 0, 2785280, 0, 0, 0, 2428928, 0, 3018752, 2764800, 2572288, 0, 0, 3051520, 2179072, 2179072, 2637824, 2179072, 2179072, 2179072, 2179072, 2727936, 2752512, 2179072, 2179072, 2179072, 2842624, 2846720, 2179072, 2916352, 2428928, 2437120, 2179072, 2486272, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2654208, 2678784, 2760704, 2764800, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 2043, 2044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2140, 0, 0, 0, 0, 0, 0, 2125824, 3018752, 2125824, 2125824, 2125824, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 24576, 987, 2125824, 2125824, 2125824, 2125824, 2424832, 2125824, 3149824, 2125824, 2179072, 3051520, 2125824, 3051520, 2125824, 3051520, 0, 2490368, 2498</string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAABA=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="16" aka="AAAAAAAAABA="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>560, 0, 0, 0, 0, 0, 0, 304, 0, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 1713, 0, 0, 0, 0, 0, 0, 0, 0, 1727, 0, 0, 0, 0, 0, 0, 0, 0, 2068, 0, 0, 0, 0, 0, 0, 0, 0, 2095, 0, 0, 0, 0, 0, 0, 0, 0, 2107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2875392, 0, 0, 0, 3176, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 2125824, 2179072, 2416640, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 3108864, 3198976, 0, 0, 2748416, 2879488, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 296, 0, 0, 0, 296, 0, 297, 0, 0, 0, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 2592768, 0, 0, 0, 0, 433, 0, 0, 0, 453, 469, 469, 469, 469, 469, 469, 469, 469, 469, 479, 469, 469, 469, 469, 469, 469, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1918, 2125824, 2125824, 2125824, 2408448, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2449408, 0, 2535424, 3031040, 0, 0, 0, 0, 0, 1734, 0, 1736, 1710, 540, 540, 540, 540, 540, 540, 540, 540, 1816, 1818, 540, 540, 540, 540, 540, 1360, 0, 2859008, 0, 0, 2179072, 2449408, 2179072, 2535424, 2179072, 2609152, 2179072, 2859008, 2179072, 2179072, 2179072, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2527232, 0, 0, 0, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2804, 540, 540, 540, 540, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2527232, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2527232, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 1080, 1084, 0, 0, 1088, 2125824, 2125824, 2125824, 2125824, 3092480, 0, 0, 0, 0, 3026944, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2539520, 0, 2949120, 0, 0, 0, 0, 434, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 457, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 2179072, 2658304, 2973696, 2179072, 2125824, 2658304, 2973696, 2125824, 2125824, 2658304, 2973696, 2125824, 2711552, 0, 2560000, 2179072, 2179072, 2945024, 2179072, 2179072, 2994176, 2179072, 3002368, 2179072, 2179072, 3022848, 2179072, 3067904, 3084288, 3096576, 2179072, 2179072, 2600960, 2179072, 2179072, 2179072, 2179072, 2641920, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2719744, 2179072, 2179072, 2441216, 2179072, 2469888, 2179072, 2179072, 2179072, 2519040, 2179072, 2179072, 2179072, 2179072, 2588672, 2179072, 2613248, 2703360, 0, 0, 0, 0, 2977792, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 2560000, 2125824, 2560000, 2125824, 0, 2179072, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 2125824, 2457600, 2179072, 2179072, 2179072, 2179072, 2457600, 2125824, 2125824, 2125824, 2985984, 2985984, 2985984, 2985984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 458, 458, 111050, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 458, 111050, 111050, 111050, 111050, 111050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2738, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 184723, 184931, 184931, 184931, 0, 184931, 184931, 184931, 184931, 184931, 0, 0, 0, 0, 0, 184931, 0, 184931, 1, 12290, 3, 78112, 1059, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 296, 0, 297, 0, 2125824, 1059, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2750, 0, 0, 0, 0, 2755, 0, 300, 118784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 300, 300, 300, 300, 0, 0, 0, 0, 0, 300, 0, 300, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 33403, 297, 0, 2134016, 49791, 301, 0, 0, 0, 0, 0, 0, 225889, 225889, 225889, 225889, 225740, 225889, 225889, 225889, 225889, 225889, 225740, 225740, 225740, 225740, 225740, 225906, 225740, 225906, 1, 12290, 3, 0, 0, 0, 0, 249856, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 697, 698, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 296, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 57344, 0, 0, 0, 0, 0, 0, 0, 3506, 0, 540, 540, 540, 540, 540, 540, 540, 2530, 540, 540, 540, 540, 540, 540, 540, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 296, 0, 0, 0, 300, 0, 0, 0, 300, 119195, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3166, 3167, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 0, 0, 0, 0, 0, 122880, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 0, 122880, 0, 2105629, 12290, 3, 0, 0, 291, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 69632, 73728, 0, 416, 416, 0, 0, 65536, 416, 1092, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765, 0, 0, 0, 0, 0, 1824, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2551808, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 131072, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2507, 0, 0, 0, 0, 0, 131072, 0, 0, 131072, 131072, 0, 0, 0, 0, 0, 0, 131072, 0, 131072, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 131072, 131072, 131072, 131072, 0, 131072, 131072, 131072, 131072, 131072, 0, 0, 0, 0, 0, 131072, 0, 131072, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 135168, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 321, 0, 0, 0, 135168, 0, 0, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3174, 0, 0, 0, 0, 0, 0, 0, 135168, 135168, 135168, 135168, 135168, 135168, 135168, 0, 135168, 135168, 135168, 135168, 135168, 0, 0, 0, 0, 0, 135168, 0, 135168, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118784, 296, 0, 2183168, 0, 0, 0, 0, 0, 636, 637, 0, 2134016, 640, 641, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 1361, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 986, 2125824, 2125824, 2125824, 2125824, 2424832, 0, 301, 139264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 331, 301, 301, 301, 301, 0, 0, 0, 0, 0, 301, 0, 301, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 297, 0, 2183168, 0, 0, 0, 0, 0, 296, 33406, 0, 2134016, 300, 49794, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61440, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455, 0, 0, 0, 0, 0, 301, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2779, 0, 0, 0, 0, 0, 298, 298, 143728, 298, 298, 298, 143728, 69632, 73728, 298, 298, 143658, 298, 298, 65536, 298, 298, 0, 0, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 363, 298, 0, 143658, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 298, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 298, 298, 298, 143658, 368, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143658, 298, 298, 143658, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 298, 0, 298, 0, 298, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143658, 298, 143658, 143658, 143658, 143658, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143728, 298, 298, 298, 298, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143728, 143658, 143728, 143728, 143728, 143728, 143728, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 90406, 90406, 90406, 90406, 0, 94503, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 2200252, 2200252, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1663, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 0, 12290, 3, 0, 0, 2183168, 126976, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 1146880, 0, 1146880, 0, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, 0, 0, 540, 2163, 540, 540, 540, 540, 540, 540, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 345, 346, 347, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 25160, 0, 0, 159744, 0, 0, 0, 0, 25160, 25160, 25160, 159744, 25160, 25160, 25160, 25160, 25160, 159744, 159744, 159744, 159744, 25160, 159744, 25160, 1, 12290, 3, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 1, 12290, 3, 0, 167936, 167936, 167936, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3015, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 0, 0, 172032, 172032, 0, 172032, 0, 0, 172032, 0, 172032, 0, 172032, 0, 0, 0, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 1, 12290, 3, 0, 172032, 0, 172032, 172032, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 0, 0, 0, 0, 1, 286, 3, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 106496, 0, 0, 0, 0, 106496, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 1, 0, 3, 78112, 176128, 176128, 176128, 0, 0, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111050, 0, 0, 0, 0, 0, 78112, 290, 0, 634, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 1159168, 414, 414, 0, 0, 0, 0, 0, 414, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 0, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 959, 561, 585, 585, 585, 1490, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1498, 585, 585, 0, 0, 229376, 0, 0, 0, 0, 0, 0, 0, 0, 1686, 0, 0, 0, 0, 0, 0, 404, 404, 404, 404, 0, 404, 404, 404, 404, 404, 0, 0, 0, 0, 0, 404, 0, 404, 1, 12290, 3, 78112, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155072, 0, 0, 0, 0, 0, 0, 0, 2131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 561, 561, 561, 561, 561, 561, 2250, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 3295, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 716, 0, 0, 719, 0, 561, 561, 2287, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 585, 585, 585, 2347, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1514, 585, 585, 2372, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 2671, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1515, 585, 585, 0, 0, 0, 2994, 0, 0, 0, 2998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 540, 3035, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 910, 540, 3075, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1417, 3116, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1501, 0, 0, 3178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3187, 0, 0, 0, 0, 0, 2046, 0, 2149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 1, 12290, 3, 0, 540, 540, 540, 3203, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3211, 540, 540, 540, 540, 540, 2813, 540, 540, 2817, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2555, 540, 540, 540, 540, 540, 540, 3255, 585, 585, 585, 3258, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3266, 585, 561, 0, 1287, 585, 1467, 1376, 540, 540, 1339, 540, 540, 561, 561, 1430, 561, 0, 585, 585, 585, 585, 585, 288, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2427, 0, 0, 0, 0, 0, 0, 0, 0, 2465, 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, 0, 3309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3508, 540, 3509, 540, 540, 540, 3326, 3327, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 961, 561, 585, 585, 585, 3361, 585, 585, 585, 585, 3362, 3363, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 3387, 0, 0, 0, 0, 0, 2092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 561, 3416, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3425, 585, 585, 585, 585, 585, 585, 1492, 585, 585, 585, 585, 585, 585, 585, 1499, 585, 585, 585, 585, 3431, 585, 585, 585, 585, 3435, 540, 561, 585, 0, 0, 0, 0, 0, 0, 665, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 3172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 3450, 540, 540, 540, 540, 540, 2814, 540, 2816, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2233, 540, 540, 540, 540, 540, 0, 561, 561, 561, 3573, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3538, 585, 585, 3585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 3627, 561, 561, 585, 585, 0, 540, 561, 585, 0, 540, 561, 585, 0, 540, 561, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2662400, 0, 2813952, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2134756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 3, 0, 0, 0, 188416, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 540, 540, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 2169, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 3, 78112, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 192971, 0, 1, 12290, 3, 0, 192971, 192971, 192971, 0, 0, 192971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 192971, 192971, 192971, 192971, 192971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2801664, 0, 0, 0, 0, 2142208, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 299, 300, 301, 0, 0, 0, 0, 0, 0, 2797568, 0, 0, 0, 0, 0, 0, 0, 2850816, 2867200, 0, 0, 740, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 740, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 2029, 0, 2031, 0, 0, 0, 0, 740, 1184, 0, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 1583, 0, 1585, 0, 0, 0, 0, 0, 0, 0, 1661, 1662, 0, 0, 0, 0, 0, 0, 0, 0, 2727936, 0, 0, 0, 3084288, 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 352, 353, 354, 0, 0, 0, 1188, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1150976, 0, 0, 0, 0, 0, 0, 561, 561, 585, 585, 585, 585, 1559, 2029, 0, 0, 0, 0, 1565, 2031, 0, 0, 0, 0, 0, 2120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2130, 2033, 0, 2035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 337, 338, 561, 561, 2323, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2339, 585, 585, 2342, 0, 304, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 2136, 0, 2138, 0, 0, 0, 0, 0, 0, 0, 0, 791, 817, 0, 817, 812, 0, 0, 0, 0, 0, 0, 204800, 204800, 0, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 205104, 204800, 204800, 205103, 205104, 204800, 205103, 205103, 204800, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 2183801, 0, 0, 0, 0, 0, 296, 297, 151552, 2134016, 300, 301, 0, 212992, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 0, 2200253, 0, 0, 0, 0, 0, 0, 2932736, 2965504, 0, 0, 3076096, 0, 0, 2695168, 3174400, 2646016, 0, 914, 2126737, 2126737, 2126737, 2126737, 2425745, 2433937, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 0, 0, 987, 2126810, 2126810, 2126810, 2126810, 2425818, 2724753, 2126737, 2732945, 2773905, 2126737, 2126737, 2126737, 2806673, 2126737, 2831249, 2126737, 2126737, 2864017, 2126737, 2126737, 2126737, 2126737, 2126737, 2524049, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2601873, 2126737, 2126737, 2921361, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3117969, 2126737, 2126737, 2126737, 2126737, 2593681, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 3093393, 0, 0, 0, 0, 3026944, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2434010, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2626522, 2126810, 2126737, 0, 2179072, 2126810, 2126810, 2126737, 2457600, 2179072, 2179072, 2179072, 2179072, 2458513, 2126737, 2126737, 2126737, 2126737, 2126737, 2626449, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2700177, 2126737, 2716561, 2126737, 2806746, 2126810, 2831322, 2126810, 2126810, 2864090, 2126810, 2126810, 2126810, 2126810, 2921434, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2458586, 2126810, 2126810, 2126810, 2126810, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 395, 0, 0, 0, 321, 0, 0, 2126737, 2126737, 2126737, 2409361, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3126161, 2126737, 2126737, 2126737, 2802577, 2814865, 2126737, 2839441, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 2126810, 2663386, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2802650, 2814938, 2126810, 2839514, 0, 0, 0, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2462609, 2466705, 2126737, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 2769809, 2778001, 2126737, 2798481, 2823057, 2126737, 2126737, 2126737, 2884497, 2126737, 2913169, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2655121, 2679697, 2761617, 2765713, 2786193, 2855825, 2970513, 2126737, 3007377, 2126737, 3134353, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3208081, 2126737, 0, 0, 0, 0, 0, 325, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2462682, 2466778, 2126810, 2126810, 2126810, 2524122, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2601946, 2126810, 2126810, 2126810, 2585562, 2126810, 2126810, 2126810, 2126810, 2126810, 2618330, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2888666, 2126810, 2126810, 2925530, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2642906, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2720730, 2126810, 2126810, 2126810, 2126810, 2126810, 2769882, 2778074, 2126810, 2798554, 2823130, 2126810, 2126810, 2126810, 2884570, 2126810, 2913242, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3126234, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3208154, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 0, 0, 0, 2388881, 2126737, 2126737, 2421649, 2126737, 2126737, 2126737, 2126737, 2126737, 2454417, 2126737, 2474897, 2483089, 2630545, 2126737, 2126737, 2651025, 2126737, 2126737, 2126737, 2708369, 2126737, 2737041, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 985, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2552794, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2126737, 3072913, 2126737, 2126737, 3122065, 2126737, 2126737, 3142545, 2126737, 2126737, 2126737, 3171217, 2126737, 2126737, 3191697, 3195793, 2126737, 0, 0, 0, 0, 0, 0, 2388954, 2126810, 2126810, 2421722, 2126810, 2126810, 2126810, 2126810, 2126810, 3040218, 2126810, 3064794, 2126810, 2126810, 2126810, 2126810, 3101658, 2126810, 2126810, 3134426, 2126810, 2454490, 2126810, 2474970, 2483162, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2532314, 2126810, 2126810, 2126810, 2126810, 3036122, 2126810, 2126810, 3072986, 2126810, 2126810, 3122138, 2126810, 2126810, 3142618, 2126810, 2126810, 2126810, 3171290, 2126810, 2126810, 3191770, 3195866, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 3112960, 3219456, 2126737, 2126737, 3113873, 3220369, 2126810, 2126810, 3113946, 3220442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 2638737, 2126737, 2126737, 2126737, 2126737, 2728849, 2753425, 2126737, 2126737, 2126737, 2126737, 2843537, 2847633, 2126737, 2896785, 2917265, 2638810, 2126810, 2126810, 2126810, 2126810, 2728922, 2753498, 2126810, 2126810, 2126810, 2126810, 2843610, 2847706, 2126810, 2896858, 2917338, 2179072, 3178496, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2495377, 2126737, 2126737, 2515857, 2126737, 2126737, 2126737, 2126737, 3011473, 2126737, 2126737, 2126810, 2126810, 2503642, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3138522, 2126737, 2940928, 2941841, 2941914, 0, 0, 0, 0, 2126737, 2544529, 2548625, 2126737, 2126737, 2597777, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2552721, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2929553, 2126737, 2126737, 2126737, 2999185, 2126737, 2126737, 2126737, 2126737, 3060625, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3040145, 2126737, 3064721, 2126737, 2126737, 2126737, 2126737, 3101585, 2126737, 2126737, 3179409, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2495450, 2126810, 2126810, 2515930, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 2160, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 3525, 561, 2126810, 2544602, 2548698, 2126810, 2126810, 2597850, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 0, 2502656, 0, 0, 3010560, 2126810, 2929626, 2126810, 2126810, 2126810, 2999258, 2126810, 2126810, 2126810, 2126810, 3060698, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3118042, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2126810, 3179482, 2126737, 2179072, 2126810, 2126737, 2179072, 2179072, 2126737, 2126737, 2126810, 2126810, 2441216, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2397073, 2401169, 2126737, 2126737, 2442129, 2126737, 2470801, 2126737, 2126737, 2126737, 2126737, 2126737, 2663313, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 0, 0, 2126810, 2126810, 2126810, 2409434, 2519953, 2126737, 2126737, 2126737, 2126737, 2589585, 2126737, 2614161, 2646929, 2126737, 2126737, 2696081, 2757521, 2126737, 2126737, 2126737, 2126737, 2126737, 3138449, 2126810, 2126810, 2499546, 2126810, 2126810, 2126810, 2556890, 2565082, 2126810, 2126810, 2126737, 2933649, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3130257, 2126737, 2126737, 3154833, 3167121, 3175313, 2397146, 2401242, 2126810, 2126810, 2442202, 2126810, 2470874, 2126810, 2126810, 2126810, 2520026, 2126810, 2126810, 2126810, 2126810, 2589658, 2126810, 2126810, 2126810, 3011546, 2126810, 2126810, 2126737, 0, 0, 0, 0, 0, 0, 0, 2592768, 0, 0, 0, 0, 663, 0, 0, 666, 667, 0, 0, 0, 0, 0, 0, 0, 540, 571, 540, 571, 540, 540, 571, 540, 595, 2614234, 2647002, 2126810, 2126810, 2696154, 2757594, 2126810, 2126810, 2126810, 2126810, 2933722, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3224538, 2126737, 2179072, 2417626, 2126810, 2126737, 2179072, 2179072, 2126737, 2126737, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2126737, 2429841, 2438033, 2126737, 2487185, 2126737, 2126737, 2945937, 2126737, 2126737, 2995089, 2126737, 3003281, 2126737, 2126737, 3023761, 2126737, 3068817, 3085201, 3097489, 2126737, 2126737, 2888593, 2126737, 2126737, 2925457, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3036049, 2126737, 3019665, 2126737, 2126737, 2126737, 3150737, 2126810, 2429914, 2438106, 2126810, 2487258, 2126810, 2126810, 2126810, 2126810, 2126810, 2700250, 2126810, 2716634, 2126810, 2724826, 2126810, 2733018, 2773978, 2126810, 2126810, 2126810, 2126810, 3150810, 2126737, 2179072, 3051520, 2126737, 3052433, 2126810, 3052506, 0, 2490368, 2498560, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2126810, 2593754, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2449408, 0, 2535424, 3031040, 0, 0, 0, 0, 0, 2439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 2126737, 2450321, 2126737, 2536337, 2126737, 2610065, 2126737, 2859921, 2126737, 2126737, 2126737, 3031953, 2126810, 2450394, 2126810, 2536410, 2126810, 2610138, 2126810, 2859994, 2126810, 2126810, 2126810, 3032026, 2126737, 2527232, 0, 0, 0, 0, 0, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237568, 0, 0, 0, 0, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2528145, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2528218, 2126810, 2126810, 2946010, 2126810, 2126810, 2995162, 2126810, 3003354, 2126810, 2126810, 3023834, 2126810, 3068890, 3085274, 3097562, 2126810, 2126810, 2126810, 2606042, 2126810, 2630618, 2126810, 2126810, 2651098, 2126810, 2126810, 2126810, 2708442, 2126810, 2737114, 2126810, 2126810, 2126810, 2655194, 2679770, 2761690, 2765786, 2786266, 2855898, 2970586, 2126810, 3007450, 2126810, 3019738, 2126810, 2126810, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 3108864, 3198976, 0, 2405265, 2126737, 2126737, 2126737, 2126737, 3027857, 2405338, 2126810, 2126810, 2126810, 2126810, 3027930, 2539520, 0, 2949120, 0, 0, 0, 0, 695, 0, 0, 0, 0, 362, 362, 362, 0, 0, 704, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2049, 0, 0, 0, 0, 2179072, 2658304, 2973696, 2179072, 2126737, 2659217, 2974609, 2126737, 2126810, 2659290, 2974682, 2126810, 2711552, 0, 2560000, 2179072, 2179072, 3125248, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2560913, 2126737, 2560986, 2126810, 0, 2179072, 2126737, 2126810, 0, 2179072, 2126737, 2126810, 0, 2179072, 2126737, 2126810, 2126810, 3130330, 2126810, 2126810, 3154906, 3167194, 3175386, 2126737, 2506752, 2507738, 2507665, 2179072, 2179072, 2126737, 2126737, 2126737, 2642833, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2720657, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2585489, 2126737, 2126737, 2126737, 2126737, 2126737, 2618257, 2126737, 2985984, 2985984, 2986897, 2986970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 0, 0, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 1, 12290, 3, 0, 0, 0, 0, 0, 253952, 0, 0, 0, 253952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 688, 0, 0, 0, 0, 0, 98304, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 2662400, 0, 2813952, 297, 0, 300, 0, 0, 0, 300, 0, 301, 0, 0, 0, 301, 0, 0, 0, 301, 69632, 139679, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 3133440, 0, 98304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 300, 0, 301, 0, 0, 0, 2473984, 2478080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 914, 0, 0, 0, 0, 0, 2451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 301, 0, 0, 0, 0, 0, 914, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2531328, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2605056, 2125824, 3194880, 2125824, 987, 0, 0, 0, 987, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2887680, 2125824, 2125824, 2924544, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 349, 350, 0, 0, 0, 0, 2125824, 237568, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 358, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 217088, 2125824, 241664, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 131072, 131072, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 155648, 0, 0, 2183168, 0, 0, 270336, 0, 0, 296, 297, 0, 2134016, 300, 301, 200704, 0, 0, 0, 0, 0, 2462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, 0, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 180224, 0, 0, 0, 0, 0, 0, 0, 1726, 0, 0, 0, 0, 0, 0, 0, 0, 304, 304, 304, 0, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 20480, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2768896, 2777088, 2797568, 2822144, 2179072, 2179072, 2179072, 2883584, 2912256, 2179072, 2179072, 2179072, 2179072, 2179072, 2617344, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2662400, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2584576, 2125824, 2125824, 2125824, 2125824, 2125824, 2617344, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142208, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 2113823, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 293, 0, 0, 245760, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3039232, 2125824, 3063808, 2125824, 2125824, 2125824, 2125824, 3100672, 2125824, 2125824, 3133440, 2125824, 245760, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 122880, 122880, 0, 0, 274432, 274432, 274432, 274432, 0, 0, 0, 0, 0, 274432, 0, 274432, 1, 12290, 3, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 1195, 0, 0, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 0, 300, 301, 0, 0, 0, 0, 0, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200252, 2200252, 2200252, 0, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 2035, 0, 0, 0, 0, 0, 0, 0, 2055, 0, 2056, 0, 0, 0, 0, 0, 0, 0, 2067, 0, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 0, 0, 0, 0, 1104, 2483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 2993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 335, 0, 0, 0, 0, 1679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 78456, 290, 0, 0, 0, 0, 0, 296, 297, 0, 0, 300, 301, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1158, 0, 0, 0, 0, 0, 562, 562, 562, 562, 562, 562, 562, 586, 586, 586, 540, 586, 586, 586, 586, 586, 562, 562, 540, 562, 586, 562, 586, 1, 12290, 3, 78112, 0, 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 521, 521, 1, 12290, 3, 78113, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 1, 12290, 3, 0, 282624, 282624, 282624, 0, 0, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3178496, 2670592, 0, 2744320, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 3176, 0, 0, 2740224, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 0, 0, 2094, 0, 0, 0, 0, 0, 0, 0, 0, 683, 684, 685, 0, 0, 0, 689, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 302, 0, 0, 0, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3301, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 2875392, 0, 0, 0, 3381, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2748416, 2879488, 0, 3381, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2531328, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2605056, 2179072, 2629632, 2179072, 2179072, 0, 0, 0, 306, 0, 0, 0, 0, 0, 305, 0, 305, 306, 0, 305, 305, 0, 0, 0, 305, 305, 306, 306, 0, 0, 0, 0, 0, 0, 305, 405, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 306, 410, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 742, 0, 0, 0, 0, 742, 0, 748, 0, 0, 0, 0, 0, 0, 1192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 462, 462, 488, 488, 462, 488, 488, 488, 488, 488, 488, 488, 513, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 533, 488, 488, 488, 488, 488, 541, 563, 541, 563, 541, 541, 563, 541, 587, 563, 563, 563, 563, 563, 563, 563, 587, 587, 587, 541, 613, 613, 613, 613, 613, 587, 563, 563, 541, 563, 587, 563, 587, 1, 12290, 3, 78112, 0, 0, 645, 0, 0, 648, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 253952, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 353, 0, 351, 0, 472, 472, 472, 472, 472, 472, 472, 477, 472, 472, 472, 472, 472, 472, 472, 472, 472, 477, 472, 0, 768, 0, 0, 772, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 343, 342, 65536, 341, 0, 788, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 736, 0, 796, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 820, 0, 0, 648, 0, 0, 0, 0, 0, 837, 792, 0, 0, 0, 0, 0, 841, 842, 792, 792, 0, 0, 0, 0, 792, 736, 792, 0, 540, 540, 851, 855, 540, 540, 540, 540, 1345, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2181, 540, 540, 540, 540, 561, 561, 561, 921, 925, 561, 561, 561, 561, 561, 561, 951, 561, 956, 561, 963, 561, 966, 561, 561, 980, 561, 561, 0, 585, 585, 585, 994, 998, 585, 585, 585, 585, 585, 585, 1963, 1964, 1966, 585, 585, 585, 585, 585, 585, 585, 561, 2713, 585, 2715, 2716, 540, 540, 540, 540, 585, 585, 585, 1024, 585, 1029, 585, 1036, 585, 1039, 585, 585, 1053, 585, 585, 966, 0, 0, 0, 855, 585, 998, 925, 851, 1065, 894, 540, 540, 921, 1070, 966, 561, 0, 585, 585, 585, 585, 585, 78112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114688, 0, 241664, 258048, 0, 0, 0, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 673, 0, 540, 540, 1342, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 585, 585, 585, 1524, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1517, 585, 585, 585, 1433, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 3070, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 0, 0, 3662, 0, 0, 0, 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1103, 1104, 1105, 1106, 1654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 1693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 1732, 0, 0, 1733, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3030, 540, 540, 540, 540, 540, 540, 540, 1745, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1758, 540, 540, 540, 540, 540, 540, 2540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1329, 540, 540, 540, 540, 540, 540, 540, 540, 1795, 540, 540, 1798, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 900, 540, 540, 540, 540, 540, 540, 1810, 540, 540, 540, 540, 540, 1815, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1416, 561, 1825, 561, 561, 561, 561, 1831, 561, 561, 561, 561, 561, 1837, 561, 561, 561, 561, 561, 983, 561, 0, 585, 585, 585, 585, 585, 1002, 585, 1010, 561, 1892, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1904, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 2726, 0, 0, 2729, 2730, 561, 561, 1909, 561, 561, 561, 561, 561, 561, 561, 26027, 1919, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 3649, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 3231, 3232, 561, 1925, 585, 585, 585, 585, 585, 1931, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3596, 1944, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1540, 561, 561, 2025, 585, 585, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 2041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1132, 0, 0, 0, 2075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1135, 0, 2145, 0, 0, 0, 2143, 0, 0, 2150, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 1584, 0, 0, 0, 0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 1705, 0, 0, 540, 540, 2171, 540, 540, 2174, 540, 540, 540, 540, 540, 540, 2182, 540, 540, 540, 540, 540, 540, 2568, 540, 540, 540, 540, 2572, 540, 540, 540, 540, 540, 540, 1347, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2556, 540, 540, 540, 540, 540, 540, 540, 2201, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 2242, 540, 540, 540, 2214, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1805, 540, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2254, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2123, 0, 2125, 2126, 0, 0, 0, 0, 561, 2257, 561, 561, 561, 561, 561, 561, 2265, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 2952, 561, 2954, 561, 2299, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1438, 561, 2033, 0, 2035, 0, 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434, 0, 0, 0, 2475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1193, 0, 0, 0, 0, 2484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2493, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 2592, 561, 561, 561, 561, 561, 1408, 561, 561, 1412, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1008, 585, 2656, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2664, 585, 585, 585, 585, 585, 585, 2350, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2379, 585, 585, 585, 585, 585, 585, 585, 585, 2699, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1940, 585, 585, 2708, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 561, 561, 561, 3229, 561, 561, 561, 561, 561, 561, 585, 585, 585, 3352, 585, 585, 585, 3355, 585, 585, 2731, 0, 0, 0, 0, 0, 0, 2736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 0, 0, 2759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 540, 540, 540, 0, 0, 0, 2788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 0, 0, 0, 540, 540, 540, 2826, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2833, 540, 540, 540, 540, 1748, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1760, 540, 540, 540, 540, 1765, 540, 540, 540, 540, 540, 540, 540, 540, 1772, 540, 540, 540, 540, 561, 3406, 561, 561, 3408, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1009, 585, 561, 561, 561, 2860, 561, 561, 2864, 561, 561, 561, 561, 561, 561, 561, 561, 561, 944, 561, 561, 561, 561, 561, 561, 561, 2873, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2881, 561, 561, 0, 0, 0, 2649, 0, 1920, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2703, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2908, 585, 585, 2912, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2393, 2394, 585, 585, 585, 585, 585, 2921, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2929, 585, 585, 0, 0, 0, 3292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3297, 2955, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 305, 0, 0, 0, 2970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1588, 1589, 0, 0, 540, 540, 540, 540, 3036, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2546, 540, 540, 540, 561, 561, 561, 3076, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1436, 561, 561, 561, 585, 585, 585, 3117, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2356, 585, 2358, 0, 0, 0, 0, 3176, 3442, 0, 3444, 0, 0, 0, 0, 0, 540, 3451, 540, 540, 540, 540, 1796, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 905, 540, 540, 540, 540, 3453, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 3466, 561, 3468, 0, 0, 3501, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 3510, 540, 540, 540, 540, 540, 3204, 3205, 540, 540, 540, 540, 3209, 3210, 540, 540, 540, 540, 540, 1749, 1750, 540, 540, 540, 540, 1757, 540, 540, 540, 540, 540, 540, 1346, 540, 540, 540, 540, 540, 540, 1356, 540, 540, 307, 308, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, 2504, 0, 0, 0, 0, 0, 0, 0, 0, 2517, 0, 0, 0, 0, 0, 0, 0, 0, 2975, 0, 0, 0, 0, 0, 0, 0, 0, 2999, 0, 0, 0, 0, 0, 0, 0, 0, 3164, 0, 0, 0, 0, 0, 0, 0, 0, 3173, 0, 0, 0, 0, 0, 0, 0, 0, 3183, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 449, 418, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 532, 449, 532, 532, 532, 449, 532, 532, 532, 532, 449, 542, 564, 542, 564, 542, 542, 564, 542, 588, 564, 564, 564, 564, 564, 564, 564, 588, 588, 588, 542, 588, 588, 588, 588, 588, 564, 564, 616, 621, 588, 621, 627, 1, 12290, 3, 78112, 0, 1677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 540, 540, 540, 1811, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1377, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 1082, 1086, 0, 0, 1090, 585, 585, 585, 1993, 585, 585, 585, 585, 585, 1999, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 3551, 0, 3553, 0, 0, 0, 0, 0, 561, 561, 561, 561, 561, 2589, 561, 561, 561, 561, 2593, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2338, 585, 585, 585, 585, 585, 585, 585, 2657, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1971, 585, 585, 585, 2709, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 561, 561, 3228, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 2900, 585, 585, 585, 585, 585, 540, 3514, 540, 3516, 540, 540, 3518, 540, 561, 561, 561, 561, 561, 561, 561, 561, 1396, 1398, 561, 561, 561, 561, 561, 561, 3527, 561, 3529, 561, 561, 3531, 561, 585, 585, 585, 585, 585, 585, 585, 585, 3540, 585, 3542, 585, 585, 3544, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 147456, 0, 0, 0, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 365, 0, 382, 0, 348, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 420, 428, 419, 428, 0, 310, 428, 441, 450, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 484, 489, 489, 500, 489, 489, 489, 489, 489, 489, 489, 489, 515, 515, 528, 528, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 515, 529, 529, 529, 529, 529, 543, 565, 543, 565, 543, 543, 565, 543, 589, 565, 565, 565, 565, 565, 565, 565, 589, 589, 589, 612, 589, 589, 589, 589, 589, 614, 615, 615, 612, 615, 614, 615, 614, 1, 12290, 3, 78112, 0, 702, 0, 0, 0, 0, 0, 702, 0, 0, 0, 540, 540, 540, 540, 540, 3028, 540, 540, 540, 540, 540, 540, 540, 561, 967, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 2337, 585, 585, 585, 585, 2341, 585, 0, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3200, 0, 1150, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1102, 0, 0, 0, 1228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 0, 0, 540, 540, 1276, 1278, 540, 540, 540, 540, 540, 540, 540, 540, 1292, 540, 1297, 540, 540, 1301, 540, 540, 540, 540, 1812, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1823, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1378, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 1083, 1087, 0, 0, 1091, 540, 1304, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1302, 540, 1360, 914, 561, 561, 1364, 561, 1367, 561, 561, 561, 561, 561, 561, 561, 561, 1381, 561, 1386, 561, 561, 1390, 561, 561, 1393, 561, 561, 561, 561, 561, 561, 561, 561, 1431, 561, 561, 1435, 561, 561, 561, 561, 1484, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1942, 540, 1793, 1794, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 585, 585, 1946, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2005, 585, 585, 585, 1959, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2357, 585, 2102, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 379, 381, 0, 0, 0, 0, 0, 2133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1119, 0, 0, 2033, 0, 2035, 0, 0, 0, 0, 0, 0, 2428, 0, 0, 0, 0, 0, 0, 0, 2122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 0, 0, 2474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1133, 0, 0, 0, 0, 0, 0, 2760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 384, 0, 0, 2799, 0, 0, 0, 0, 0, 0, 0, 2803, 540, 540, 540, 540, 540, 540, 540, 1326, 540, 540, 540, 540, 540, 540, 540, 1339, 585, 2956, 0, 0, 0, 0, 0, 2962, 0, 0, 0, 0, 0, 0, 0, 2966, 0, 0, 0, 3008, 0, 0, 0, 0, 0, 0, 0, 0, 3017, 0, 0, 0, 0, 0, 383, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 3048, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1320, 3089, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1858, 3130, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1957, 540, 3225, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3414, 585, 585, 585, 3281, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 3157, 3513, 540, 540, 540, 540, 540, 540, 540, 561, 3521, 561, 3522, 561, 561, 561, 3526, 540, 540, 540, 3664, 561, 561, 561, 3666, 585, 585, 585, 3668, 0, 0, 540, 540, 540, 3560, 540, 540, 540, 540, 540, 540, 540, 540, 3568, 561, 321, 321, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 371, 0, 430, 436, 0, 442, 451, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 490, 490, 501, 490, 490, 490, 490, 490, 490, 490, 490, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 544, 566, 544, 566, 544, 544, 566, 544, 590, 566, 566, 566, 566, 566, 566, 566, 590, 590, 590, 544, 590, 590, 590, 590, 590, 566, 566, 544, 566, 590, 566, 590, 1, 12290, 3, 78112, 540, 540, 540, 874, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1822, 540, 1360, 585, 1017, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 1122, 0, 1124, 1125, 0, 0, 0, 1127, 1128, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 1159168, 0, 0, 0, 0, 1159168, 0, 0, 1166, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1634, 0, 0, 0, 1113, 0, 1253, 0, 0, 0, 0, 0, 1128, 0, 0, 0, 0, 0, 1236, 0, 0, 0, 0, 773, 774, 0, 0, 778, 779, 0, 675, 0, 0, 0, 0, 0, 0, 1598, 0, 0, 0, 0, 0, 0, 0, 0, 1605, 0, 0, 1268, 1127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 1277, 540, 540, 540, 1323, 540, 540, 1325, 540, 540, 1328, 540, 540, 540, 540, 540, 540, 540, 540, 2554, 540, 540, 540, 540, 540, 540, 2560, 1360, 914, 561, 561, 1365, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1400, 561, 561, 561, 561, 561, 561, 1404, 561, 561, 561, 561, 561, 561, 561, 1413, 561, 561, 1415, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 2655, 561, 1419, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1874, 561, 561, 561, 1443, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 1456, 585, 585, 0, 0, 3291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 1266, 585, 585, 585, 1504, 585, 585, 1506, 585, 585, 585, 1510, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 2020, 561, 561, 0, 0, 0, 1657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1675, 0, 0, 0, 585, 1991, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2695, 561, 2024, 585, 585, 585, 2028, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1586, 1587, 0, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 2035, 0, 0, 0, 0, 0, 2038, 0, 0, 2077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 0, 0, 0, 0, 0, 0, 2091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2807, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 2252, 561, 561, 561, 561, 561, 1447, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2017, 540, 540, 540, 2021, 561, 2256, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1875, 2272, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1890, 561, 561, 561, 2314, 561, 2316, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2340, 585, 585, 585, 2399, 585, 2401, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 540, 540, 2564, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3212, 540, 0, 0, 0, 561, 561, 561, 561, 2588, 561, 561, 561, 561, 561, 561, 561, 561, 1916, 561, 26027, 0, 585, 585, 585, 585, 0, 2757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 2834, 540, 540, 540, 540, 540, 540, 540, 2840, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2571, 540, 540, 540, 540, 540, 540, 2882, 561, 561, 561, 561, 561, 561, 561, 2888, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 2902, 585, 585, 585, 2930, 585, 585, 585, 585, 585, 585, 585, 2936, 585, 585, 585, 585, 585, 585, 585, 561, 540, 2714, 585, 561, 540, 540, 540, 540, 540, 540, 3226, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3074, 585, 585, 585, 585, 3282, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 3156, 0, 585, 585, 3369, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 2617344, 0, 0, 0, 0, 0, 2789376, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 3445, 0, 0, 0, 0, 540, 540, 540, 540, 3027, 540, 540, 540, 540, 3031, 540, 540, 540, 540, 540, 540, 3456, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3524, 561, 561, 561, 561, 3471, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3486, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3626, 540, 540, 540, 3515, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3413, 561, 561, 3528, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3113, 585, 585, 585, 3541, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 208896, 0, 0, 0, 0, 323, 324, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 1196, 0, 0, 0, 0, 322, 370, 325, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 322, 0, 0, 369, 369, 399, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 322, 452, 465, 465, 465, 465, 465, 465, 465, 478, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 491, 491, 465, 491, 491, 506, 508, 491, 491, 506, 491, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 534, 517, 517, 517, 517, 517, 545, 567, 545, 567, 545, 545, 567, 545, 591, 567, 567, 567, 567, 567, 567, 567, 591, 591, 591, 545, 591, 591, 591, 591, 591, 567, 567, 545, 567, 591, 567, 591, 1, 12290, 3, 78112, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 671, 0, 0, 0, 0, 0, 439, 0, 0, 0, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 557, 580, 557, 580, 557, 557, 580, 557, 604, 0, 0, 707, 708, 0, 0, 0, 0, 0, 714, 0, 0, 0, 718, 0, 720, 0, 769, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1209, 0, 0, 787, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1224, 0, 0, 0, 801, 0, 806, 0, 809, 0, 0, 0, 0, 806, 809, 0, 0, 0, 809, 0, 707, 0, 0, 826, 0, 0, 0, 0, 0, 826, 826, 829, 809, 806, 0, 0, 0, 0, 0, 0, 0, 789, 0, 801, 0, 818, 0, 0, 0, 0, 0, 2745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 811, 540, 540, 854, 540, 540, 0, 0, 0, 789, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 2142, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2819, 540, 540, 540, 540, 540, 0, 0, 0, 787, 0, 0, 0, 838, 818, 838, 0, 540, 540, 852, 540, 858, 540, 540, 871, 540, 881, 540, 886, 540, 540, 893, 896, 901, 540, 909, 540, 540, 540, 540, 540, 3215, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 895, 540, 540, 540, 540, 540, 561, 561, 561, 922, 561, 928, 561, 561, 941, 561, 561, 952, 561, 957, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 2653, 585, 585, 0, 0, 2959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2965, 0, 965, 968, 973, 561, 981, 561, 561, 0, 585, 585, 585, 995, 585, 1001, 585, 585, 0, 2958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 131072, 0, 0, 1014, 585, 585, 1025, 585, 1030, 585, 585, 1038, 1041, 1046, 585, 1054, 585, 585, 968, 0, 0, 0, 540, 585, 585, 561, 852, 540, 1066, 901, 540, 922, 561, 1071, 973, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 0, 0, 0, 0, 0, 1137, 1138, 0, 0, 0, 0, 1142, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 1182, 741, 0, 0, 0, 1134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 1303, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1318, 540, 540, 540, 540, 2173, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2558, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1372, 561, 561, 561, 561, 561, 1850, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1902, 1903, 561, 561, 561, 561, 561, 561, 1387, 561, 561, 561, 1392, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1432, 561, 561, 561, 561, 561, 1439, 561, 561, 561, 1421, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1437, 561, 0, 585, 585, 585, 1049, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 811, 0, 585, 585, 585, 585, 1463, 585, 585, 585, 585, 585, 585, 1478, 585, 585, 585, 1483, 0, 0, 1608, 1609, 1610, 0, 1612, 1613, 0, 0, 0, 0, 1618, 0, 0, 0, 0, 0, 679, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2144, 0, 0, 1640, 0, 0, 1643, 0, 1645, 0, 0, 0, 0, 0, 1651, 1652, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 540, 846, 540, 540, 540, 540, 540, 540, 3216, 540, 540, 540, 540, 540, 3221, 540, 3223, 540, 0, 1668, 0, 0, 1670, 0, 0, 0, 0, 1672, 1673, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 347, 345, 65536, 0, 1692, 0, 0, 0, 0, 0, 1698, 1699, 0, 1701, 1702, 1703, 0, 0, 0, 0, 0, 0, 810, 811, 0, 0, 0, 0, 811, 0, 0, 0, 1719, 0, 0, 0, 1723, 1724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 1715, 0, 0, 0, 1735, 1585, 1585, 1737, 540, 1739, 540, 1740, 540, 1742, 540, 540, 540, 1746, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1759, 540, 540, 540, 540, 540, 3318, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2557, 540, 540, 540, 540, 540, 540, 1763, 540, 540, 540, 540, 1767, 540, 1769, 540, 540, 540, 540, 540, 540, 540, 540, 2570, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3041, 540, 540, 540, 540, 540, 540, 540, 540, 1777, 1778, 1780, 540, 540, 540, 540, 540, 540, 1787, 1788, 540, 540, 1791, 1792, 540, 540, 540, 540, 540, 540, 540, 1800, 540, 540, 540, 1804, 540, 540, 540, 540, 540, 540, 2829, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1770, 540, 540, 540, 540, 540, 0, 1828, 561, 1830, 561, 561, 1832, 561, 1834, 561, 561, 561, 1838, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 2725, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 135168, 135168, 0, 0, 65536, 135168, 1859, 561, 1861, 561, 561, 561, 561, 561, 561, 561, 561, 1869, 1870, 1872, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 2652, 585, 585, 585, 585, 585, 585, 2390, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3124, 585, 585, 585, 585, 585, 561, 561, 561, 1894, 561, 561, 561, 1898, 561, 561, 561, 561, 561, 561, 561, 1906, 585, 1926, 585, 1928, 585, 585, 585, 1932, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 585, 1945, 585, 585, 585, 585, 1949, 585, 585, 585, 585, 1953, 585, 1955, 585, 585, 561, 3146, 3147, 3148, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 2488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2096, 0, 0, 0, 0, 0, 0, 1974, 1975, 1976, 585, 585, 1979, 1980, 585, 585, 585, 585, 585, 585, 585, 1988, 585, 561, 0, 1288, 585, 1468, 1377, 540, 540, 540, 1549, 540, 561, 561, 561, 1553, 585, 585, 1992, 585, 585, 585, 585, 585, 585, 585, 2000, 585, 585, 585, 585, 585, 561, 561, 540, 561, 585, 561, 585, 1, 12290, 3, 78112, 585, 585, 585, 585, 2011, 561, 540, 2014, 585, 561, 1792, 540, 2019, 540, 1886, 561, 0, 585, 585, 1040, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 1134592, 0, 0, 0, 0, 2023, 561, 1980, 585, 2027, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 2089, 0, 0, 0, 0, 2093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2119, 0, 2121, 0, 0, 0, 0, 0, 0, 0, 2129, 0, 0, 0, 0, 786, 0, 805, 0, 0, 0, 0, 540, 849, 540, 540, 540, 540, 540, 2216, 540, 540, 540, 540, 540, 540, 2221, 540, 540, 540, 540, 540, 540, 3633, 561, 561, 561, 561, 561, 561, 3639, 585, 585, 0, 0, 0, 2134, 0, 0, 0, 0, 2139, 0, 0, 0, 0, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2502656, 2179072, 2179072, 2179072, 2179072, 540, 2187, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1337, 540, 2211, 2212, 540, 540, 540, 540, 540, 540, 2219, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2582, 540, 540, 540, 0, 0, 0, 561, 561, 2258, 561, 2260, 561, 561, 561, 561, 561, 561, 2268, 561, 2270, 561, 561, 561, 561, 1426, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3343, 561, 561, 561, 561, 3344, 3345, 561, 561, 2343, 585, 2345, 585, 585, 585, 585, 585, 585, 2353, 585, 2355, 585, 585, 585, 585, 561, 0, 0, 0, 3648, 0, 540, 540, 540, 540, 3652, 540, 585, 585, 585, 585, 2389, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2705, 585, 585, 585, 585, 585, 585, 585, 2402, 585, 585, 2405, 2406, 585, 585, 561, 2177, 585, 2345, 2260, 540, 2414, 540, 540, 561, 2418, 561, 561, 585, 2422, 585, 585, 2029, 0, 2031, 0, 0, 0, 0, 795, 663, 844, 0, 0, 0, 0, 540, 848, 540, 540, 540, 540, 540, 1283, 540, 540, 540, 540, 540, 540, 1298, 540, 540, 540, 540, 540, 540, 2580, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 0, 0, 2450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0, 0, 0, 2459, 0, 0, 0, 0, 0, 2464, 0, 2466, 2467, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 371, 0, 65536, 0, 0, 2498, 0, 0, 0, 0, 0, 0, 0, 2505, 0, 0, 0, 0, 0, 0, 0, 2479, 0, 0, 0, 2481, 0, 0, 0, 0, 2561, 540, 540, 540, 2566, 540, 540, 540, 540, 540, 540, 540, 2573, 540, 540, 540, 540, 540, 540, 2838, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1296, 540, 540, 540, 540, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 2591, 561, 561, 561, 561, 561, 561, 2640, 561, 561, 561, 2643, 561, 561, 561, 561, 561, 561, 2886, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1867, 561, 561, 561, 561, 561, 561, 2621, 561, 561, 561, 561, 2625, 561, 561, 561, 2630, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 3661, 0, 0, 561, 2637, 561, 561, 561, 561, 561, 561, 561, 2642, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3427, 585, 2669, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3267, 2797, 2798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1741, 540, 0, 0, 2982, 2983, 0, 2984, 0, 2986, 0, 0, 0, 0, 2988, 0, 0, 0, 0, 0, 680, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2047, 0, 0, 0, 0, 0, 0, 0, 0, 3007, 0, 0, 2988, 0, 0, 3013, 3014, 0, 3016, 0, 0, 3019, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 3022, 540, 540, 540, 540, 540, 540, 3029, 540, 540, 540, 540, 540, 3033, 3062, 540, 561, 561, 561, 561, 561, 561, 3069, 561, 561, 561, 561, 561, 3073, 561, 0, 585, 585, 1042, 585, 585, 288, 1079, 0, 0, 1082, 1086, 0, 0, 1090, 3103, 561, 585, 585, 585, 585, 585, 585, 3110, 585, 585, 585, 585, 585, 3114, 585, 561, 0, 1543, 585, 1545, 1546, 540, 540, 1548, 540, 540, 561, 561, 1552, 561, 0, 585, 585, 1044, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 798, 3144, 585, 561, 540, 585, 561, 540, 3150, 561, 3152, 585, 3154, 0, 0, 0, 0, 0, 0, 825, 0, 819, 0, 664, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 221184, 0, 0, 0, 0, 65536, 0, 0, 0, 3160, 0, 0, 3163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 2806, 540, 540, 540, 3202, 540, 540, 540, 540, 540, 540, 540, 3207, 540, 540, 540, 540, 540, 540, 540, 540, 3040, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3322, 540, 540, 540, 540, 540, 540, 561, 3234, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1889, 561, 3245, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 3257, 585, 585, 585, 585, 585, 585, 585, 3262, 585, 585, 585, 585, 585, 561, 2013, 585, 2015, 2016, 540, 2018, 540, 540, 561, 2022, 561, 561, 561, 3349, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2667, 0, 3378, 3379, 0, 3176, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 384, 0, 0, 0, 3441, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 2167, 540, 540, 0, 0, 0, 0, 3503, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3512, 0, 0, 3557, 3558, 3559, 540, 540, 540, 3562, 540, 3564, 540, 540, 540, 540, 3569, 3570, 3571, 561, 561, 561, 3574, 561, 3576, 561, 561, 561, 561, 3581, 3582, 3583, 585, 561, 1203, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, </string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAABE=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="17" aka="AAAAAAAAABE="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string>0, 585, 585, 3586, 585, 3588, 585, 585, 585, 585, 3593, 0, 0, 0, 0, 0, 0, 0, 2747, 2748, 2749, 0, 0, 0, 0, 0, 0, 0, 2763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 1, 12290, 0, 0, 540, 3628, 540, 540, 540, 3632, 561, 561, 3634, 561, 561, 561, 3638, 585, 585, 3640, 585, 585, 585, 3644, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3563, 540, 3565, 540, 540, 540, 561, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 366, 0, 0, 0, 374, 376, 0, 0, 0, 0, 0, 0, 0, 344, 0, 402, 0, 0, 0, 0, 0, 402, 0, 0, 409, 0, 0, 0, 409, 69632, 73728, 0, 366, 366, 0, 421, 65536, 366, 0, 0, 366, 421, 498, 502, 498, 498, 507, 498, 498, 498, 507, 498, 421, 421, 327, 421, 0, 0, 421, 0, 421, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 546, 568, 546, 568, 546, 546, 568, 546, 592, 568, 568, 568, 568, 568, 568, 568, 592, 592, 592, 546, 592, 592, 592, 592, 592, 568, 568, 546, 568, 592, 568, 592, 1, 12290, 3, 78112, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1248, 0, 0, 540, 540, 540, 875, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2183, 540, 540, 561, 561, 915, 561, 561, 561, 561, 561, 561, 945, 561, 561, 561, 561, 561, 561, 585, 3421, 585, 585, 3423, 585, 585, 585, 585, 585, 585, 1018, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 540, 988, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3068, 561, 561, 561, 561, 561, 561, 561, 561, 932, 561, 561, 946, 561, 561, 561, 561, 561, 561, 934, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3240, 561, 561, 561, 561, 561, 561, 0, 0, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 1229, 0, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 540, 540, 540, 1281, 540, 540, 540, 540, 540, 1293, 540, 540, 540, 540, 540, 540, 540, 540, 3054, 3056, 540, 540, 540, 3059, 540, 3061, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 1370, 561, 561, 561, 561, 561, 1382, 585, 585, 1461, 585, 585, 585, 585, 585, 1473, 585, 585, 585, 585, 585, 585, 585, 585, 2914, 585, 585, 585, 585, 585, 585, 585, 585, 3122, 585, 585, 585, 585, 585, 585, 585, 585, 3136, 3138, 585, 585, 585, 3141, 585, 3143, 0, 1720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134, 0, 1990, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1972, 585, 585, 585, 2373, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2370, 585, 585, 585, 585, 2698, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2383, 585, 0, 0, 0, 3161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1688, 0, 0, 0, 561, 561, 3235, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 2325, 0, 3663, 540, 540, 540, 3665, 561, 561, 561, 3667, 585, 585, 585, 0, 0, 540, 540, 540, 2526, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3058, 540, 540, 540, 422, 422, 0, 422, 431, 0, 422, 0, 422, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 492, 492, 466, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 547, 569, 547, 569, 547, 547, 569, 547, 593, 569, 569, 569, 569, 569, 569, 569, 593, 593, 593, 547, 593, 593, 593, 593, 593, 569, 569, 547, 569, 593, 569, 593, 1, 12290, 3, 78112, 0, 0, 0, 0, 2159, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3032, 540, 540, 540, 540, 540, 2202, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2208, 540, 540, 2413, 540, 540, 540, 2417, 561, 561, 561, 2421, 585, 585, 585, 0, 0, 0, 0, 3293, 0, 0, 0, 0, 0, 3296, 0, 0, 0, 2458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1250, 2967, 0, 0, 0, 2971, 0, 0, 0, 0, 0, 2977, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 418, 0, 65536, 0, 0, 2992, 0, 0, 2995, 0, 0, 0, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 367, 367, 0, 0, 65536, 367, 0, 0, 0, 3023, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2222, 540, 540, 540, 540, 3049, 540, 540, 540, 540, 540, 540, 540, 540, 3057, 540, 540, 3060, 540, 540, 540, 540, 2189, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2583, 0, 0, 0, 540, 540, 3063, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 2326, 0, 561, 561, 3090, 561, 561, 561, 561, 561, 561, 561, 561, 3098, 561, 561, 3101, 561, 0, 585, 585, 1045, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 1102, 1101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 1275, 540, 561, 561, 3104, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2666, 585, 585, 585, 3131, 585, 585, 585, 585, 585, 585, 585, 585, 3139, 585, 585, 3142, 585, 585, 585, 585, 585, 1930, 585, 585, 585, 585, 585, 585, 585, 585, 1941, 585, 585, 585, 585, 585, 1948, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3263, 585, 585, 585, 585, 0, 0, 0, 0, 3179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 3192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 2808, 3201, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1359, 540, 3213, 540, 540, 540, 540, 540, 540, 540, 3218, 540, 3220, 540, 540, 540, 540, 540, 540, 561, 3227, 561, 561, 561, 3230, 561, 561, 561, 561, 561, 982, 561, 0, 585, 585, 585, 585, 999, 585, 585, 585, 561, 561, 3246, 561, 3248, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 3537, 585, 585, 585, 585, 3256, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3278, 585, 585, 3268, 585, 585, 585, 585, 585, 585, 585, 585, 3274, 585, 3276, 585, 585, 561, 3370, 540, 3371, 561, 3372, 585, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 540, 540, 3328, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3233, 561, 561, 561, 561, 3340, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3346, 561, 0, 994, 1075, 1039, 585, 585, 78112, 1079, 0, 0, 1081, 1085, 0, 0, 1089, 3358, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3364, 585, 585, 585, 585, 585, 585, 585, 1981, 1982, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2951, 540, 2953, 561, 561, 561, 3654, 3655, 561, 561, 585, 585, 3658, 3659, 585, 585, 0, 0, 0, 0, 0, 0, 1126, 0, 0, 0, 1130, 1131, 0, 0, 0, 0, 0, 0, 1141, 0, 1143, 0, 0, 362, 362, 0, 0, 0, 691, 0, 0, 0, 0, 696, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1154, 0, 0, 0, 0, 0, 1160, 0, 1162, 0, 758, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 758, 758, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 585, 999, 926, 540, 540, 540, 540, 910, 561, 561, 561, 561, 561, 1880, 1881, 1882, 561, 561, 1885, 1886, 561, 561, 561, 561, 561, 1896, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2603, 561, 2605, 561, 561, 561, 982, 0, 585, 585, 585, 585, 1055, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 375, 0, 378, 0, 0, 0, 378, 0, 0, 0, 0, 1709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1619, 0, 0, 585, 585, 585, 2010, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 3066, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2600, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 987, 585, 585, 585, 585, 585, 0, 2039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1178, 0, 540, 540, 540, 2172, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2238, 2584, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2255, 0, 0, 0, 0, 2461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 3288, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1184, 1184, 561, 561, 561, 561, 3350, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2939, 585, 585, 585, 585, 3368, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 394, 0, 0, 467, 467, 485, 493, 493, 485, 493, 493, 493, 493, 493, 493, 493, 493, 518, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 535, 526, 526, 526, 526, 526, 548, 570, 548, 570, 548, 548, 570, 548, 594, 570, 570, 570, 570, 570, 570, 570, 594, 594, 594, 548, 594, 594, 594, 594, 594, 570, 570, 548, 570, 594, 570, 594, 1, 12290, 3, 78112, 767, 0, 0, 771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1704, 0, 0, 0, 821, 0, 0, 0, 798, 0, 0, 821, 0, 0, 0, 0, 0, 821, 821, 0, 0, 0, 0, 805, 0, 0, 786, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 839, 794, 0, 0, 839, 0, 0, 0, 0, 808, 0, 0, 692, 0, 0, 672, 0, 692, 0, 813, 675, 676, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 540, 867, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 911, 540, 540, 540, 540, 2215, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1756, 540, 540, 540, 540, 983, 0, 585, 585, 585, 1077, 1056, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 412, 412, 0, 0, 0, 0, 0, 412, 0, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1621, 0, 0, 1241, 0, 0, 0, 0, 0, 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, 0, 540, 1305, 540, 540, 540, 540, 540, 540, 540, 1313, 540, 540, 540, 540, 540, 540, 540, 540, 3332, 540, 561, 561, 561, 561, 561, 561, 935, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3094, 561, 3096, 561, 561, 561, 561, 561, 561, 1340, 540, 540, 1344, 540, 540, 540, 540, 540, 1350, 540, 540, 540, 1357, 540, 540, 540, 540, 540, 3458, 540, 3460, 3461, 540, 3463, 540, 561, 561, 561, 561, 561, 2262, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1399, 561, 561, 561, 561, 561, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1375, 561, 561, 561, 561, 1848, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2868, 561, 561, 561, 561, 561, 1441, 561, 561, 561, 1448, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 1998, 585, 585, 585, 585, 585, 2003, 585, 585, 1485, 585, 585, 585, 585, 585, 585, 585, 1493, 585, 585, 585, 585, 585, 585, 585, 585, 3261, 585, 585, 585, 585, 585, 585, 585, 585, 3272, 585, 585, 585, 585, 585, 585, 585, 585, 3283, 540, 585, 561, 540, 540, 561, 561, 585, 1522, 585, 585, 1526, 585, 585, 585, 585, 585, 1532, 585, 585, 585, 1539, 585, 585, 585, 585, 585, 1996, 1997, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1531, 585, 585, 585, 585, 585, 585, 0, 0, 0, 1595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1716, 0, 0, 0, 0, 0, 1656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1665, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1653, 0, 0, 0, 1722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1729, 0, 0, 0, 0, 0, 0, 1706, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3398, 540, 3400, 540, 561, 561, 1893, 561, 561, 561, 561, 561, 561, 1901, 561, 561, 561, 561, 561, 561, 1410, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1428, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1917, 26027, 0, 1922, 585, 1924, 585, 561, 561, 561, 1910, 1912, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 585, 2335, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 3622, 0, 3624, 0, 0, 540, 585, 585, 585, 585, 1978, 585, 585, 585, 585, 585, 585, 585, 585, 1987, 585, 585, 585, 585, 585, 585, 2934, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2407, 561, 540, 585, 585, 561, 585, 585, 585, 585, 1995, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2004, 2006, 0, 0, 0, 2078, 0, 0, 0, 2081, 0, 0, 0, 0, 0, 2087, 0, 0, 0, 0, 0, 2774, 0, 0, 0, 2778, 0, 2780, 0, 0, 0, 0, 0, 0, 2746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 2103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1265, 0, 0, 0, 0, 561, 561, 561, 561, 561, 2249, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1519, 585, 585, 2346, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2919, 585, 2448, 0, 0, 0, 0, 0, 0, 0, 0, 2453, 0, 0, 2456, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 2460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2471, 0, 0, 0, 2485, 2486, 0, 0, 2489, 0, 0, 2492, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 417, 417, 0, 0, 65536, 417, 0, 0, 2499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2510, 0, 0, 0, 0, 815, 0, 812, 795, 0, 0, 817, 0, 667, 0, 791, 0, 0, 0, 0, 1096, 0, 0, 1098, 0, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 540, 2524, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1789, 540, 540, 540, 540, 540, 2551, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2559, 540, 540, 2562, 540, 540, 540, 540, 540, 540, 2569, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3323, 540, 540, 540, 540, 540, 540, 2576, 540, 540, 540, 2579, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 561, 2586, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3254, 561, 561, 561, 585, 585, 585, 585, 585, 2672, 585, 585, 585, 585, 585, 585, 2677, 585, 585, 585, 585, 561, 0, 3646, 0, 0, 0, 540, 540, 540, 540, 540, 540, 2529, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2842, 540, 540, 540, 540, 540, 585, 585, 585, 2683, 585, 585, 585, 585, 585, 585, 2690, 585, 585, 585, 585, 585, 585, 585, 2351, 585, 585, 585, 585, 585, 585, 585, 585, 1508, 585, 585, 585, 585, 585, 585, 585, 585, 2697, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2704, 585, 585, 585, 2707, 0, 0, 0, 0, 2735, 0, 0, 0, 0, 0, 0, 0, 2739, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 2528, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2234, 540, 540, 540, 540, 0, 540, 540, 540, 2811, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2821, 540, 540, 540, 540, 540, 2836, 540, 540, 540, 2839, 540, 2841, 540, 540, 540, 540, 540, 540, 540, 540, 3520, 561, 561, 561, 561, 561, 561, 561, 1450, 26027, 1360, 987, 585, 585, 585, 585, 585, 2845, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 2853, 561, 561, 561, 561, 561, 1913, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 2333, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1050, 585, 585, 585, 585, 561, 561, 2858, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2284, 561, 561, 561, 2874, 2875, 561, 561, 561, 561, 2878, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1005, 585, 561, 561, 561, 2884, 561, 561, 561, 2887, 561, 2889, 561, 561, 561, 561, 561, 561, 1449, 561, 26027, 1360, 987, 1453, 585, 585, 585, 585, 2893, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 2901, 585, 585, 585, 585, 585, 585, 585, 3121, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 3285, 561, 3287, 585, 2906, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3367, 585, 585, 2922, 2923, 585, 585, 585, 585, 2926, 585, 585, 585, 585, 585, 585, 585, 585, 3592, 561, 0, 0, 0, 0, 3595, 0, 585, 585, 585, 2932, 585, 585, 585, 2935, 585, 2937, 585, 585, 585, 585, 585, 585, 585, 1933, 585, 585, 585, 585, 1939, 585, 585, 585, 2941, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 2963, 0, 0, 0, 0, 0, 585, 585, 2957, 0, 0, 2960, 2961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 3009, 0, 0, 3012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200253, 151552, 2200253, 0, 0, 0, 151552, 540, 540, 540, 540, 3037, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3325, 540, 540, 540, 540, 540, 540, 540, 3051, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3465, 561, 561, 561, 561, 561, 561, 3077, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1887, 1888, 561, 561, 561, 561, 561, 561, 3092, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3480, 585, 585, 585, 585, 561, 561, 585, 585, 585, 585, 3108, 585, 585, 585, 585, 3112, 585, 585, 585, 585, 585, 585, 585, 3135, 585, 3137, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3552, 0, 0, 0, 585, 585, 585, 3118, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1512, 585, 585, 585, 585, 585, 585, 585, 3133, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2917, 585, 585, 2920, 0, 0, 3168, 3169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2071, 0, 0, 0, 540, 540, 540, 540, 3329, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3412, 561, 561, 3336, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2285, 3347, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3354, 585, 585, 585, 585, 585, 585, 2404, 585, 585, 585, 585, 561, 2178, 585, 2346, 2261, 3389, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2534, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 3447, 3448, 0, 540, 540, 540, 540, 2527, 540, 540, 540, 540, 2531, 540, 540, 540, 540, 540, 540, 540, 1312, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1784, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3473, 561, 3475, 3476, 561, 3478, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254413, 0, 0, 0, 0, 0, 585, 585, 585, 3488, 585, 3490, 3491, 585, 3493, 585, 3495, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 313, 314, 314, 419, 420, 65536, 427, 585, 585, 3617, 585, 3618, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 904, 540, 561, 561, 561, 976, 561, 561, 585, 585, 3673, 3674, 3675, 3676, 0, 540, 561, 585, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 1563, 0, 0, 0, 1569, 0, 0, 0, 0, 0, 2789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, 0, 0, 0, 571, 571, 571, 571, 571, 571, 571, 595, 595, 595, 540, 595, 595, 595, 595, 595, 571, 571, 540, 571, 595, 571, 595, 1, 12290, 3, 78112, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1707, 0, 0, 2040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, 2170, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2253, 561, 561, 561, 561, 926, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2307, 561, 561, 561, 2310, 400, 0, 0, 0, 0, 378, 0, 69632, 73728, 0, 0, 0, 0, 423, 65536, 0, 0, 0, 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1687, 0, 1689, 0, 0, 423, 423, 0, 423, 0, 437, 423, 0, 423, 468, 468, 468, 475, 468, 468, 468, 468, 468, 468, 468, 468, 475, 468, 468, 468, 468, 468, 468, 468, 468, 482, 468, 494, 494, 468, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 537, 549, 572, 549, 572, 549, 549, 572, 549, 596, 572, 572, 572, 572, 572, 572, 572, 596, 596, 596, 549, 596, 596, 596, 596, 596, 572, 572, 549, 572, 596, 572, 596, 1, 12290, 3, 78112, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, 0, 830, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 742, 661, 0, 0, 0, 0, 0, 540, 847, 540, 540, 540, 540, 540, 540, 3330, 540, 540, 540, 561, 561, 561, 561, 561, 3335, 861, 540, 540, 540, 540, 540, 540, 540, 540, 540, 897, 540, 540, 540, 540, 540, 540, 540, 1799, 540, 540, 540, 540, 540, 540, 1807, 540, 561, 561, 916, 561, 561, 561, 931, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2266, 561, 561, 561, 561, 561, 561, 0, 0, 0, 540, 989, 585, 561, 540, 540, 897, 540, 540, 561, 561, 969, 561, 561, 561, 561, 561, 0, 585, 585, 989, 585, 585, 585, 1004, 585, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1101, 1102, 0, 0, 0, 0, 0, 0, 1203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 0, 0, 540, 540, 540, 1308, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3222, 540, 540, 1360, 914, 561, 1363, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1376, 1383, 561, 561, 561, 1444, 561, 561, 561, 561, 26027, 1360, 987, 585, 1454, 585, 585, 585, 585, 585, 585, 2659, 585, 585, 2662, 2663, 585, 585, 585, 585, 585, 585, 585, 2712, 540, 585, 585, 561, 540, 540, 540, 540, 585, 585, 1488, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3128, 585, 1521, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1535, 585, 585, 585, 585, 585, 585, 2673, 585, 585, 585, 2676, 585, 585, 2678, 585, 2679, 561, 585, 585, 1521, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 1826, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1841, 1842, 585, 585, 2009, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 1849, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2880, 561, 561, 561, 561, 561, 2063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2074, 540, 540, 2226, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 2854, 561, 561, 561, 561, 561, 561, 2301, 561, 561, 561, 561, 561, 561, 2306, 561, 561, 561, 561, 561, 561, 3079, 561, 561, 561, 561, 561, 3085, 561, 561, 3088, 2311, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 2654, 585, 585, 585, 585, 585, 2374, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3140, 585, 585, 585, 585, 2386, 585, 585, 585, 585, 585, 585, 2391, 585, 585, 585, 585, 585, 2396, 585, 585, 585, 585, 585, 2012, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 2624, 561, 561, 561, 561, 561, 561, 2632, 561, 561, 561, 561, 561, 2288, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2631, 561, 561, 561, 561, 561, 2435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2114, 0, 0, 0, 0, 2476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 2732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1590, 1591, 0, 0, 0, 2772, 0, 0, 0, 0, 2777, 0, 0, 0, 0, 0, 0, 0, 540, 562, 540, 562, 540, 540, 562, 540, 586, 540, 540, 2810, 540, 540, 540, 540, 540, 540, 2818, 540, 540, 540, 540, 540, 540, 540, 889, 540, 540, 540, 540, 907, 540, 540, 540, 540, 540, 540, 540, 2849, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1836, 561, 561, 561, 561, 561, 2857, 561, 561, 561, 561, 561, 561, 2865, 561, 561, 561, 561, 561, 561, 561, 561, 3081, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2897, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 1467, 1474, 585, 585, 585, 585, 585, 585, 585, 585, 3621, 0, 0, 0, 0, 0, 0, 540, 2905, 585, 585, 585, 585, 585, 585, 2913, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1983, 585, 585, 1986, 585, 585, 585, 585, 585, 585, 585, 2945, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 3376, 0, 585, 3280, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 3155, 0, 0, 585, 585, 585, 3587, 585, 3589, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 2791, 0, 0, 0, 2793, 0, 0, 0, 0, 0, 0, 0, 0, 3600, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1314, 540, 540, 540, 540, 3607, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3614, 585, 585, 585, 585, 585, 585, 2686, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1045, 585, 585, 585, 585, 585, 972, 561, 3653, 561, 561, 561, 561, 585, 3657, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 1204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 345, 469, 469, 469, 453, 453, 469, 453, 453, 453, 453, 453, 453, 453, 453, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 550, 573, 550, 573, 550, 550, 573, 550, 597, 573, 573, 573, 573, 573, 573, 573, 597, 597, 597, 550, 597, 597, 597, 597, 597, 573, 573, 550, 573, 597, 573, 597, 1, 12290, 3, 78112, 862, 540, 540, 876, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1315, 540, 540, 540, 585, 1019, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 3498, 0, 0, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1607, 0, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2111, 0, 0, 0, 540, 1341, 540, 540, 540, 540, 540, 1348, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3333, 561, 561, 561, 561, 561, 585, 585, 585, 585, 1505, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3365, 585, 585, 585, 585, 585, 1523, 585, 585, 585, 585, 585, 1530, 585, 585, 585, 585, 585, 585, 585, 1468, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2378, 585, 585, 585, 585, 585, 585, 561, 585, 585, 585, 1557, 585, 1079, 0, 1561, 0, 0, 0, 1567, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1573, 0, 0, 0, 1579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 1695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2127, 0, 0, 0, 540, 1762, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1358, 540, 1843, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1854, 561, 561, 561, 561, 561, 561, 3239, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3578, 561, 561, 585, 585, 585, 585, 0, 2064, 2065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 2135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 2186, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1808, 540, 540, 2213, 540, 540, 540, 540, 2218, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1754, 540, 540, 540, 540, 540, 540, 2240, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1401, 561, 561, 2298, 561, 561, 561, 561, 2303, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3083, 561, 561, 561, 561, 561, 585, 585, 585, 2388, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1938, 585, 585, 585, 3034, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2210, 0, 0, 0, 3380, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1175, 0, 0, 0, 0, 540, 540, 3404, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2282, 561, 561, 561, 561, 561, 561, 561, 3419, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1049, 585, 585, 585, 585, 561, 540, 3454, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3523, 561, 561, 561, 3469, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 3484, 385, 387, 337, 0, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2057, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1139, 1140, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 438, 0, 444, 0, 470, 470, 470, 470, 470, 470, 470, 551, 574, 551, 574, 551, 551, 574, 551, 598, 480, 470, 470, 470, 499, 476, 499, 499, 499, 499, 499, 499, 499, 499, 470, 470, 476, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 480, 470, 481, 480, 470, 470, 470, 470, 574, 574, 574, 574, 574, 574, 574, 598, 598, 598, 551, 598, 598, 598, 598, 598, 574, 574, 551, 574, 598, 574, 598, 1, 12290, 3, 78112, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2153, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 0, 0, 1223, 0, 0, 0, 0, 0, 0, 663, 0, 791, 0, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 2972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2097, 0, 2099, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 717, 0, 0, 0, 831, 0, 0, 0, 663, 834, 0, 791, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 2996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2429, 2430, 0, 0, 0, 0, 863, 540, 540, 877, 540, 540, 540, 888, 540, 540, 540, 540, 906, 540, 540, 540, 540, 540, 1311, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2843, 540, 540, 540, 540, 561, 561, 917, 561, 561, 561, 933, 561, 561, 947, 561, 561, 561, 561, 960, 561, 0, 995, 585, 1076, 1046, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2686976, 2736128, 0, 0, 2531328, 2707456, 0, 3190784, 561, 561, 561, 978, 561, 561, 561, 0, 585, 585, 990, 585, 585, 585, 1006, 585, 585, 585, 585, 585, 2349, 585, 585, 585, 585, 2354, 585, 585, 585, 585, 585, 585, 585, 2377, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 585, 1020, 585, 585, 585, 585, 1033, 585, 585, 585, 585, 1051, 585, 585, 585, 561, 540, 585, 561, 3149, 540, 3151, 561, 3153, 585, 0, 0, 0, 0, 0, 0, 1660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 990, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3067, 561, 561, 561, 561, 3071, 561, 561, 561, 561, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2431, 0, 2433, 0, 1238, 0, 0, 0, 0, 1270, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 3561, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 540, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1491, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1495, 585, 585, 585, 585, 561, 585, 585, 1556, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1100, 0, 0, 0, 0, 0, 0, 1622, 0, 0, 1625, 0, 1627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, 540, 540, 540, 540, 859, 540, 1744, 540, 540, 540, 540, 540, 540, 540, 540, 1755, 540, 540, 540, 540, 540, 540, 540, 2176, 540, 540, 2180, 540, 540, 540, 2184, 540, 561, 561, 561, 1847, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2294, 561, 561, 561, 0, 0, 2117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 0, 0, 0, 0, 2148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 0, 0, 0, 0, 0, 0, 0, 561, 561, 561, 561, 2248, 561, 561, 561, 561, 561, 561, 561, 561, 3095, 3097, 561, 561, 561, 3100, 561, 3102, 561, 561, 2313, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 2651, 585, 585, 585, 585, 585, 585, 585, 2660, 585, 585, 585, 585, 585, 2665, 585, 585, 2398, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 2410, 585, 561, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 3669, 540, 3670, 0, 2436, 0, 0, 0, 0, 0, 0, 2441, 0, 0, 0, 2444, 2445, 0, 0, 0, 0, 0, 3010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, 2497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2506, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 163840, 0, 0, 0, 0, 65536, 0, 2512, 0, 0, 0, 0, 2515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2523, 540, 2536, 2537, 540, 540, 540, 540, 540, 2542, 540, 2544, 540, 540, 540, 540, 2548, 561, 2595, 561, 561, 2598, 2599, 561, 561, 561, 561, 561, 2604, 561, 2606, 561, 561, 561, 561, 1863, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2890, 561, 561, 561, 561, 561, 561, 561, 2610, 561, 561, 561, 561, 561, 561, 561, 561, 2616, 561, 561, 561, 561, 561, 2276, 561, 561, 2279, 561, 561, 561, 561, 561, 561, 561, 1915, 561, 561, 26027, 1920, 585, 585, 585, 585, 2636, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2608, 2668, 585, 2670, 585, 585, 585, 585, 2674, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2675, 585, 585, 585, 585, 585, 585, 2680, 585, 585, 585, 585, 585, 585, 585, 585, 2688, 585, 585, 585, 585, 585, 585, 585, 1950, 585, 585, 585, 585, 1954, 585, 585, 585, 2696, 585, 585, 585, 585, 2700, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1494, 585, 585, 585, 585, 585, 561, 2720, 561, 561, 585, 2722, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 2770, 0, 0, 0, 2773, 0, 0, 2776, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1691, 0, 2786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2795, 0, 0, 0, 0, 0, 3171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1245, 0, 0, 0, 0, 0, 540, 2825, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1773, 540, 540, 2835, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2844, 540, 540, 2847, 540, 540, 2850, 540, 0, 0, 2851, 561, 561, 561, 561, 561, 561, 1851, 561, 561, 561, 561, 1855, 561, 561, 561, 561, 561, 2883, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2892, 561, 561, 2895, 561, 561, 2898, 561, 0, 0, 2899, 585, 585, 585, 585, 585, 585, 585, 1965, 585, 585, 585, 1970, 585, 585, 585, 585, 585, 2931, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2940, 585, 585, 2943, 585, 585, 2946, 585, 561, 2948, 585, 2949, 2950, 540, 540, 561, 561, 561, 561, 1878, 561, 561, 561, 561, 1884, 561, 561, 561, 561, 561, 561, 936, 561, 561, 561, 561, 561, 561, 561, 561, 561, 984, 0, 585, 585, 585, 585, 585, 585, 1007, 585, 0, 2968, 2969, 0, 0, 0, 0, 2974, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 331, 331, 0, 0, 0, 0, 3020, 0, 0, 540, 540, 3025, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3043, 540, 540, 540, 540, 540, 540, 540, 3050, 540, 540, 3052, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1352, 540, 540, 540, 540, 540, 561, 561, 561, 3091, 561, 561, 3093, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2602, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 3106, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1496, 585, 585, 585, 1500, 585, 585, 585, 3132, 585, 585, 3134, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1040, 585, 585, 585, 585, 585, 967, 3158, 0, 0, 0, 3162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 0, 1225, 0, 3190, 0, 0, 3193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 2166, 540, 540, 540, 540, 540, 3214, 540, 540, 540, 540, 540, 540, 540, 3219, 540, 540, 540, 540, 540, 540, 540, 2541, 540, 2543, 540, 540, 540, 540, 540, 540, 540, 540, 2581, 540, 540, 540, 540, 0, 2584, 0, 561, 561, 561, 3236, 3237, 561, 561, 561, 561, 561, 3241, 561, 561, 561, 561, 561, 561, 3250, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 3536, 585, 585, 585, 585, 561, 561, 561, 3247, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 3481, 585, 3483, 585, 585, 585, 585, 3269, 585, 585, 585, 585, 585, 585, 585, 585, 3275, 585, 585, 585, 585, 585, 585, 2701, 585, 585, 585, 585, 585, 585, 585, 2706, 585, 0, 0, 3308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 856, 540, 585, 3359, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1057, 561, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 3386, 0, 0, 0, 0, 0, 1169, 0, 1171, 0, 0, 0, 0, 1176, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 585, 3429, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 3437, 0, 0, 0, 0, 0, 3300, 0, 3176, 3302, 0, 0, 3305, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 703, 0, 0, 3440, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 3452, 540, 540, 540, 540, 3457, 540, 540, 540, 540, 3462, 540, 540, 561, 561, 3467, 561, 0, 997, 1037, 585, 1048, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 783, 0, 0, 561, 561, 561, 3472, 561, 561, 561, 561, 3477, 561, 561, 585, 585, 3482, 585, 585, 585, 585, 585, 585, 3259, 3260, 585, 585, 585, 585, 3264, 3265, 585, 585, 585, 585, 585, 585, 3120, 585, 585, 585, 585, 585, 3126, 585, 585, 3129, 585, 585, 3487, 585, 585, 585, 585, 3492, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 167936, 0, 0, 0, 0, 65536, 0, 3499, 0, 0, 0, 0, 0, 3505, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3397, 540, 540, 540, 540, 540, 540, 540, 540, 3517, 540, 540, 3519, 561, 561, 561, 561, 561, 561, 561, 561, 3252, 561, 561, 561, 561, 561, 561, 585, 561, 561, 561, 3530, 561, 561, 3532, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1042, 585, 585, 585, 585, 585, 969, 585, 585, 3543, 585, 585, 3545, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, 362, 362, 0, 1147, 0, 540, 540, 3629, 3630, 540, 540, 561, 561, 561, 3635, 3636, 561, 561, 585, 585, 585, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 3641, 3642, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3395, 540, 540, 540, 540, 540, 540, 3401, 561, 561, 585, 585, 0, 540, 561, 585, 0, 540, 561, 585, 3681, 3682, 3683, 3684, 339, 340, 341, 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2469, 0, 2470, 0, 342, 342, 343, 342, 0, 341, 342, 445, 454, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 486, 495, 495, 503, 495, 505, 495, 495, 505, 505, 495, 505, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 552, 575, 552, 575, 552, 552, 575, 552, 599, 575, 575, 575, 575, 575, 575, 575, 599, 599, 599, 552, 599, 599, 599, 599, 599, 575, 575, 552, 575, 599, 575, 599, 1, 12290, 3, 78112, 0, 0, 0, 646, 0, 0, 0, 0, 651, 652, 653, 654, 655, 656, 657, 0, 0, 0, 0, 1144, 0, 0, 1259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2957312, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 699, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 800, 0, 0, 0, 0, 721, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 0, 0, 0, 646, 752, 753, 754, 0, 0, 0, 0, 0, 760, 761, 0, 0, 0, 0, 0, 0, 1271, 0, 0, 0, 0, 0, 0, 540, 540, 540, 3026, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2220, 540, 540, 540, 540, 540, 0, 761, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1219, 0, 0, 0, 0, 0, 0, 0, 723, 0, 692, 814, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 558, 581, 558, 581, 558, 558, 581, 558, 605, 0, 754, 823, 824, 0, 0, 0, 0, 0, 0, 754, 0, 0, 828, 699, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 835, 0, 0, 0, 692, 699, 0, 0, 692, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 540, 540, 853, 857, 860, 540, 868, 540, 540, 882, 884, 887, 540, 540, 540, 898, 902, 540, 540, 540, 540, 540, 540, 1766, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1786, 540, 540, 540, 540, 540, 561, 561, 561, 923, 927, 930, 561, 938, 561, 561, 561, 953, 955, 958, 561, 561, 561, 561, 1879, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2641, 561, 561, 561, 561, 561, 561, 561, 561, 2648, 0, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2717, 540, 540, 540, 585, 585, 585, 1026, 1028, 1031, 585, 585, 585, 1043, 1047, 585, 585, 585, 585, 970, 0, 0, 0, 1060, 585, 1062, 1063, 853, 540, 898, 902, 1068, 923, 561, 970, 974, 561, 561, 561, 561, 0, 585, 585, 585, 996, 1000, 1003, 585, 1011, 1073, 0, 996, 585, 1043, 1047, 1078, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 560, 583, 560, 583, 560, 560, 583, 560, 607, 0, 0, 1199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 1231, 0, 0, 0, 0, 1236, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 422, 65536, 0, 540, 1322, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1331, 540, 540, 1338, 540, 540, 540, 540, 2228, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 2852, 561, 561, 561, 561, 561, 561, 561, 561, 1422, 561, 561, 1429, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2879, 561, 561, 561, 561, 561, 561, 561, 1442, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 2925, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 3436, 0, 3438, 0, 585, 1503, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1513, 585, 585, 1520, 1667, 0, 1669, 0, 0, 0, 1671, 0, 748, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 0, 1602, 0, 0, 0, 0, 0, 0, 540, 1738, 540, 540, 540, 540, 540, 540, 540, 2584, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1839, 561, 561, 561, 1743, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2238, 540, 1776, 540, 540, 1781, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1353, 540, 540, 540, 540, 0, 561, 1829, 561, 561, 561, 561, 561, 561, 1835, 561, 561, 561, 561, 561, 561, 1864, 561, 561, 561, 1868, 561, 561, 1873, 561, 561, 1907, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 1923, 585, 585, 585, 585, 585, 585, 3270, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1968, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1929, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1511, 585, 585, 585, 585, 585, 1958, 585, 585, 585, 1962, 585, 585, 1967, 585, 585, 585, 585, 585, 585, 585, 1469, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2392, 585, 585, 585, 2395, 585, 585, 0, 1086, 0, 0, 0, 2034, 0, 1090, 0, 0, 0, 2036, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 585, 585, 585, 585, 2362, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1534, 585, 585, 585, 585, 2585, 0, 1826, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2271, 585, 585, 585, 2710, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 1814, 540, 540, 540, 540, 1820, 540, 540, 540, 1360, 0, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1649, 0, 0, 0, 0, 585, 585, 585, 585, 2924, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1937, 585, 585, 585, 585, 561, 561, 3338, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1857, 561, 561, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 3385, 0, 0, 0, 0, 0, 0, 1628, 1629, 1630, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 362, 0, 0, 0, 0, 0, 0, 3402, 540, 540, 540, 561, 561, 561, 3407, 561, 561, 561, 561, 3411, 561, 561, 561, 561, 1391, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1414, 561, 561, 561, 561, 561, 561, 3417, 561, 561, 561, 585, 585, 585, 3422, 585, 585, 585, 585, 3426, 585, 585, 585, 585, 585, 2375, 2376, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1476, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3432, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 1644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 3446, 0, 0, 0, 540, 540, 540, 3392, 540, 540, 540, 540, 3396, 540, 540, 540, 540, 540, 540, 540, 3039, 540, 540, 540, 540, 540, 3045, 540, 540, 540, 540, 3455, 540, 540, 540, 3459, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 2626, 561, 561, 561, 561, 561, 561, 2633, 561, 561, 561, 561, 3470, 561, 561, 561, 3474, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 3111, 585, 585, 585, 585, 585, 585, 3485, 585, 585, 585, 3489, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3603, 540, 3604, 540, 540, 540, 561, 561, 585, 585, 0, 540, 561, 585, 3677, 3678, 3679, 3680, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 0, 1562, 0, 0, 0, 1568, 0, 0, 0, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 300, 0, 0, 0, 0, 386, 0, 0, 0, 390, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 344, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 521, 521, 521, 521, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 553, 576, 553, 576, 553, 553, 576, 553, 600, 576, 576, 576, 576, 576, 576, 576, 600, 600, 600, 553, 600, 600, 600, 600, 600, 576, 576, 617, 622, 600, 622, 628, 1, 12290, 3, 78112, 561, 561, 561, 979, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2927, 585, 585, 585, 585, 585, 585, 0, 0, 0, 540, 1061, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3238, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1433, 561, 561, 561, 561, 561, 1107, 0, 0, 0, 0, 1112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1190, 0, 0, 0, 0, 0, 561, 561, 561, 1389, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2308, 2309, 561, 561, 561, 1403, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2296, 2297, 1440, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 2947, 540, 585, 585, 561, 540, 540, 561, 561, 1574, 0, 0, 0, 1580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1664, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1620, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2110, 0, 0, 0, 0, 561, 561, 561, 1877, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2322, 0, 0, 0, 2052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2155, 0, 2116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1676, 0, 2241, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2295, 561, 561, 561, 561, 2274, 561, 561, 561, 561, 2278, 561, 2280, 561, 561, 561, 561, 561, 561, 1897, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1397, 561, 561, 561, 561, 561, 561, 2359, 585, 585, 585, 585, 2363, 585, 2365, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3123, 585, 3125, 585, 585, 585, 585, 0, 0, 0, 2500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2494, 2495, 0, 0, 561, 2622, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2607, 561, 0, 3021, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2533, 540, 0, 0, 0, 0, 3176, 3382, 0, 0, 3384, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3391, 540, 540, 3393, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1785, 540, 540, 540, 1790, 540, 0, 0, 0, 0, 3176, 0, 3443, 0, 0, 0, 0, 0, 3449, 540, 540, 540, 540, 540, 1782, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2832, 540, 540, 540, 540, 864, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 912, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2447, 0, 0, 1624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2060, 0, 0, 1827, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2620, 345, 345, 347, 345, 0, 0, 345, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 3310, 0, 0, 3312, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 3410, 561, 561, 561, 561, 561, 0, 0, 0, 345, 345, 347, 345, 345, 345, 345, 345, 345, 512, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 554, 577, 554, 577, 554, 554, 577, 554, 601, 577, 577, 577, 577, 577, 577, 577, 601, 601, 601, 554, 601, 601, 601, 601, 601, 577, 577, 554, 577, 601, 577, 601, 1, 12290, 3, 78112, 0, 722, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2508, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1690, 0, 0, 0, 811, 0, 0, 810, 0, 0, 0, 0, 0, 755, 0, 0, 819, 0, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 0, 1181, 540, 540, 540, 540, 540, 1797, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3464, 561, 561, 561, 561, 540, 540, 872, 540, 540, 540, 540, 890, 892, 540, 540, 903, 540, 540, 540, 540, 540, 540, 2175, 540, 2177, 540, 540, 540, 540, 540, 540, 2185, 561, 561, 918, 924, 561, 561, 561, 561, 942, 561, 561, 561, 561, 561, 962, 964, 561, 561, 975, 561, 561, 561, 561, 0, 585, 585, 991, 997, 585, 585, 585, 585, 585, 585, 585, 3271, 585, 585, 585, 585, 585, 585, 3277, 585, 1015, 585, 585, 585, 585, 585, 1035, 1037, 585, 585, 1048, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 3650, 3651, 540, 540, 0, 0, 0, 540, 991, 585, 561, 854, 892, 540, 903, 540, 924, 964, 561, 975, 0, 0, 0, 1151, 0, 1153, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1706, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1731, 0, 1212, 1213, 0, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 540, 540, 1307, 1309, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1316, 540, 540, 1319, 540, 540, 1343, 540, 540, 540, 540, 540, 540, 540, 540, 1354, 1355, 540, 540, 540, 540, 540, 1813, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 1360, 914, 561, 561, 561, 1366, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1921, 585, 585, 585, 585, 561, 561, 1420, 561, 561, 561, 561, 561, 561, 561, 1434, 561, 561, 561, 561, 561, 561, 3342, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3080, 561, 561, 561, 561, 561, 561, 561, 561, 2319, 561, 561, 561, 561, 0, 0, 0, 561, 561, 561, 1445, 1446, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 1457, 585, 585, 585, 585, 585, 2403, 585, 585, 585, 585, 585, 561, 2409, 585, 2411, 2412, 585, 1487, 1489, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3366, 585, 585, 585, 585, 1525, 585, 585, 585, 585, 585, 585, 585, 585, 1536, 1537, 585, 585, 585, 585, 585, 585, 3434, 585, 561, 540, 561, 585, 0, 0, 0, 3439, 585, 1542, 0, 540, 585, 585, 561, 540, 1547, 540, 540, 1550, 561, 1551, 561, 561, 561, 561, 1895, 561, 561, 561, 1900, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 988, 585, 585, 585, 585, 585, 1554, 585, 1555, 585, 585, 1558, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2069, 0, 0, 0, 0, 2073, 0, 0, 1678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2037, 0, 0, 0, 1694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2072, 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2051, 0, 0, 561, 561, 561, 561, 561, 561, 1833, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 561, 1908, 561, 561, 561, 561, 1914, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 2334, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2938, 585, 585, 585, 585, 585, 585, 585, 1927, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1055, 585, 561, 585, 585, 585, 1994, 585, 585, 585, 585, 585, 585, 585, 585, 2002, 585, 585, 585, 585, 585, 585, 2711, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 2217, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1802, 540, 540, 540, 540, 540, 585, 2008, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 2261, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2891, 561, 561, 561, 561, 0, 2076, 0, 0, 0, 0, 0, 0, 0, 0, 2084, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 266240, 0, 0, 0, 0, 65536, 0, 2088, 0, 0, 2090, 0, 0, 0, 0, 0, 0, 0, 2098, 0, 0, 0, 0, 0, 0, 1725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 2146, 0, 0, 0, 2146, 0, 0, 2151, 2152, 0, 0, 0, 0, 0, 0, 0, 274432, 274432, 274432, 0, 274432, 274432, 274432, 274432, 274432, 2156, 0, 0, 0, 0, 0, 0, 0, 2162, 540, 540, 540, 540, 540, 2168, 540, 540, 540, 540, 2538, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1821, 540, 540, 1360, 540, 2200, 540, 2203, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2209, 540, 540, 540, 540, 2578, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 2244, 561, 561, 561, 561, 561, 561, 2251, 561, 561, 561, 561, 561, 561, 3351, 585, 585, 585, 585, 585, 585, 585, 3356, 585, 561, 561, 2300, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2323, 0, 0, 0, 2329, 585, 585, 585, 585, 585, 585, 2336, 585, 585, 585, 585, 585, 585, 585, 1470, 585, 585, 585, 585, 1480, 585, 585, 585, 585, 585, 2360, 585, 585, 585, 585, 585, 585, 2366, 585, 2368, 585, 2371, 585, 585, 585, 585, 585, 585, 3546, 0, 0, 3549, 3550, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2912256, 0, 3207168, 2465792, 0, 0, 2385, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1989, 2472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2480, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 1, 12290, 3, 0, 0, 0, 0, 0, 2514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2522, 0, 0, 0, 0, 1575, 0, 0, 0, 0, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 172032, 0, 0, 0, 0, 65536, 0, 561, 561, 2596, 561, 561, 561, 561, 561, 2601, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 992, 585, 585, 585, 585, 585, 585, 2681, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1956, 585, 2719, 561, 561, 561, 2721, 585, 585, 585, 2723, 2724, 0, 0, 0, 0, 0, 0, 0, 2801, 0, 0, 0, 540, 2805, 540, 540, 540, 2742, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2100, 0, 0, 0, 0, 2758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2128, 0, 0, 540, 2809, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2223, 2224, 540, 2846, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 561, 2855, 561, 2856, 561, 2894, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 585, 2903, 585, 2904, 585, 2942, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 3374, 0, 0, 3377, 0, 0, 0, 540, 3024, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1771, 540, 540, 540, 540, 561, 561, 585, 3105, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2369, 585, 585, 585, 585, 585, 3145, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 2066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 297, 0, 0, 0, 0, 0, 0, 0, 3390, 540, 540, 540, 540, 3394, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2179, 540, 540, 540, 540, 540, 540, 540, 3403, 540, 540, 3405, 561, 561, 561, 561, 3409, 561, 561, 561, 561, 561, 561, 2277, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3082, 561, 3084, 561, 561, 561, 561, 561, 561, 561, 3418, 561, 561, 3420, 585, 585, 585, 585, 3424, 585, 585, 585, 585, 585, 585, 585, 3591, 585, 561, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 3303, 0, 0, 0, 0, 3307, 0, 585, 585, 585, 585, 585, 3433, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1129, 0, 0, 0, 0, 0, 0, 0, 3500, 0, 3502, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 3511, 540, 540, 540, 540, 2812, 540, 2815, 540, 540, 540, 540, 2820, 540, 540, 540, 2823, 540, 540, 540, 540, 3631, 540, 561, 561, 561, 561, 561, 3637, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 0, 1564, 0, 0, 0, 1570, 0, 585, 585, 3643, 585, 561, 3645, 0, 3647, 0, 0, 540, 540, 540, 540, 540, 540, 540, 1286, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3208, 540, 540, 540, 540, 540, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2496, 398, 0, 0, 0, 0, 0, 365, 373, 401, 0, 0, 0, 0, 0, 365, 0, 0, 393, 0, 0, 0, 0, 348, 0, 0, 365, 0, 393, 0, 406, 408, 0, 0, 365, 373, 0, 69632, 73728, 0, 0, 0, 0, 424, 65536, 0, 0, 0, 0, 1596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 424, 424, 0, 424, 0, 408, 424, 447, 455, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 644, 0, 406, 0, 496, 496, 0, 496, 496, 496, 496, 496, 496, 496, 496, 522, 522, 522, 522, 455, 455, 455, 530, 455, 531, 455, 455, 522, 536, 522, 522, 522, 522, 538, 555, 578, 555, 578, 555, 555, 578, 555, 602, 578, 578, 578, 608, 608, 608, 578, 602, 602, 602, 555, 602, 602, 602, 602, 602, 578, 578, 618, 623, 602, 623, 629, 1, 12290, 3, 78112, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2769, 0, 0, 0, 694, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 2440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142, 2143, 0, 540, 540, 540, 878, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1332, 540, 540, 540, 561, 561, 919, 561, 561, 561, 561, 561, 561, 948, 950, 561, 561, 561, 561, 561, 561, 3575, 561, 3577, 561, 561, 561, 585, 585, 585, 585, 0, 0, 1563, 0, 0, 0, 0, 0, 1569, 0, 585, 1021, 1023, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 3496, 0, 3497, 0, 0, 0, 0, 0, 540, 992, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3341, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3579, 561, 585, 585, 585, 585, 0, 0, 0, 1098, 1230, 0, 0, 0, 0, 0, 0, 1237, 0, 0, 0, 0, 0, 0, 2452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1242, 1251, 540, 540, 1280, 540, 540, 540, 1284, 540, 540, 1295, 540, 540, 1299, 540, 540, 540, 540, 540, 2229, 540, 2231, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1840, 561, 561, 1360, 914, 561, 561, 561, 561, 561, 561, 1369, 561, 561, 561, 1373, 561, 561, 1384, 561, 561, 1388, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2324, 0, 0, 561, 561, 1405, 561, 561, 561, 1409, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3612, 3613, 561, 585, 585, 585, 585, 585, 1460, 585, 585, 585, 1464, 585, 585, 1475, 585, 585, 1479, 585, 585, 585, 585, 585, 585, 1032, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 3625, 0, 540, 0, 1623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1636, 0, 0, 0, 0, 1626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2058, 2059, 0, 2061, 2062, 1638, 0, 0, 0, 1642, 0, 0, 0, 1646, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1145, 362, 362, 0, 0, 1148, 561, 1844, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2635, 561, 561, 561, 561, 1862, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2869, 561, 561, 2872, 2007, 585, 585, 585, 585, 561, 1752, 585, 1938, 1844, 540, 540, 540, 540, 561, 561, 561, 561, 2275, 561, 561, 561, 561, 561, 561, 2281, 561, 2283, 561, 2286, 0, 0, 2056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2154, 0, 0, 0, 0, 0, 2118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2520, 0, 0, 0, 0, 2132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, 2463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158, 0, 0, 2161, 0, 540, 540, 2164, 540, 540, 540, 540, 540, 540, 540, 3053, 540, 3055, 540, 540, 540, 540, 540, 540, 540, 540, 2232, 540, 540, 2235, 2236, 540, 540, 0, 540, 540, 540, 2227, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2242, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 561, 561, 2246, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 1455, 585, 1458, 561, 2312, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 2650, 585, 585, 585, 585, 585, 585, 561, 3547, 3548, 0, 0, 0, 0, 0, 0, 3554, 0, 585, 585, 2331, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2381, 2382, 585, 585, 585, 585, 2387, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2397, 540, 540, 2415, 2416, 561, 561, 2419, 2420, 585, 585, 2423, 2424, 0, 1563, 0, 1569, 0, 1575, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 0, 2438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 2513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2519, 0, 0, 0, 0, 0, 0, 2478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2565, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1333, 540, 540, 540, 585, 585, 2682, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2693, 585, 585, 585, 585, 585, 585, 3590, 585, 585, 561, 0, 3594, 0, 0, 0, 0, 0, 0, 2516, 2466, 0, 0, 0, 0, 0, 2521, 0, 0, 2824, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2239, 561, 561, 561, 561, 2885, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1395, 561, 561, 561, 561, 561, 561, 561, 561, 1430, 561, 561, 561, 561, 561, 561, 561, 561, 2866, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 2933, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1985, 585, 585, 585, 585, 0, 3177, 0, 0, 0, 3180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1601, 1602, 0, 0, 0, 0, 0, 0, 0, 0, 3194, 0, 0, 0, 0, 0, 0, 3197, 0, 3199, 540, 540, 540, 540, 880, 540, 885, 540, 891, 540, 894, 540, 540, 908, 540, 540, 540, 540, 540, 3038, 540, 540, 540, 540, 540, 540, 540, 540, 3046, 540, 585, 3289, 3290, 0, 0, 0, 0, 3294, 0, 0, 0, 0, 0, 0, 0, 0, 1099, 0, 0, 0, 0, 0, 0, 0, 540, 540, 3316, 540, 540, 540, 3319, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1819, 540, 540, 540, 540, 1360, 561, 3337, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2646, 561, 3415, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3115, 3428, 585, 3430, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 2503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 336, 290, 0, 0, 0, 0, 3555, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3566, 540, 540, 561, 3064, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2617, 561, 561, 561, 561, 561, 3608, 561, 3609, 561, 561, 561, 561, 561, 561, 561, 585, 585, 3615, 585, 585, 585, 585, 585, 2658, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1952, 585, 585, 585, 585, 585, 3616, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 1067, 911, 561, 561, 561, 1072, 407, 353, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 1146, 0, 0, 472, 483, 472, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 523, 523, 527, 527, 527, 527, 472, 472, 472, 472, 472, 477, 472, 472, 527, 523, 527, 527, 527, 527, 539, 556, 579, 556, 579, 556, 556, 579, 556, 603, 579, 579, 579, 579, 579, 579, 579, 603, 603, 603, 556, 603, 603, 603, 603, 603, 579, 579, 619, 624, 603, 624, 630, 1, 12290, 3, 78112, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2101, 0, 738, 0, 0, 0, 644, 738, 0, 744, 745, 644, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 807, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 644, 0, 0, 0, 802, 0, 807, 0, 793, 0, 822, 0, 0, 0, 665, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 362, 0, 0, 0, 1134592, 0, 0, 0, 793, 793, 0, 644, 0, 0, 793, 807, 845, 0, 540, 850, 540, 540, 540, 540, 540, 2539, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3324, 540, 540, 540, 540, 540, 869, 873, 879, 883, 540, 540, 540, 540, 540, 899, 540, 540, 540, 540, 540, 540, 540, 3206, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2205, 540, 540, 540, 540, 540, 540, 561, 561, 920, 561, 561, 561, 561, 939, 943, 949, 561, 954, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 0, 2728, 0, 0, 1016, 1022, 585, 1027, 585, 585, 585, 585, 585, 1044, 585, 585, 585, 585, 585, 1058, 0, 0, 0, 540, 993, 585, 561, 540, 540, 899, 540, 540, 561, 561, 971, 561, 561, 561, 561, 561, 0, 585, 585, 993, 585, 585, 585, 585, 1012, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2784, 0, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1211, 1227, 0, 0, 1099, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 1674, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2753, 2754, 0, 1252, 1200, 0, 1233, 1255, 0, 1258, 0, 0, 0, 0, 0, 1130, 0, 0, 0, 0, 0, 1597, 0, 0, 0, 1600, 0, 0, 1603, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3320, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1801, 540, 540, 540, 1806, 540, 540, 0, 1267, 0, 0, 0, 0, 0, 1267, 0, 0, 1149, 1267, 0, 1274, 540, 540, 540, 540, 1282, 540, 540, 540, 1291, 540, 540, 540, 540, 540, 540, 540, 540, 2204, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2830, 540, 540, 540, 540, 540, 540, 540, 1279, 540, 540, 540, 540, 1285, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2194, 540, 540, 540, 540, 540, 540, 1306, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1317, 540, 540, 540, 540, 540, 2567, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2545, 540, 540, 540, 540, 1321, 540, 540, 540, 540, 540, 540, 540, 1327, 540, 540, 540, 1334, 1336, 540, 540, 540, 540, 1310, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1335, 540, 540, 540, 1360, 914, 1362, 561, 561, 561, 561, 1368, 561, 561, 561, 561, 1374, 561, 561, 561, 561, 1407, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2293, 561, 561, 561, 561, 561, 561, 1406, 561, 561, 561, 561, 1411, 561, 561, 561, 561, 561, 561, 561, 561, 1852, 561, 561, 561, 561, 561, 561, 561, 561, 1866, 561, 561, 561, 561, 561, 561, 561, 1418, 561, 561, 561, 1425, 1427, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1865, 561, 561, 561, 561, 561, 561, 561, 561, 1883, 561, 561, 561, 561, 561, 561, 561, 1459, 585, 585, 585, 585, 1465, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1533, 585, 585, 585, 585, 585, 1486, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1497, 585, 585, 585, 585, 585, 585, 1034, 585, 585, 585, 585, 1052, 585, 585, 585, 561, 1502, 585, 585, 585, 585, 585, 585, 585, 585, 1509, 585, 585, 585, 1516, 1518, 585, 585, 585, 585, 585, 2685, 585, 585, 585, 585, 2689, 585, 585, 585, 2694, 585, 561, 0, 1290, 1544, 1470, 1379, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3249, 561, 3251, 561, 561, 561, 561, 561, 561, 561, 585, 3534, 585, 3535, 585, 585, 585, 3539, 585, 0, 1575, 0, 0, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1632, 0, 0, 0, 0, 0, 1592, 1593, 0, 0, 0, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 1639, 0, 0, 0, 0, 0, 0, 0, 1647, 1648, 0, 0, 0, 0, 0, 0, 0, 2387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2987, 0, 0, 0, 0, 0, 2990, 0, 1655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2482, 0, 0, 0, 1721, 0, 0, 0, 0, 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, 300, 300, 300, 300, 0, 300, 300, 300, 300, 300, 540, 540, 540, 1747, 540, 540, 540, 540, 1753, 540, 540, 540, 540, 540, 540, 540, 540, 1817, 540, 540, 540, 540, 540, 540, 1360, 540, 540, 540, 1764, 540, 540, 540, 540, 1768, 540, 540, 540, 540, 540, 540, 540, 540, 2178, 540, 540, 540, 540, 540, 540, 540, 540, 1287, 1294, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1779, 540, 540, 1783, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2206, 2207, 540, 540, 540, 540, 1809, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1379, 561, 0, 1074, 585, 585, 1050, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 1106, 0, 0, 0, 0, 0, 0, 1210, 0, 561, 1845, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1856, 561, 561, 561, 561, 1423, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3253, 561, 561, 561, 561, 585, 561, 1860, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1871, 561, 561, 561, 561, 1424, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1920, 585, 585, 585, 585, 1876, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3244, 561, 561, 585, 2026, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 2079, 2080, 0, 0, 2082, 2083, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 3306, 0, 0, 0, 0, 0, 0, 2105, 0, 0, 0, 0, 2108, 2109, 0, 0, 0, 0, 0, 0, 301, 301, 301, 301, 0, 301, 301, 301, 301, 301, 2115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 2147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2781, 0, 0, 0, 0, 0, 2157, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 540, 2225, 540, 540, 540, 540, 2230, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 1696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2070, 0, 0, 0, 0, 0, 2242, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2618, 561, 561, 561, 561, 561, 2259, 561, 561, 2263, 561, 561, 561, 2267, 561, 561, 561, 561, 561, 561, 3610, 561, 3611, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 2030, 0, 1082, 0, 0, 0, 2032, 585, 2344, 585, 585, 2348, 585, 585, 585, 2352, 585, 585, 585, 585, 585, 585, 585, 1528, 585, 585, 585, 585, 585, 585, 1538, 585, 585, 585, 585, 2361, 585, 585, 2364, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1935, 1936, 585, 585, 585, 585, 1943, 585, 585, 2400, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 2718, 540, 540, 0, 0, 0, 2437, 0, 0, 0, 0, </string> </value> + </item> + <item> + <key> <string>next</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAABI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="18" aka="AAAAAAAAABI="> + <pickle> + <global name="Pdata" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +0, 0, 0, 0, 0, 0, 0, 0, 2794, 0, 0, 0, 0, 2473, 0, 0, 0, 2477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2511, 0, 540, 540, 2525, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2532, 540, 540, 540, 540, 1324, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1330, 540, 540, 540, 540, 540, 540, 2550, 540, 540, 2552, 540, 2553, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2193, 540, 540, 2196, 540, 540, 540, 540, 2563, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2574, 540, 540, 540, 540, 2827, 2828, 540, 540, 540, 540, 2831, 540, 540, 540, 540, 540, 540, 540, 1751, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1351, 540, 540, 540, 540, 540, 540, 0, 0, 0, 561, 561, 2587, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2264, 561, 561, 561, 561, 2269, 561, 561, 561, 2594, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2871, 561, 561, 2609, 561, 561, 561, 2612, 561, 561, 2614, 561, 2615, 561, 561, 561, 561, 561, 929, 561, 937, 561, 561, 561, 561, 561, 561, 561, 561, 2629, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2623, 561, 561, 2627, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2290, 2291, 561, 561, 561, 561, 561, 561, 561, 0, 2327, 585, 585, 585, 585, 585, 585, 585, 1507, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 3284, 540, 3286, 561, 561, 561, 561, 2638, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3099, 561, 561, 561, 0, 0, 2733, 2734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3002, 0, 0, 0, 2785, 0, 2787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2432, 0, 0, 0, 0, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3217, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3042, 540, 3044, 540, 540, 540, 540, 540, 540, 2848, 540, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 2318, 561, 561, 561, 561, 561, 0, 0, 0, 561, 561, 2859, 561, 2862, 561, 561, 561, 561, 2867, 561, 561, 561, 2870, 561, 561, 561, 561, 2302, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 940, 561, 561, 561, 561, 561, 561, 561, 561, 1394, 561, 561, 561, 561, 561, 561, 561, 1402, 561, 561, 561, 2896, 561, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 1529, 585, 585, 585, 585, 585, 585, 585, 585, 2661, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2907, 585, 2910, 585, 585, 585, 585, 2915, 585, 585, 585, 2918, 585, 585, 585, 585, 585, 1527, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2367, 585, 585, 585, 585, 585, 585, 585, 585, 2944, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 3373, 0, 0, 0, 3375, 0, 0, 2980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2979, 2991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3005, 0, 3006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2989, 0, 561, 561, 561, 561, 3078, 561, 561, 561, 561, 561, 561, 561, 561, 3086, 561, 561, 561, 561, 2315, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 2327, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3273, 585, 585, 585, 585, 585, 585, 561, 561, 585, 585, 585, 3107, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1969, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3119, 585, 585, 585, 585, 585, 585, 585, 585, 3127, 585, 585, 585, 585, 585, 1901, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 3065, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3479, 585, 585, 585, 585, 585, 0, 3159, 0, 0, 0, 0, 0, 0, 0, 3165, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 3304, 0, 0, 0, 0, 0, 0, 3191, 0, 0, 0, 0, 0, 0, 3195, 3196, 0, 0, 0, 0, 540, 540, 3601, 540, 3602, 540, 540, 540, 540, 540, 540, 540, 540, 1752, 540, 540, 540, 540, 540, 540, 540, 540, 1349, 540, 540, 540, 540, 540, 540, 540, 540, 1288, 540, 540, 540, 540, 540, 540, 540, 540, 1289, 540, 540, 540, 540, 540, 540, 540, 540, 1290, 540, 540, 540, 540, 1300, 540, 540, 3279, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 561, 561, 2611, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2304, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1853, 561, 561, 561, 561, 561, 561, 540, 540, 540, 540, 3317, 540, 540, 540, 3321, 540, 540, 540, 540, 540, 540, 540, 540, 2192, 540, 540, 540, 540, 540, 540, 2198, 561, 561, 561, 3339, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2628, 561, 561, 561, 561, 561, 561, 561, 561, 2305, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3348, 561, 561, 561, 585, 585, 585, 585, 585, 3353, 585, 585, 585, 3357, 561, 561, 3572, 561, 561, 561, 561, 561, 561, 561, 561, 3580, 585, 585, 585, 3584, 3597, 0, 3598, 3599, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3605, 3606, 540, 540, 540, 540, 2837, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1803, 540, 540, 540, 540, 585, 585, 585, 585, 585, 3619, 3620, 585, 561, 0, 0, 3623, 0, 0, 0, 540, 585, 585, 561, 540, 540, 895, 540, 540, 561, 561, 967, 561, 561, 3671, 585, 3672, 0, 540, 561, 585, 0, 540, 561, 585, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 1559, 0, 0, 0, 1565, 0, 0, 0, 1571, 2033, 0, 0, 0, 0, 1577, 2035, 0, 0, 0, 0, 0, 0, 0, 1682, 0, 1684, 0, 0, 0, 0, 0, 0, 0, 1712, 0, 0, 1715, 0, 0, 0, 0, 0, 355, 356, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2762, 0, 0, 0, 0, 0, 0, 0, 2768, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3198, 0, 540, 540, 473, 473, 487, 0, 0, 487, 356, 356, 356, 509, 356, 356, 356, 356, 473, 473, 580, 580, 580, 580, 580, 580, 580, 604, 604, 604, 557, 604, 604, 604, 604, 604, 580, 580, 557, 580, 604, 580, 604, 1, 12290, 3, 78112, 540, 870, 540, 540, 540, 540, 540, 540, 540, 540, 540, 904, 540, 540, 540, 540, 540, 540, 2191, 540, 540, 540, 540, 2195, 540, 2197, 540, 540, 561, 561, 976, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 1013, 1197, 0, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 1371, 561, 561, 561, 1380, 561, 561, 561, 561, 2639, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2644, 561, 561, 561, 561, 585, 585, 585, 1462, 585, 585, 585, 1471, 585, 585, 585, 585, 585, 585, 585, 585, 1472, 585, 1477, 585, 585, 1481, 585, 585, 1541, 561, 0, 1291, 585, 1471, 1380, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 2727, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 1582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2737, 0, 0, 0, 0, 0, 2741, 0, 1607, 0, 0, 0, 0, 0, 0, 0, 1615, 1616, 0, 0, 0, 0, 0, 0, 303, 204800, 204800, 0, 205103, 204800, 1, 12290, 3, 0, 1761, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1774, 1891, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3087, 561, 561, 561, 561, 1911, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 585, 1466, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2928, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1947, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2001, 585, 585, 585, 585, 585, 585, 585, 1960, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1973, 0, 0, 2243, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2634, 561, 561, 2328, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2384, 0, 0, 0, 0, 2425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2085, 2086, 0, 0, 0, 0, 2449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3175, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 2590, 561, 561, 561, 561, 561, 561, 2289, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2292, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2861, 561, 2863, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2877, 561, 561, 561, 561, 561, 561, 561, 561, 1899, 561, 561, 561, 561, 561, 1905, 561, 585, 585, 585, 2909, 585, 2911, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1984, 585, 585, 585, 585, 585, 585, 585, 3360, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1056, 585, 561, 0, 3556, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3567, 540, 561, 561, 561, 561, 2876, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 561, 561, 561, 561, 3656, 561, 585, 585, 585, 585, 3660, 585, 0, 0, 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147354, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2509, 0, 0, 357, 0, 367, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2457, 0, 0, 581, 581, 581, 581, 581, 581, 581, 605, 605, 605, 558, 605, 605, 605, 605, 605, 581, 581, 558, 581, 605, 581, 605, 1, 12290, 3, 78112, 865, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2575, 1385, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3243, 561, 1775, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3047, 585, 585, 585, 585, 1961, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2380, 585, 585, 585, 585, 2756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3315, 0, 2981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3188, 0, 3298, 0, 3299, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3388, 0, 0, 0, 0, 358, 359, 360, 361, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 702, 0, 0, 0, 0, 359, 0, 358, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 425, 65536, 0, 0, 0, 0, 1710, 1711, 0, 0, 0, 1714, 0, 0, 0, 0, 0, 1718, 425, 425, 0, 425, 0, 359, 425, 0, 456, 0, 0, 0, 0, 0, 0, 0, 1102, 0, 0, 0, 0, 1263, 1264, 0, 0, 0, 0, 0, 497, 497, 0, 504, 504, 504, 504, 510, 511, 504, 504, 524, 524, 524, 524, 456, 456, 456, 456, 456, 456, 456, 456, 524, 524, 524, 524, 524, 524, 524, 559, 582, 559, 582, 559, 559, 582, 559, 606, 582, 582, 582, 582, 582, 582, 582, 606, 606, 606, 559, 606, 606, 606, 606, 606, 582, 582, 620, 625, 606, 625, 631, 1, 12290, 3, 78112, 0, 0, 0, 540, 585, 585, 561, 540, 540, 900, 540, 540, 561, 561, 972, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 1934, 585, 585, 585, 585, 585, 585, 585, 0, 0, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2740, 0, 0, 0, 0, 0, 561, 2245, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3533, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3494, 561, 0, 0, 0, 0, 0, 0, 585, 2330, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1482, 585, 585, 540, 2549, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2237, 0, 540, 540, 2577, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 1611, 0, 0, 1614, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2891776, 0, 0, 0, 0, 0, 2392064, 583, 583, 583, 583, 583, 583, 583, 607, 607, 607, 560, 607, 607, 607, 607, 607, 583, 583, 560, 583, 607, 583, 607, 1, 12290, 3, 78112, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 866, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3224, 1136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 1659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 786, 561, 585, 585, 585, 585, 585, 1079, 1560, 0, 0, 0, 1566, 0, 0, 0, 1572, 0, 0, 0, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3313, 0, 0, 540, 2199, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2547, 540, 2535, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2822, 540, 561, 561, 561, 2597, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2317, 561, 561, 2320, 2321, 561, 561, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 743, 540, 540, 540, 540, 540, 540, 540, 3331, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3072, 561, 561, 561, 0, 0, 0, 540, 585, 585, 561, 1064, 540, 540, 905, 540, 1069, 561, 561, 977, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 1951, 585, 585, 585, 585, 585, 585, 585, 0, 0, 1594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2767, 0, 0, 561, 561, 1846, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2645, 561, 561, 585, 585, 585, 1977, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2692, 585, 585, 585, 540, 540, 540, 2188, 540, 2190, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 3334, 561, 561, 0, 0, 0, 561, 561, 561, 2247, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2613, 561, 561, 561, 561, 561, 561, 561, 2619, 561, 561, 2273, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3242, 561, 561, 0, 585, 585, 585, 2332, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2408, 540, 585, 585, 561, 561, 2647, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 2687, 585, 585, 2691, 585, 585, 585, 585, 585, 585, 585, 585, 2684, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2916, 585, 585, 585, 585, 561, 561, 585, 585, 585, 585, 585, 3109, 585, 585, 585, 585, 585, 585, 585, 585, 2702, 585, 585, 585, 585, 585, 585, 585, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225706, 0, 0, 1134592, 0, 0, 0, 1134592, 1134592, 0, 0, 1134592, 0, 0, 1134592, 0, 1134592, 0, 0, 0, 1134592, 1135005, 1135005, 0, 0, 0, 0, 0, 1135005, 0, 1134592, 1134592, 0, 0, 0, 0, 1135202, 1135202, 1135202, 1135202, 1134592, 1135202, 1135202, 1135202, 1135202, 1135202, 0, 1134592, 1134592, 1134592, 1134592, 1135202, 1134592, 1135202, 1, 12290, 3, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 1138688, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2125824, 2126738, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 987, 2125824, 2125824, 2125824, 2125824, 2424832, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 457, 457, 1147354, 457, 457, 457, 457, 457, 457, 457, 457, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2792, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 1147354, 1147354, 1147354, 1147405, 1147405, 1147354, 1147405, 1147405, 1, 12290, 3, 0, 0, 0, 0, 2042, 0, 0, 2045, 2046, 0, 0, 0, 2050, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 1142784, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3137536, 2125824, 2940928, 2940928, 2940928, 0, 0, 0, 0, 0, 0, 305, 440, 448, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 1159168, 0, 0, 1159168, 0, 1159168, 1159168, 0, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2802, 0, 540, 540, 540, 540, 540, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1, 12290, 3, 0, 0, 0, 0, 2053, 0, 2054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 799, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163264, 0, 0, 0, 0, 0, 155648, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 913, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 1452, 2125824, 2125824, 2125824, 2125824, 2424832, 106496, 0, 106496, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2782, 2783, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163840, 0, 0, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 0, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 2875392, 0, 0, 0, 0, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2654208, 2678784, 2760704, 2764800, 2785280, 2854912, 2969600, 2125824, 3006464, 2125824, 3018752, 2125824, 2125824\n ];\n \n XQueryParser.EXPECTED =\n @@ -21901,6 +22268,12 @@ define(\'ace/mode/xquery/visitors/SemanticHighlighter\', [\'require\', \'exports ]]></string> </value> </item> + <item> + <key> <string>next</string> </key> + <value> + <none/> + </value> + </item> </dictionary> </pickle> </record> diff --git a/bt5/erp5_ace_editor/bt/change_log b/bt5/erp5_ace_editor/bt/change_log index 1d07322351..ebf01a217c 100644 --- a/bt5/erp5_ace_editor/bt/change_log +++ b/bt5/erp5_ace_editor/bt/change_log @@ -1,3 +1,6 @@ +2013-08-22 jerome +* Update to 45d3068aa7190f08396bcfe134e505fe144c1ccb ( package 10.28.2013 ) + 2013-08-22 arnaud.fontaine * Ace Editor: Import the entire source code. diff --git a/bt5/erp5_ace_editor/bt/description b/bt5/erp5_ace_editor/bt/description index 03273683b5..774e582322 100644 --- a/bt5/erp5_ace_editor/bt/description +++ b/bt5/erp5_ace_editor/bt/description @@ -1 +1 @@ -This Business Template contains static files of Ace Javascript editor version 1.1.01. \ No newline at end of file +This Business Template contains static files of Ace Javascript editor from 'src' folder of https://github.com/ajaxorg/ace-builds/ \ No newline at end of file diff --git a/bt5/erp5_ace_editor/bt/revision b/bt5/erp5_ace_editor/bt/revision index 19c7bdba7b..25bf17fc5a 100644 --- a/bt5/erp5_ace_editor/bt/revision +++ b/bt5/erp5_ace_editor/bt/revision @@ -1 +1 @@ -16 \ No newline at end of file +18 \ No newline at end of file -- 2.30.9